Ticket #286: issue286-workaround.st

File issue286-workaround.st, 2.7 KB (added by jan vrany, 5 years ago)

Possible workaround

Line 
1"{ Encoding: utf8 }" !
2!Tools::MethodRewriter methodsFor:'actions'!
3
4doRewrite: 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
50doRewrite: 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