author | Jakub Nesveda <jakubnesveda@seznam.cz> |
Thu, 05 Feb 2015 22:23:57 +0100 | |
changeset 812 | 8b0a808cefa9 |
parent 803 | 95cdac772759 |
child 828 | 4c5acc592dc7 |
permissions | -rw-r--r-- |
629
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
1 |
"{ Package: 'jn:refactoring_custom' }" |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
2 |
|
803
95cdac772759
Fixed failing tests caused by new STX release
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
777
diff
changeset
|
3 |
"{ NameSpace: Smalltalk }" |
95cdac772759
Fixed failing tests caused by new STX release
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
777
diff
changeset
|
4 |
|
777
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
5 |
ParseTreeSourceRewriter subclass:#CustomParseTreeRewriter |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
6 |
instanceVariableNames:'oldSource newSource' |
629
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
7 |
classVariableNames:'' |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
8 |
poolDictionaries:'' |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
9 |
category:'Interface-Refactoring-Custom' |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
10 |
! |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
11 |
|
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
12 |
!CustomParseTreeRewriter class methodsFor:'documentation'! |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
13 |
|
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
14 |
documentation |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
15 |
" |
777
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
16 |
Extension for ParseTreeSourceRewriter so that it work even for expressions and not just methods. |
629
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
17 |
|
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
18 |
[author:] |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
19 |
Jakub Nesveda <nesvejak@fit.cvut.cz> |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
20 |
|
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
21 |
" |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
22 |
! ! |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
23 |
|
777
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
24 |
!CustomParseTreeRewriter methodsFor:'accessing'! |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
25 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
26 |
executeTree: aParseTree |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
27 |
"Like ParseTreeSourceRewriter >> executeTree:, but with |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
28 |
additional support for expressions" |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
29 |
| oldContext treeFromRewrittenSource | |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
30 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
31 |
oldContext := context. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
32 |
context := (RBSmallDictionary ? Dictionary) new. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
33 |
answer := false. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
34 |
oldSource isNil ifTrue: [ |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
35 |
oldSource := aParseTree source |
812
8b0a808cefa9
Fixed failed tests in CustomRefactoryBuilder
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
803
diff
changeset
|
36 |
]. |
777
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
37 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
38 |
oldSource isNil ifTrue: [ |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
39 |
self error: 'We need the oldSource string to be set'. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
40 |
]. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
41 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
42 |
"/Rewrite the tree as usual and then (try to) rewrite the original source code |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
43 |
tree := self visitNode: aParseTree. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
44 |
replacements notNil ifTrue:[ |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
45 |
newSource := self executeReplacementsInSource: oldSource. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
46 |
] ifFalse:[ |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
47 |
^answer |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
48 |
]. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
49 |
"/DO NOT forget rewrites here!!!!!!" |
629
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
50 |
|
777
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
51 |
"/Now, validates that rewritten parse tree is the same as |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
52 |
"/the one we get from the rewritten source: |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
53 |
aParseTree isMethod ifTrue: [ |
812
8b0a808cefa9
Fixed failed tests in CustomRefactoryBuilder
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
803
diff
changeset
|
54 |
treeFromRewrittenSource := RBParser parseRewriteMethod: newSource onError:[:error :position|nil]. |
777
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
55 |
] ifFalse: [ |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
56 |
treeFromRewrittenSource := RBParser parseExpression: newSource onError:[:error :position|nil]. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
57 |
]. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
58 |
treeFromRewrittenSource = tree ifTrue:[ |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
59 |
(tree respondsTo: #source:) ifTrue: [ |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
60 |
tree source: newSource. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
61 |
]. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
62 |
] ifFalse: [ |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
63 |
"Better set newSource to nil in order to indicate that something went wrong" |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
64 |
newSource := nil. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
65 |
]. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
66 |
context := oldContext. |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
67 |
^answer |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
68 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
69 |
"Created: / 09-12-2014 / 21:16:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>" |
812
8b0a808cefa9
Fixed failed tests in CustomRefactoryBuilder
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
803
diff
changeset
|
70 |
"Modified: / 05-02-2015 / 22:07:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>" |
777
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
71 |
! |
629
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
72 |
|
777
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
73 |
newSource |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
74 |
"Returns the source code string after the replacements were executed" |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
75 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
76 |
^ newSource |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
77 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
78 |
"Modified (comment): / 09-12-2014 / 22:19:03 / Jakub Nesveda <nesvejak@fit.cvut.cz>" |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
79 |
! |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
80 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
81 |
oldSource |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
82 |
"Returns custom old source code string - the code before replacements were made" |
629
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
83 |
|
777
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
84 |
^ oldSource |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
85 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
86 |
"Modified (comment): / 09-12-2014 / 21:19:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>" |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
87 |
! |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
88 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
89 |
oldSource: aString |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
90 |
"see oldSource" |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
91 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
92 |
oldSource := aString |
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
93 |
|
8f212cf1bb45
Improvemens in CustomRefactoryBuilder - no complete reformatting of method source code, but only the replacement parts
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
629
diff
changeset
|
94 |
"Modified (comment): / 09-12-2014 / 21:19:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>" |
629
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
95 |
! ! |
e85070e8c11b
add code selection object (CustomSourceCodeSelection) with code, method, class... to CustomContext
Jakub Nesveda <jakubnesveda@seznam.cz>
parents:
diff
changeset
|
96 |