--- 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 $'
+! !