preparation for field resolving unification jk_new_structure
authorhlopkmar
Wed, 07 Dec 2011 18:58:33 +0000
branchjk_new_structure
changeset 1236 8ca979c6e49b
parent 1235 8a3b56d4ba26
child 1237 174faa858cab
preparation for field resolving unification
src/JavaClass.st
--- 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'!