1 | "{ Encoding: utf8 }" !
|
---|
2 | !Tools::MethodRewriter methodsFor:'actions'!
|
---|
3 |
|
---|
4 | doRewrite: methodsMatching usingRewriter: rewriter
|
---|
5 | | changes compositeChangeCollector |
|
---|
6 |
|
---|
7 | changes := ChangeSet new name:'Rewrite Changes'.
|
---|
8 |
|
---|
9 | methodsMatching isEmptyOrNil ifTrue:[^Dialog warn:(resources string:'No methods matching')].
|
---|
10 |
|
---|
11 | self withMethods: methodsMatching do:[:mth|
|
---|
12 | | newTree change |
|
---|
13 |
|
---|
14 | (self isMethodPatternHolder value) ifTrue:[
|
---|
15 | rewriter replaceMethod: self searchPattern with: self replacePattern
|
---|
16 | ] ifFalse:[
|
---|
17 | rewriter replace: self searchPattern with: self replacePattern
|
---|
18 | ].
|
---|
19 | newTree := rewriter
|
---|
20 | executeTree: mth parseTree;
|
---|
21 | tree.
|
---|
22 |
|
---|
23 | change := InteractiveAddMethodChange compile: newTree newSource in:(mth mclass ? mth getMclass) classified:mth category.
|
---|
24 |
|
---|
25 | "/ collect in order to have only one change in the undo-list (instead of many)
|
---|
26 | changes add: change.
|
---|
27 |
|
---|
28 | "/ mth mclass
|
---|
29 | "/ compile: newTree formattedCode
|
---|
30 | "/ classified: mth category
|
---|
31 | ].
|
---|
32 |
|
---|
33 | changes isEmpty ifTrue:[ ^ self ].
|
---|
34 |
|
---|
35 | "/Let the user to inspect and confirm changes...."
|
---|
36 | changes := ChangeSetBrowser2 confirmChanges: changes.
|
---|
37 | changes isEmpty ifTrue:[ ^ self ].
|
---|
38 |
|
---|
39 | "/Perform the refactoring..."
|
---|
40 | compositeChangeCollector := CompositeRefactoryChange new.
|
---|
41 | compositeChangeCollector name:'Rewrite Change'.
|
---|
42 | compositeChangeCollector changes: changes.
|
---|
43 | RefactoryChangeManager performChange:compositeChangeCollector.
|
---|
44 |
|
---|
45 | "Created: / 09-08-2019 / 11:14:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
|
---|
46 | ! !
|
---|
47 |
|
---|
48 | !Tools::MethodRewriter methodsFor:'actions'!
|
---|
49 |
|
---|
50 | doRewrite: methodsMatching
|
---|
51 | "Rewrite given methods."
|
---|
52 |
|
---|
53 | "/ We want to use ParseTreeSourceRewriter, a all-hacked version
|
---|
54 | "/ of ParseTreeRewriter that tries hard to preserve formatting.
|
---|
55 | "/
|
---|
56 | "/ However, this rewriter sometimes fail, a consequence of
|
---|
57 | "/ lets-hack-it-without-understanding-RB.
|
---|
58 | "/
|
---|
59 | "/ To workaround this, we try using the all-hacked ParseTreeSourceRewriter
|
---|
60 | "/ and if it fails, use the old one and hope for the best.
|
---|
61 | [
|
---|
62 | self doRewrite: methodsMatching usingRewriter: ParseTreeSourceRewriter new
|
---|
63 | ] on: Error do:[
|
---|
64 | "/ I (JV) want to see what's the problem, hence the breakpoint.
|
---|
65 | self breakPoint: #jv.
|
---|
66 | self doRewrite: methodsMatching usingRewriter: ParseTreeRewriter new
|
---|
67 | ].
|
---|
68 |
|
---|
69 | "Created: / 20-07-2007 / 16:03:47 / janfrog"
|
---|
70 | "Modified: / 21-07-2007 / 06:55:42 / janfrog"
|
---|
71 | "Modified: / 04-08-2011 / 19:05:25 / cg"
|
---|
72 | "Created: / 22-03-2012 / 18:22:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
|
---|
73 | "Modified: / 09-08-2019 / 11:22:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
|
---|
74 | ! !
|
---|
75 |
|
---|