Tools__MethodRewriter.st
branchjv
changeset 12207 17656fc80e6c
parent 12128 a7ff7d66ee85
child 12287 400a99059170
--- a/Tools__MethodRewriter.st	Thu Mar 22 13:55:44 2012 +0000
+++ b/Tools__MethodRewriter.st	Mon Mar 26 16:34:31 2012 +0100
@@ -624,67 +624,61 @@
 
 !MethodRewriter methodsFor:'actions'!
 
-doRewrite
-    | methodsMatching anyChange compositeChangeCollector |
+doRewrite: methodsMatching
+    | changes compositeChangeCollector |
 
-    compositeChangeCollector := CompositeRefactoryChange new.
-    compositeChangeCollector name:'Rewrite Change'.
+    changes := ChangeSet new name:'Rewrite Changes'.    
 
-    anyChange := false.
+    methodsMatching isEmptyOrNil ifTrue:[^Dialog warn:'No methods matching'].
 
-    methodsMatching := self methodsMatching.
-    methodsMatching isEmptyOrNil ifTrue:[^Dialog warn:'No methods matching'].
-    methodsMatching do:[:mth|
-        | newTree change |
+    self withMethods: methodsMatching do:[:mth|
+        | newTree newSource change |
 
-        newTree := ParseTreeRewriter new
+        newTree := ParseTreeSourceRewriter new
                     replace: self searchPattern 
                     with: self replacePattern;
                     executeTree: mth parseTree;
                     tree.
+        newSource := newTree source notNil
+                        ifTrue:[newTree source]
+                        ifFalse:[newTree formattedCode].
 
-        change := InteractiveAddMethodChange compile:(newTree formattedCode) in:mth mclass classified:mth category.
+        change := InteractiveAddMethodChange compile: newSource in:mth mclass classified:mth category.
 
         "/ collect in order to have only one change in the undo-list (instead of many)
-        compositeChangeCollector addChange:change.
-        anyChange := true.
+        changes add: change.
 
 "/        mth mclass 
 "/            compile: newTree formattedCode
 "/            classified: mth category
     ].
 
-    anyChange ifTrue:[
-        RefactoryChangeManager performChange:compositeChangeCollector.
-    ].
+    changes isEmpty ifTrue:[ ^ self ].
+
+    "/Let the user to inspect and confirm changes...."
+    changes := ChangeSetBrowser2 confirmChanges: changes.
+    changes isEmpty ifTrue:[ ^ self ].
+
+    "/Perform the refactoring..."
+    compositeChangeCollector := CompositeRefactoryChange new.
+    compositeChangeCollector name:'Rewrite Change'.
+    compositeChangeCollector changes: changes.
+    RefactoryChangeManager performChange:compositeChangeCollector.
 
     "Created: / 20-07-2007 / 16:03:47 / janfrog"
     "Modified: / 21-07-2007 / 06:55:42 / janfrog"
     "Modified: / 04-08-2011 / 19:05:25 / cg"
+    "Created: / 22-03-2012 / 18:22:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 doRewriteAction
 
-    self 
-        doSearch: self searchPattern
-        withResultDo:
-            [:methodsMatching|
-            self 
-                withMethods:methodsMatching 
-                do:
-                    [:mth|
-                    | newTree |
-                    newTree := ParseTreeRewriter new
-                                replace: self searchPattern with: self replacePattern;
-                                executeTree: mth parseTree;
-                                tree.
-                    mth mclass ifNotNil:
-                        [mth mclass 
-                            compile: newTree formattedCode
-                            classified: mth category]]
-                finallyDo:[]]
+    self doSearch: self searchPattern withResultDo: [:methodsMatching|
+        self doRewrite:  methodsMatching
+    ].
 
     "Created: / 12-12-2007 / 11:14:19 / janfrog"
+    "Modified: / 22-03-2012 / 18:23:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 doSearch
@@ -1032,6 +1026,13 @@
     "Created: / 21-07-2007 / 06:51:36 / janfrog"
 !
 
+withMethods: givenMethods do: methodBlock 
+
+    ^self withMethods: givenMethods do: methodBlock finallyDo: []
+
+    "Created: / 22-03-2012 / 18:25:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 withMethods: methods do: methodBlock finallyDo: finallyBlock
 
     [
@@ -1077,5 +1078,5 @@
 !
 
 version_SVN
-    ^ '$Id: Tools__MethodRewriter.st 7854 2012-01-30 17:49:41Z vranyj1 $'
-! !
\ No newline at end of file
+    ^ '$Id: Tools__MethodRewriter.st 7954 2012-03-26 15:34:31Z vranyj1 $'
+! !