allow for individual methods to be rewritten;
authorClaus Gittinger <cg@exept.de>
Tue, 05 Jul 2011 15:56:51 +0200
changeset 10170 3239c0b672eb
parent 10169 79d341054c76
child 10171 c7262bcb93c3
allow for individual methods to be rewritten; preps for undoable rewrites
Tools__MethodRewriter.st
--- a/Tools__MethodRewriter.st	Tue Jul 05 15:55:49 2011 +0200
+++ b/Tools__MethodRewriter.st	Tue Jul 05 15:56:51 2011 +0200
@@ -28,10 +28,11 @@
 "{ NameSpace: Tools }"
 
 ApplicationModel subclass:#MethodRewriter
-	instanceVariableNames:'replaceTextView classes searchTextView actionInProgresHolder
-		infoHolder progressHolder templateSearchPatternHolder
-		templateReplacePatternHolder selectedTemplateIndex templates
-		selectedTabIndex selectedClassesHolder'
+	instanceVariableNames:'replaceTextView methods classes searchTextView
+		actionInProgresHolder infoHolder progressHolder
+		templateSearchPatternHolder templateReplacePatternHolder
+		selectedTemplateIndex templates selectedTabIndex
+		selectedClassesHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-MethodRewriter'
@@ -624,24 +625,42 @@
 !MethodRewriter methodsFor:'actions'!
 
 doRewrite
+    | methodsMatching anyChange compositeChangeCollector |
 
-    | methodsMatching |
+    compositeChangeCollector := CompositeRefactoryChange new.
+    compositeChangeCollector name:'Rewrite Change'.
+
+    anyChange := false.
+
     methodsMatching := self methodsMatching.
     methodsMatching isNilOrEmptyCollection ifTrue:[^Dialog warn:'No methods matching'].
-    methodsMatching do:
-        [:mth|
-        | newTree |
+    methodsMatching do:[:mth|
+        | newTree change |
+
         newTree := ParseTreeRewriter new
                     replace: self searchPattern with: self replacePattern;
                     executeTree: mth parseTree;
                     tree.
-        mth mclass 
-            compile: newTree formattedCode
-            classified: mth category
-        ].
+
+        
+        change := InteractiveAddMethodChange compile:(newTree formattedCode) 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.
+
+"/        mth mclass 
+"/            compile: newTree formattedCode
+"/            classified: mth category
+    ].
+
+    anyChange ifTrue:[
+        RefactoryChangeManager performChange:compositeChangeCollector.
+    ].
 
     "Created: / 20-07-2007 / 16:03:47 / janfrog"
     "Modified: / 21-07-2007 / 06:55:42 / janfrog"
+    "Modified: / 05-07-2011 / 14:57:49 / cg"
 !
 
 doRewriteAction
@@ -954,10 +973,18 @@
 !
 
 methods
+    methods notNil ifTrue:[^ methods].
 
     ^self methodsFor: classes
 
     "Modified: / 21-07-2007 / 06:24:07 / janfrog"
+    "Modified: / 05-07-2011 / 14:50:43 / cg"
+!
+
+methods:aCollection
+    methods := aCollection
+
+    "Created: / 05-07-2011 / 14:50:52 / cg"
 !
 
 methodsFor: aColletion
@@ -1046,7 +1073,7 @@
 !MethodRewriter class methodsFor:'documentation'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodRewriter.st,v 1.12 2011-07-05 09:31:51 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodRewriter.st,v 1.13 2011-07-05 13:56:51 cg Exp $'
 !
 
 version_SVN