--- a/src/JavaLookup.st Sat Mar 17 07:44:54 2012 +0000
+++ b/src/JavaLookup.st Sat Mar 17 19:48:57 2012 +0000
@@ -277,6 +277,7 @@
]
].
+ "Search class for method candidates"
cls := initialSearchClass theNonMetaclass.
static ifTrue:[
finder value: cls
@@ -296,6 +297,25 @@
^m.
].
+
+ "Hmm, hmm, maybe a public field?"
+ (argArrayOrNil size < 2) ifTrue:[
+ | field |
+
+ field := initialSearchClass theNonMetaclass
+ lookupFieldFor: name
+ static: initialSearchClass isMetaclass
+ onlyPublic: true.
+ field notNil ifTrue:[
+ m := self compileProxyWithSelector: selector in: receiver class accessing: field.
+ ilc notNil ifTrue:[ilc bindTo: m forClass: receiver class].
+
+ "Install the proxy"
+ self addSelector: selector withMethod: m toClass: receiver class.
+
+ ^m.
+ ]
+ ].
^nil
"Created: / 21-02-2011 / 13:38:55 / kursjan <kursjan@fit.cvut.cz>"
@@ -305,7 +325,7 @@
"Created: / 19-11-2011 / 13:03:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 01-01-2012 / 19:58:59 / kursjan <kursjan@fit.cvut.cz>"
"Modified (comment): / 02-01-2012 / 10:35:25 / kursjan <kursjan@fit.cvut.cz>"
- "Modified: / 27-02-2012 / 19:43:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-03-2012 / 17:22:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!JavaLookup::Smalltalk2Java methodsFor:'lookup (old)'!
@@ -463,6 +483,36 @@
"Created: / 01-01-2012 / 17:41:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+compileProxyWithSelector:selector in:class accessing: field
+ "For given field, create a proxy getter/setter"
+
+
+ |compiler proxy body isSetter |
+
+ class theNonMetaclass classInit.
+ isSetter := selector last == $:.
+ compiler := ProxyMethodCompiler new.
+ isSetter ifTrue:[
+ body := compiler newJavaFieldSetter: field.
+ proxy := compiler
+ compile:body
+ arguments: 1
+ selector:selector.
+ ] ifFalse:[
+ body := compiler newJavaFieldGetter: field.
+ proxy := compiler
+ compile:body
+ arguments: 0
+ selector:selector.
+
+ ].
+
+ ^ proxy
+
+ "Modified: / 30-12-2011 / 14:44:11 / kursjan <kursjan@fit.cvut.cz>"
+ "Created: / 17-03-2012 / 16:54:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
compileProxyWithSelector:selector in:class calling:methods
"For given set of methods, create a dispatching proxy with given selector.
This method performs typechecks on arguments and dispatch to proper method"