author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Tue, 05 Aug 2014 14:11:06 +0100 | |
changeset 262 | 1eb48733dac1 |
parent 261 | b583a3b5f398 |
child 263 | df89d5b4dfe0 |
permissions | -rw-r--r-- |
252
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
1 |
" |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
2 |
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
3 |
Copyright (C) 2013-2014 Jan Vrany |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
4 |
|
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
5 |
This library is free software; you can redistribute it and/or |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
6 |
modify it under the terms of the GNU Lesser General Public |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
7 |
License as published by the Free Software Foundation; either |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
8 |
version 2.1 of the License. |
252
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
9 |
|
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
10 |
This library is distributed in the hope that it will be useful, |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
13 |
Lesser General Public License for more details. |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
14 |
|
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
15 |
You should have received a copy of the GNU Lesser General Public |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
16 |
License along with this library; if not, write to the Free Software |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
17 |
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
18 |
" |
249
8bc64027b189
Package renamed to stx:goodies/smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
205
diff
changeset
|
19 |
"{ Package: 'stx:goodies/smallsense' }" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
20 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
21 |
"{ NameSpace: SmallSense }" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
22 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
23 |
Object subclass:#SmalltalkInferencer |
205
43bee6463c53
Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
182
diff
changeset
|
24 |
instanceVariableNames:'type class classInfo source parser parserClass tree environment' |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
25 |
classVariableNames:'' |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
26 |
poolDictionaries:'' |
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
27 |
category:'SmallSense-Smalltalk-Types-Inference' |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
28 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
29 |
|
101
a300290bf8fc
Classes renamed to better express theit purpose.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
95
diff
changeset
|
30 |
SmalltalkParseNodeVisitor subclass:#Phase1 |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
31 |
instanceVariableNames:'classInfo sends types' |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
32 |
classVariableNames:'' |
179 | 33 |
poolDictionaries:'SmallSense::SmalltalkInferencerParameters' |
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
34 |
privateIn:SmalltalkInferencer |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
35 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
36 |
|
101
a300290bf8fc
Classes renamed to better express theit purpose.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
95
diff
changeset
|
37 |
SmalltalkParseNodeVisitor subclass:#Phase2 |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
38 |
instanceVariableNames:'classInfo' |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
39 |
classVariableNames:'' |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
40 |
poolDictionaries:'' |
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
41 |
privateIn:SmalltalkInferencer |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
42 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
43 |
|
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
44 |
SmalltalkParseNodeVisitor subclass:#Phase3 |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
45 |
instanceVariableNames:'' |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
46 |
classVariableNames:'' |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
47 |
poolDictionaries:'' |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
48 |
privateIn:SmalltalkInferencer |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
49 |
! |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
50 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
51 |
!SmalltalkInferencer class methodsFor:'documentation'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
52 |
|
252
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
53 |
copyright |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
54 |
" |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
55 |
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
56 |
Copyright (C) 2013-2014 Jan Vrany |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
57 |
|
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
58 |
This library is free software; you can redistribute it and/or |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
59 |
modify it under the terms of the GNU Lesser General Public |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
60 |
License as published by the Free Software Foundation; either |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
61 |
version 2.1 of the License. |
252
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
62 |
|
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
63 |
This library is distributed in the hope that it will be useful, |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
64 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
65 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
66 |
Lesser General Public License for more details. |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
67 |
|
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
68 |
You should have received a copy of the GNU Lesser General Public |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
69 |
License along with this library; if not, write to the Free Software |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
70 |
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
71 |
" |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
72 |
! |
feba6ee5c814
Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
249
diff
changeset
|
73 |
|
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
74 |
documentation |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
75 |
" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
76 |
A heart of SmallSense - a type inferencer. For given class |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
77 |
and method source, instance of inferences walks the parse tree |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
78 |
and annotate each node with inferred type. |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
79 |
|
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
80 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
81 |
[author:] |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
82 |
Jan Vrany <jan.vrany@fit.cvut.cz> |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
83 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
84 |
[instance variables:] |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
85 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
86 |
[class variables:] |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
87 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
88 |
[see also:] |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
89 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
90 |
" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
91 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
92 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
93 |
!SmalltalkInferencer class methodsFor:'instance creation'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
94 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
95 |
forClass: class methodSource: source |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
96 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
97 |
^self new class: class source: source |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
98 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
99 |
"Created: / 26-11-2011 / 12:45:49 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
100 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
101 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
102 |
forClass: class selector: selector |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
103 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
104 |
^self new class: class selector: selector. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
105 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
106 |
"Created: / 26-11-2011 / 12:44:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
107 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
108 |
|
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
109 |
forExpression: source |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
110 |
|
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
111 |
^self new expression: source. |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
112 |
|
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
113 |
"Created: / 04-10-2013 / 08:12:24 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
114 |
! |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
115 |
|
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
116 |
forMethod: method |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
117 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
118 |
^self new method: method. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
119 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
120 |
"Created: / 26-11-2011 / 12:45:16 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
121 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
122 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
123 |
!SmalltalkInferencer methodsFor:'accessing'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
124 |
|
205
43bee6463c53
Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
182
diff
changeset
|
125 |
environment |
43bee6463c53
Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
182
diff
changeset
|
126 |
^ environment |
43bee6463c53
Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
182
diff
changeset
|
127 |
! |
43bee6463c53
Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
182
diff
changeset
|
128 |
|
43bee6463c53
Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
182
diff
changeset
|
129 |
environment:something |
43bee6463c53
Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
182
diff
changeset
|
130 |
environment := something. |
43bee6463c53
Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
182
diff
changeset
|
131 |
! |
43bee6463c53
Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
182
diff
changeset
|
132 |
|
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
133 |
klass |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
134 |
^ class |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
135 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
136 |
"Created: / 26-11-2011 / 17:30:35 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
137 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
138 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
139 |
manager |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
140 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
141 |
^Manager instance |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
142 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
143 |
"Created: / 27-11-2011 / 16:16:41 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
144 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
145 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
146 |
parser |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
147 |
^ parser |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
148 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
149 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
150 |
parserClass |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
151 |
^ parserClass |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
152 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
153 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
154 |
parserClass:aClass |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
155 |
parserClass := aClass. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
156 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
157 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
158 |
source |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
159 |
^ source |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
160 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
161 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
162 |
tree |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
163 |
^ tree |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
164 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
165 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
166 |
!SmalltalkInferencer methodsFor:'initialization'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
167 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
168 |
class: cls selector: sel |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
169 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
170 |
| m | |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
171 |
m := cls >> sel. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
172 |
m isNil ifTrue:[ |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
173 |
self error: 'No method found'. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
174 |
]. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
175 |
self method: m. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
176 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
177 |
"Created: / 26-11-2011 / 12:47:39 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
178 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
179 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
180 |
class: cls source: src |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
181 |
|
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
182 |
type isNil ifTrue:[ |
121
6fc2c58db318
Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
120
diff
changeset
|
183 |
"/ Guess... |
6fc2c58db318
Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
120
diff
changeset
|
184 |
type := cls notNil ifTrue:[ #method ] ifFalse:[ #expression ] |
6fc2c58db318
Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
120
diff
changeset
|
185 |
]. |
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
186 |
class := cls ? UndefinedObject. |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
187 |
classInfo := self manager infoForClass: class. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
188 |
source := src. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
189 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
190 |
"Created: / 26-11-2011 / 14:46:55 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
121
6fc2c58db318
Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
120
diff
changeset
|
191 |
"Modified: / 04-10-2013 / 08:31:11 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
192 |
! |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
193 |
|
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
194 |
expression: expression |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
195 |
|
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
196 |
type := #expression. |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
197 |
self class: nil source: expression. |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
198 |
|
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
199 |
"Created: / 04-10-2013 / 08:14:11 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
200 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
201 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
202 |
method: method |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
203 |
|
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
204 |
type := #method. |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
205 |
self class: method mclass source: method source. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
206 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
207 |
"Created: / 26-11-2011 / 12:48:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
208 |
"Modified: / 04-10-2013 / 08:13:21 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
209 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
210 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
211 |
!SmalltalkInferencer methodsFor:'private'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
212 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
213 |
infer |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
214 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
215 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
216 |
Phase1 process: tree in: class. |
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
217 |
Phase2 process: tree in: class. |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
218 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
219 |
" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
220 |
(SmallSenseParseNodeInspector new node: tree source: source) open |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
221 |
" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
222 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
223 |
"Created: / 26-11-2011 / 12:51:32 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
224 |
"Modified: / 05-08-2014 / 14:04:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
225 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
226 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
227 |
parse |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
228 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
229 |
parserClass isNil ifTrue:[ |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
230 |
parserClass := class parserClass. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
231 |
]. |
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
232 |
type == #method ifTrue:[ |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
233 |
parser := parserClass |
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
234 |
parseMethod: source in: class |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
235 |
ignoreErrors:true |
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
236 |
ignoreWarnings:true. |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
237 |
tree := parser tree. |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
238 |
] ifFalse:[ |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
239 |
type == #expression ifTrue:[ |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
240 |
parser := parserClass for: source. |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
241 |
tree := parser |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
242 |
parseExpressionWithSelf:nil |
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
243 |
notifying:nil |
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
244 |
ignoreErrors:false |
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
245 |
ignoreWarnings:false |
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
246 |
inNameSpace:nil. |
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
247 |
parser tree: tree. |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
248 |
]. |
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
249 |
]. |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
250 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
251 |
"Created: / 26-11-2011 / 12:51:31 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
120
4fefce92f5bb
Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
119
diff
changeset
|
252 |
"Modified: / 04-10-2013 / 08:15:56 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
253 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
254 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
255 |
!SmalltalkInferencer methodsFor:'processing'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
256 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
257 |
process |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
258 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
259 |
"Actually infer types. Returns an annotated method tree. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
260 |
The tree is also stored in an instance variable, so it |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
261 |
may be obtained form receiver any time by asking for #tree." |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
262 |
|
182
7fdc6e26f0f1
Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
179
diff
changeset
|
263 |
[ |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
264 |
self parse. |
182
7fdc6e26f0f1
Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
179
diff
changeset
|
265 |
] on: Error do:[:ex| |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
266 |
Transcript showCR: ex description. |
182
7fdc6e26f0f1
Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
179
diff
changeset
|
267 |
^ self. |
7fdc6e26f0f1
Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
179
diff
changeset
|
268 |
]. |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
269 |
tree notNil ifTrue:[ |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
270 |
self infer. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
271 |
]. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
272 |
^tree |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
273 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
274 |
"Created: / 26-11-2011 / 12:50:54 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
182
7fdc6e26f0f1
Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
179
diff
changeset
|
275 |
"Modified: / 21-03-2014 / 19:00:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
276 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
277 |
|
262
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
278 |
!SmalltalkInferencer::Phase1 class methodsFor:'documentation'! |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
279 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
280 |
documentation |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
281 |
" |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
282 |
Inferencing phase 1: guess type of variables based on message sends |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
283 |
(idea taken from RoelTyper). |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
284 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
285 |
Also, assign types for known variables (globals, literals, pseudo variables) |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
286 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
287 |
[author:] |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
288 |
Jan Vrany <jan.vrany@fit.cvut.cz> |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
289 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
290 |
[instance variables:] |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
291 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
292 |
[class variables:] |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
293 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
294 |
[see also:] |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
295 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
296 |
" |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
297 |
! ! |
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
298 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
299 |
!SmalltalkInferencer::Phase1 methodsFor:'initialization'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
300 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
301 |
initialize |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
302 |
"Invoked when a new instance is created." |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
303 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
304 |
"/ please change as required (and remove this comment) |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
305 |
sends := Dictionary new. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
306 |
types := Dictionary new. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
307 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
308 |
"/ super initialize. -- commented since inherited method does nothing |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
309 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
310 |
"Modified: / 26-11-2011 / 19:31:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
311 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
312 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
313 |
!SmalltalkInferencer::Phase1 methodsFor:'private'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
314 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
315 |
rootsUnderstanding: selectors |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
316 |
"When the set of selectors is not empty, answer a set of the highest possible classes in the system that implement all the selectors. |
91
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
317 |
When the set of selectors is empty, return the empty set." |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
318 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
319 |
| initialClasses nextClasses traverseStack next | |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
320 |
selectors isEmpty ifTrue: [^OrderedCollection new]. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
321 |
nextClasses := OrderedCollection with: Object. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
322 |
traverseStack := OrderedCollection new: 1000. |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
323 |
|
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
324 |
selectors |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
325 |
do: |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
326 |
[:selector | |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
327 |
initialClasses := nextClasses. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
328 |
nextClasses := OrderedCollection new. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
329 |
initialClasses |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
330 |
do: |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
331 |
[:initialClass | |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
332 |
"inline canUnderstand: for performance" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
333 |
|cl| |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
334 |
cl := initialClass. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
335 |
[(cl == nil) or: [(cl methodDictionary includesKey: selector)]] whileFalse: [cl := cl superclass]. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
336 |
(cl == nil) |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
337 |
ifFalse: [nextClasses addLast: initialClass] |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
338 |
ifTrue: |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
339 |
[|size| |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
340 |
traverseStack reset. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
341 |
traverseStack addLast: initialClass. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
342 |
size := 1. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
343 |
"(traverseStack isEmpty) removed for performance" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
344 |
[size = 0] |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
345 |
whileFalse: |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
346 |
[ |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
347 |
"(traverseStack removeFirst) removed for performance" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
348 |
next := traverseStack removeFirst. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
349 |
size := size -1. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
350 |
next |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
351 |
subclassesDo: |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
352 |
[:subcl | |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
353 |
"(subcl includesSelector: selector) removed for performance" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
354 |
(subcl methodDictionary includesKey: selector) |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
355 |
ifTrue: [nextClasses addLast: subcl] |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
356 |
ifFalse: [traverseStack addLast: subcl. size := size + 1]]]]]]. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
357 |
^nextClasses |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
358 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
359 |
"Modified: / 24-11-2010 / 14:39:35 / Jakub <zelenja7@fel.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
360 |
"Modified: / 26-11-2011 / 14:01:32 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
91
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
361 |
"Modified (comment): / 18-09-2013 / 01:22:07 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
362 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
363 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
364 |
!SmalltalkInferencer::Phase1 methodsFor:'processing'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
365 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
366 |
process: tree in: cls |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
367 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
368 |
self process: tree in: cls info: (Manager instance infoForClass: cls) |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
369 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
370 |
"Created: / 26-11-2011 / 13:48:46 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
142
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
371 |
! |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
372 |
|
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
373 |
process: tree in: cls info: clsInfo |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
374 |
|
179 | 375 |
| i c def prereqs | |
142
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
376 |
|
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
377 |
class := cls. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
378 |
classInfo := clsInfo. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
379 |
|
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
380 |
"Fill types with cached data..." |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
381 |
|
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
382 |
c := class. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
383 |
i := classInfo. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
384 |
[ c notNil and:[i notNil] ] whileTrue:[ |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
385 |
c instVarNames do:[:nm| |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
386 |
types at: nm put: (i infoForInstvar: nm) |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
387 |
]. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
388 |
c := c superclass. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
389 |
i := i superclassInfo. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
390 |
]. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
391 |
|
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
392 |
self visit:tree. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
393 |
|
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
394 |
|
179 | 395 |
prereqs := nil. |
396 |
def := ProjectDefinition definitionClassForPackage: class package createIfAbsent: false. |
|
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
397 |
def notNil ifTrue:[ |
179 | 398 |
prereqs := def effectivePreRequisites. |
399 |
]. |
|
400 |
||
401 |
||
142
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
402 |
"Now, infer variable types based on collected sends" |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
403 |
sends keysAndValuesDo:[:varName :sentSelectors| |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
404 |
(types includesKey: varName) ifTrue:[ |
179 | 405 |
| classes union | |
406 |
classes := (self rootsUnderstanding: sentSelectors) collect:[:each | ClassType new klass: each ]. |
|
142
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
407 |
|
179 | 408 |
prereqs notNil ifTrue:[ |
409 |
"/ Make classes in packages on which method's package does **NOT** depend |
|
410 |
"/ less likely to be correct (by lowering their trustfullness) |
|
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
411 |
classes do:[:each | |
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
412 |
(prereqs includes: each klass package) ifTrue:[ |
179 | 413 |
each trustfullnessAdd: -20 |
414 |
]. |
|
415 |
] |
|
416 |
]. |
|
417 |
union := UnionType new. |
|
418 |
union addType: (types at: varName) type. |
|
419 |
union addTypes: classes. |
|
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
420 |
(types at: varName) type: union |
142
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
421 |
]. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
422 |
]. |
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
423 |
|
211f95ac0835
- SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
141
diff
changeset
|
424 |
"Created: / 27-11-2011 / 16:22:24 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
179 | 425 |
"Modified (format): / 01-03-2014 / 23:19:24 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
426 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
427 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
428 |
!SmalltalkInferencer::Phase1 methodsFor:'visiting'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
429 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
430 |
visitAssignmentNode:anObject |
95
78bcbdfd9361
Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
91
diff
changeset
|
431 |
| type | |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
432 |
|
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
433 |
self visit: anObject variable. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
434 |
self visit: anObject expression. |
95
78bcbdfd9361
Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
91
diff
changeset
|
435 |
type := anObject expression inferedType type. |
78bcbdfd9361
Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
91
diff
changeset
|
436 |
type isUnknownType ifFalse:[ |
78bcbdfd9361
Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
91
diff
changeset
|
437 |
anObject variable inferedType union: type |
78bcbdfd9361
Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
91
diff
changeset
|
438 |
]. |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
439 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
440 |
"Created: / 26-11-2011 / 13:53:12 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
95
78bcbdfd9361
Fix in type inference - propagate types to a variable in assignments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
91
diff
changeset
|
441 |
"Modified: / 18-09-2013 / 02:31:08 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
442 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
443 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
444 |
visitBlockNode:anObject |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
445 |
| type | |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
446 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
447 |
super visitBlockNode:anObject. |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
448 |
type := Type withClass: Block. |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
449 |
type trustfullness: 100. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
450 |
anObject inferedType: type. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
451 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
452 |
"Created: / 26-11-2011 / 14:46:02 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
453 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
454 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
455 |
visitConstantNode:anObject |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
456 |
"Type of a constant is trivially its value class" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
457 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
458 |
| type | |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
459 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
460 |
super visitConstantNode: anObject. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
461 |
type := (Type withClass: anObject value class). |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
462 |
type trustfullness: 100. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
463 |
anObject inferedType: type. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
464 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
465 |
"Created: / 26-11-2011 / 13:55:34 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
466 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
467 |
|
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
468 |
visitMessageNode:anObject |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
469 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
470 |
| rec | |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
471 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
472 |
super visitMessageNode: anObject. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
473 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
474 |
(rec := anObject receiver) isVariableNode ifTrue:[ |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
475 |
"We don't have to infer types for global/class variables" |
119
9bb3a9892c2e
Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
476 |
(rec isGlobalVariable or:[rec isClassVariable]) ifTrue:[ |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
477 |
"/ Check for pattern: `Smalltalk at: #ClassName` |
119
9bb3a9892c2e
Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
478 |
(rec name = 'Smalltalk' and:[anObject arguments conform:[:node | node isConstant ] ]) ifTrue:[ |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
479 |
| result | |
119
9bb3a9892c2e
Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
480 |
|
125
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
481 |
"Here, evaluate the node, but only for certain known selectors!! |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
482 |
(think of selector #exit :-) - you'll laugh, but it hit me back hard |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
483 |
couple times... |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
484 |
" |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
485 |
(#( at: |
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
486 |
classNamed: |
125
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
487 |
"/ add more... |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
488 |
) includes:anObject selector) ifTrue:[ |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
489 |
[ |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
490 |
result := anObject evaluate. |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
491 |
result notNil ifTrue:[ |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
492 |
anObject inferedType: ((Type withClass: result class) trustfullness: 100) |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
493 |
] |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
494 |
] on: Error do:[ |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
495 |
"/pass |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
496 |
] |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
497 |
] |
119
9bb3a9892c2e
Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
498 |
]. |
9bb3a9892c2e
Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
499 |
] ifFalse:[ |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
500 |
(sends at: rec name ifAbsentPut:[Set new]) add: anObject selector. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
501 |
]. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
502 |
]. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
503 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
504 |
"Created: / 26-11-2011 / 13:02:28 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
119
9bb3a9892c2e
Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
505 |
"Modified: / 04-10-2013 / 07:56:20 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
506 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
507 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
508 |
visitSelfNode:anObject |
91
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
509 |
| type | |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
510 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
511 |
super visitSelfNode:anObject. |
91
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
512 |
type := Type withClass: class. |
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
513 |
type trustfullness: 100. |
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
514 |
anObject inferedType:type |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
515 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
516 |
"Created: / 26-11-2011 / 14:43:47 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
91
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
517 |
"Modified: / 18-09-2013 / 01:25:59 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
518 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
519 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
520 |
visitSuperNode:anObject |
91
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
521 |
| type | |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
522 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
523 |
super visitSuperNode:anObject. |
91
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
524 |
type := Type withClass: class superclass. |
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
525 |
type trustfullness: 100. |
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
526 |
anObject inferedType:type |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
527 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
528 |
"Created: / 26-11-2011 / 14:44:23 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
91
920e30d788dc
Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
70
diff
changeset
|
529 |
"Modified: / 18-09-2013 / 01:26:12 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
530 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
531 |
|
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
532 |
visitVariableNode:anObject |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
533 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
534 |
| t | |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
535 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
536 |
"Following code ensures, that all variable nodes refering same |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
537 |
variable shares the inferred type" |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
538 |
t := types at: anObject name ifAbsentPut:[Type unknown]. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
539 |
anObject inferedType: t. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
540 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
541 |
anObject isGlobalVariable ifTrue:[ |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
542 |
| global class | |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
543 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
544 |
global := Smalltalk at: anObject name asSymbol. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
545 |
"/ Special hack for JAVA - its actually a JavaPackage... |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
546 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
547 |
global == (Smalltalk at: #JAVA) ifTrue:[ |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
548 |
global := JavaPackage |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
549 |
]. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
550 |
class := global class. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
551 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
552 |
global notNil ifTrue:[ |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
553 |
t addClass: class. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
554 |
t trustfullness: 100. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
555 |
]. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
556 |
^self. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
557 |
]. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
558 |
anObject isClassVariable ifTrue:[ |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
559 |
t addClass: (class theNonMetaclass classVarAt: anObject name asSymbol) class. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
560 |
t trustfullness: 100. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
561 |
^self. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
562 |
]. |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
563 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
564 |
"Created: / 26-11-2011 / 13:31:19 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
565 |
"Modified: / 26-10-2013 / 10:08:16 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
566 |
! ! |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
567 |
|
262
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
568 |
!SmalltalkInferencer::Phase2 class methodsFor:'documentation'! |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
569 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
570 |
documentation |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
571 |
" |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
572 |
Inferencing phase 2: Guess types based on 'known' selectors, like #==, #=, #class, #new: and so on... |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
573 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
574 |
[author:] |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
575 |
Jan Vrany <jan.vrany@fit.cvut.cz> |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
576 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
577 |
[instance variables:] |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
578 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
579 |
[class variables:] |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
580 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
581 |
[see also:] |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
582 |
|
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
583 |
" |
1eb48733dac1
Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
261
diff
changeset
|
584 |
! ! |
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
585 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
586 |
!SmalltalkInferencer::Phase2 methodsFor:'visiting'! |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
587 |
|
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
588 |
visitUnaryNode:anObject |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
589 |
|
123
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
590 |
| type sel rec classes | |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
591 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
592 |
super visitUnaryNode:anObject. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
593 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
594 |
sel := anObject selector. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
595 |
|
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
596 |
"/ #class should always return a class of the receiver... |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
597 |
sel == #class ifTrue:[ |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
598 |
type := anObject receiver inferedType classSide. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
599 |
anObject inferedType: type. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
600 |
^self. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
601 |
]. |
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
602 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
603 |
"/ #new / #basicNew: conventionally returns an instance of the class, if receiver is a class. |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
604 |
(sel == #new or:[sel == #basicNew]) ifTrue:[ |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
605 |
rec := anObject receiver. |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
606 |
(rec isSelf and:[class isMetaclass]) ifTrue:[ |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
607 |
type := Type withClass: class theNonMetaclass. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
608 |
type trustfullnessAdd: 50. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
609 |
anObject inferedType: type. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
610 |
^self. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
611 |
]. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
612 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
613 |
type := anObject receiver inferedType instanceSide. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
614 |
anObject inferedType: type. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
615 |
^self. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
616 |
]. |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
617 |
|
123
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
618 |
rec := anObject receiver. |
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
619 |
classes := rec inferedType classes. |
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
620 |
classes size == 1 ifTrue:[ |
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
621 |
"/ Special hack for Java, when code is like |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
622 |
"/ `JAVA java lang reflect` |
128
a98866596a98
Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
127
diff
changeset
|
623 |
classes anElement == JavaPackage class ifTrue:[ |
123
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
624 |
(JAVA notNil and:[anObject selector first isUppercase]) ifTrue:[ |
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
625 |
| jclass | |
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
626 |
|
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
627 |
"/ fetch an accessor... |
125
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
628 |
[ |
254
3542abc630fa
Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
252
diff
changeset
|
629 |
jclass := anObject evaluate. |
125
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
630 |
"/ fetch the class... |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
631 |
jclass := JavaVM classNamed: jclass fullName definedBy: JavaVM systemClassLoader. |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
632 |
jclass notNil ifTrue:[ |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
633 |
anObject inferedType: (Type withClass: jclass class). |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
634 |
] ifFalse:[ |
128
a98866596a98
Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
127
diff
changeset
|
635 |
anObject inferedType: (Type withClass: JavaClass class). |
125
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
636 |
]. |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
637 |
] on: Error do:[ |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
638 |
"/ ignore... |
5219ed289f45
Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
123
diff
changeset
|
639 |
] |
123
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
640 |
] ifFalse:[ |
128
a98866596a98
Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
127
diff
changeset
|
641 |
anObject inferedType: (Type withClass: JavaPackage class). |
123
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
642 |
]. |
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
643 |
]. |
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
644 |
]. |
1b949542c4b2
Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
121
diff
changeset
|
645 |
|
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
646 |
"Created: / 27-11-2011 / 15:49:39 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
128
a98866596a98
Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
127
diff
changeset
|
647 |
"Modified: / 08-10-2013 / 11:07:00 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
648 |
"Modified (comment): / 05-08-2014 / 13:56:12 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
649 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
650 |
|
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
651 |
!SmalltalkInferencer::Phase3 class methodsFor:'documentation'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
652 |
|
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
653 |
documentation |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
654 |
" |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
655 |
Phase 3: guess types based on naming conventions. This is mainly to process |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
656 |
parameters in form of aString or aStringOrBoolean... |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
657 |
|
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
658 |
[author:] |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
659 |
Jan Vrany <jan.vrany@fit.cvut.cz> |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
660 |
|
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
661 |
[instance variables:] |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
662 |
|
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
663 |
[class variables:] |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
664 |
|
261
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
665 |
[see also:] |
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
666 |
|
b583a3b5f398
Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
254
diff
changeset
|
667 |
" |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
668 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
669 |
|
67
020b7461b15e
Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
64
diff
changeset
|
670 |
!SmalltalkInferencer class methodsFor:'documentation'! |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
671 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
672 |
version_HG |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
673 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
674 |
^ '$Changeset: <not expanded> $' |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
675 |
! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
676 |
|
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
677 |
version_SVN |
174
3e08d765d86f
sync from current CVS head; fixed comment highlighting for STXEOLRule
Claus Gittinger
parents:
145
diff
changeset
|
678 |
^ '$Id: SmallSense__SmalltalkInferencer.st,v 1.2 2014/02/12 14:49:29 sr Exp $' |
64
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
679 |
! ! |
2257d7223898
All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
680 |