author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Sat, 19 Jan 2013 19:23:53 +0000 | |
branch | refactoring-vmdata |
changeset 1983 | 03dcc3899eea |
parent 1880 | 27b932afa4a7 |
permissions | -rw-r--r-- |
1357 | 1 |
"{ Package: 'stx:libjava/experiments' }"! |
1206
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
2 |
|
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
3 |
!Class methodsFor:'method lookup'! |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
4 |
|
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
5 |
box: sObj toType: type |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
6 |
^ (JavaTypeBox typeBoxForJava: type) box: sObj. |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
7 |
|
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
8 |
"Created: / 06-09-2011 / 22:12:59 / Jan Kurs <kursjan@fit.cvut.cz>" |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
9 |
! ! |
1357 | 10 |
|
1206
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
11 |
!Class methodsFor:'method lookup'! |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
12 |
|
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
13 |
unbox: javaArgumentsCollection to: typesCollection |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
14 |
" box smalltalk arguments collection to Java arguments " |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
15 |
"/ ^ stArgumentsCollection with: typesCollection collect: [ :stObject :javaType | |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
16 |
"/ (JavaTypeBox javaTypeAt: javaType) box: stObject. |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
17 |
"/ ] |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
18 |
^ javaArgumentsCollection. |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
19 |
|
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
20 |
"Created: / 25-09-2011 / 20:22:59 / Jan Kurs <kursjan@fit.cvut.cz>" |
227911d49c24
interop-related classes moved to experiments - still experimental code
vranyj1
parents:
diff
changeset
|
21 |
! ! |
1357 | 22 |
|
1345 | 23 |
!JavaClass methodsFor:'queries'! |
24 |
||
25 |
javaWrappedClass |
|
26 |
"Returns true, iff receiver is one of the Java wrapper classes or String" |
|
1335
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
27 |
|
1345 | 28 |
name == #'java/lang/Byte' ifTrue:[^JavaByte]. |
29 |
name == #'java/lang/Short' ifTrue:[^JavaShort]. |
|
30 |
name == #'java/lang/Integer' ifTrue:[^SmallInteger]. |
|
31 |
name == #'java/lang/Long' ifTrue:[^LargeInteger]. |
|
32 |
name == #'java/lang/Character' ifTrue:[^Character]. |
|
33 |
name == #'java/lang/Boolean' ifTrue:[^Boolean]. |
|
34 |
name == #'java/lang/String' ifTrue:[^String]. |
|
1335
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
35 |
|
1345 | 36 |
^nil. |
37 |
||
38 |
"Created: / 03-01-2012 / 22:43:24 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
1335
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
39 |
! ! |
1357 | 40 |
|
1335
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
41 |
!JavaClass methodsFor:'message sending'! |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
42 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
43 |
lookupMethodFor:selector |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
44 |
|method cls sel queue | |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
45 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
46 |
sel := selector asSymbolIfInterned. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
47 |
sel notNil ifTrue:[ |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
48 |
queue := OrderedCollection with: self. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
49 |
[ queue isEmpty ] whileFalse:[ |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
50 |
cls := queue removeFirst. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
51 |
method := cls compiledMethodAt:sel. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
52 |
method notNil ifTrue:[ ^ method ]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
53 |
cls isInterface ifFalse:[ |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
54 |
cls superclass ~~ JavaObject ifTrue:[queue add: cls superclass] |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
55 |
]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
56 |
queue addAll: cls interfaces. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
57 |
]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
58 |
]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
59 |
"/cls ifNotNil:[^super lookupMethodFor: selector]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
60 |
^ nil |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
61 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
62 |
"Modified: / 19-10-2011 / 17:19:37 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
63 |
! ! |
1357 | 64 |
|
1335
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
65 |
!JavaClass methodsFor:'message sending'! |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
66 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
67 |
performStatic:selector |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
68 |
"send a static message, without args." |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
69 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
70 |
|javaMethod sel| |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
71 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
72 |
sel := selector asSymbolIfInterned. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
73 |
sel notNil ifTrue:[ |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
74 |
javaMethod := methodDictionary at:sel. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
75 |
javaMethod notNil ifTrue:[ |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
76 |
javaMethod isStatic ifTrue:[ |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
77 |
^ javaMethod |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
78 |
valueWithReceiver:self |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
79 |
arguments:#() |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
80 |
] |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
81 |
]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
82 |
]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
83 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
84 |
^ self doesNotUnderstand:(Message selector:selector) |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
85 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
86 |
"Modified: / 15.1.1998 / 00:31:27 / cg" |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
87 |
"Created: / 12.11.1998 / 16:29:20 / cg" |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
88 |
! ! |
1357 | 89 |
|
1335
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
90 |
!JavaClass methodsFor:'message sending'! |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
91 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
92 |
performStatic:selector with:arg |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
93 |
"send a static message, with one args." |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
94 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
95 |
|javaMethod sel| |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
96 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
97 |
sel := selector asSymbolIfInterned. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
98 |
sel notNil ifTrue:[ |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
99 |
javaMethod := methodDictionary at:sel. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
100 |
javaMethod notNil ifTrue:[ |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
101 |
javaMethod isStatic ifTrue:[ |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
102 |
^ javaMethod |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
103 |
valueWithReceiver:self |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
104 |
arguments:(Array with:arg) |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
105 |
selector:selector |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
106 |
search:nil |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
107 |
sender:nil |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
108 |
] |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
109 |
]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
110 |
]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
111 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
112 |
^ self doesNotUnderstand:(Message selector:selector argument:arg) |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
113 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
114 |
"Modified: / 15.1.1998 / 00:31:27 / cg" |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
115 |
"Created: / 10.12.1998 / 21:50:29 / cg" |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
116 |
! ! |
1357 | 117 |
|
1228 | 118 |
!JavaMethodDescriptor methodsFor:'accessing'! |
119 |
||
120 |
guardCondition |
|
121 |
||
122 |
"Answers a condition usable in guard that checks if all types of all arguments matches" |
|
123 |
||
124 |
| g | |
|
125 |
||
1282 | 126 |
self assert: parameters size ~~ 0. "/Should not be called in that case..." |
1315 | 127 |
g := ProxyMethodJavaTypeCheckNode type: parameters first javaClass argument: 1. |
1228 | 128 |
parameters size > 1 ifTrue:[ |
129 |
2 to: parameters size do:[:i| |
|
1315 | 130 |
g := g and: (ProxyMethodJavaTypeCheckNode type: (parameters at: i) javaClass argument: i) |
1228 | 131 |
]. |
132 |
]. |
|
133 |
^g |
|
134 |
||
135 |
"Created: / 06-12-2011 / 22:27:57 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
136 |
! ! |
|
1357 | 137 |
|
1335
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
138 |
!JavaObject methodsFor:'message sending'! |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
139 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
140 |
doesNotUnderstand:aMessage |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
141 |
| sender | |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
142 |
sender := thisContext sender. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
143 |
^ self class perform: aMessage onReceiver: self from: sender ifNotFound: [ ^ super doesNotUnderstand: aMessage ]. |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
144 |
|
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
145 |
"Modified: / 16-11-1998 / 16:50:56 / cg" |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
146 |
"Modified: / 19-09-2011 / 23:43:56 / Jan Kurs <kursjan@fit.cvut.cz>" |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
147 |
"Modified: / 15-12-2011 / 23:43:14 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
148 |
"Modified: / 01-01-2012 / 19:49:35 / kursjan <kursjan@fit.cvut.cz>" |
754fa2ac21ab
DNU hook is forwarding to perform: forReceiver: sender: ifNotFound: in Class
kursjan
parents:
1315
diff
changeset
|
149 |
! ! |
1357 | 150 |
|
151 |
!stx_libjava_experiments class methodsFor:'documentation'! |
|
152 |
||
1880
27b932afa4a7
Refactored JavaCompiler (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
1818
diff
changeset
|
153 |
extensionsVersion_HG |
27b932afa4a7
Refactored JavaCompiler (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
1818
diff
changeset
|
154 |
|
27b932afa4a7
Refactored JavaCompiler (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
1818
diff
changeset
|
155 |
^ '$Changeset: <not expanded> $' |
1466 | 156 |
! ! |