--- a/src/JavaClass.st Wed Dec 07 14:16:13 2011 +0000
+++ b/src/JavaClass.st Wed Dec 07 18:58:33 2011 +0000
@@ -2013,26 +2013,65 @@
!JavaClass methodsFor:'reflection'!
-lookupFieldByNameAndType: aJavaNameAndType
-
- | field cls |
-
- cls := self.
+findInstFieldByName: fieldSelector
+ | cls result |
+ cls := self.
+ [ cls ~= JavaObject ] whileTrue: [
+ result := cls fields
+ detect: [:each | each name = fieldSelector ]
+ ifNone: [ nil ].
+ result notNil ifTrue: [ ^ result ].
+ cls := cls superclass.
+ ].
+ ^ nil.
+
+ "Created: / 07-12-2011 / 15:25:09 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+findInterfaceFieldByName: fieldSelector
+ | cls result seenIfaces |
+ seenIfaces := Set new.
+ cls := self.
[ cls ~= JavaObject ] whileTrue: [
- field := cls fields detect:
- [:each |
- each name = aJavaNameAndType name
- "and: [ each signatureWithoutTypeVariables = aJavaNameAndType descriptor ]"]
- ifNone:[nil].
- field ifNotNil:[^field].
- cls := cls superclass.
+ |ifaces |
+ ifaces := OrderedCollection withAll: cls interfaces.
+[ifaces notEmpty] whileTrue: [|iface|
+iface := ifaces removeFirst.
+result := iface staticFields detect: [:each | each name = fieldSelector] ifNone: [nil].
+result notNil ifTrue: [^result].
+seenIfaces add: iface.
+iface interfaces do: [:each | (seenIfaces includes: each) not ifTrue: [ifaces add: each]]].
+
+
+
+ cls := cls superclass.
].
- self breakPoint: #jv.
- ^nil
+
+ "Created: / 07-12-2011 / 19:45:55 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+findStaticFieldByName: fieldSelector
+ | cls result |
+ cls := self.
+ [ cls ~= JavaObject ] whileTrue: [
+ result := cls staticFields
+ detect: [:each | each name = fieldSelector ]
+ ifNone: [ nil ].
+ result notNil ifTrue: [ ^ result ].
+ cls := cls superclass.
+ ].
+
+ "Created: / 07-12-2011 / 15:23:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+lookupFieldByNameAndType: aJavaNameAndType
+ | field |
+ field := self findInstFieldByName: aJavaNameAndType name.
+ ^ field.
"Created: / 11-04-2011 / 21:27:08 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 04-06-2011 / 17:06:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 13-08-2011 / 00:46:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 07-12-2011 / 15:27:17 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
lookupMethodByNameAndType: aJavaNameAndType
@@ -2081,12 +2120,6 @@
"Created: / 11-04-2011 / 21:27:08 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 04-06-2011 / 17:06:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 26-08-2011 / 18:27:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-lookupStaticMethodByNameAndType: aJavaNameAndType
- ^ self lookupMethodFor: aJavaNameAndType selector.
-
- "Created: / 28-04-2011 / 22:50:31 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaClass methodsFor:'special'!