- JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types jk_new_structure
authorvranyj1
Sun, 22 May 2011 17:09:22 +0000
branchjk_new_structure
changeset 812 62e917825364
parent 811 2921f70489c1
child 813 cb429d02faca
- JavaDescriptor, JavaResolver, JavaArray: fixes for primitive and array types
src/JavaArray.st
src/JavaDescriptor.st
src/JavaResolver.st
--- a/src/JavaArray.st	Sun May 22 16:04:51 2011 +0000
+++ b/src/JavaArray.st	Sun May 22 17:09:22 2011 +0000
@@ -41,6 +41,22 @@
     ^'[L' , componentClass javaName, ';'
 
     "Created: / 25-02-2011 / 19:29:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+javaPackage
+
+    ^componentClass javaPackage
+
+    "Created: / 22-05-2011 / 18:07:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+lookupMethodByNameAndType: aJavaNameAndType 
+
+    "Trick, since java arrays should respond to all messages
+     understood by java.lang.object"    
+    ^ (Java at:'java.lang.Object') lookupMethodByNameAndType: aJavaNameAndType
+
+    "Created: / 22-05-2011 / 18:03:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaArray class methodsFor:'class creation'!
--- a/src/JavaDescriptor.st	Sun May 22 16:04:51 2011 +0000
+++ b/src/JavaDescriptor.st	Sun May 22 17:09:22 2011 +0000
@@ -47,6 +47,13 @@
 
 !JavaDescriptor class methodsFor:'accessing'!
 
+baseTypes
+
+    ^BaseTypes
+
+    "Created: / 22-05-2011 / 17:45:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 baseTypesByTypeName
 
     ^BaseTypesByTypeName
--- a/src/JavaResolver.st	Sun May 22 16:04:51 2011 +0000
+++ b/src/JavaResolver.st	Sun May 22 17:09:22 2011 +0000
@@ -70,8 +70,13 @@
             [ self halt.
             "tell mh, he will throw exception instead, for now, he wants to halt."
              ].
-																				  result classInit.
 
+    "JV@2011-05-22: Take primitive types into an account"
+    result isJavaPrimitiveType ifTrue:
+        [^self checkIfArrayRef: aJavaClassRef andWrap: result].
+
+    result classInit.
+    
      "
      If C is an array class and its element type is a reference type, then the symbolic reference
      to the class or interface representing the element type is resolved by invoking the algorithm
@@ -90,6 +95,7 @@
 
     "Created: / 11-04-2011 / 19:07:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified: / 13-05-2011 / 17:51:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 22-05-2011 / 17:59:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaResolver methodsFor:'class resolving helpers'!
@@ -127,10 +133,20 @@
 !
 
 loadUnresolvedClass: aJavaClassRef 
+
+    | nm |
+    nm := aJavaClassRef javaClassName.
+    "JV@2011-05-22: Take primitive types into an account"
+    nm size == 1 and:
+        [JavaDescriptor baseTypes 
+            at: nm first 
+            ifPresent:[:cls|^cls]].
+
     ^ Java classForName: aJavaClassRef javaClassName.
 
     "Created: / 11-04-2011 / 19:27:10 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified: / 19-05-2011 / 13:10:27 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 22-05-2011 / 17:58:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 loadUnresolvedClass: aJavaClassRef withJavaClassLoader: classLoader 
@@ -159,16 +175,16 @@
 wrapJavaClass: aJavaClass withArrayAsSpecifiedIn: aJavaClassRef 
 
     "wraps aJavaClass with as many array dimensions as needed (zero means no array)"
-    | wrappedResult |
+    | arrayClass |
 
     aJavaClassRef isJavaArrayClassRef ifFalse: [ ^ aJavaClass ].
     aJavaClassRef arrayDimensions timesRepeat: 
-            [wrappedResult := aJavaClass.
-            wrappedResult := JavaArray javaArrayClassFor: wrappedResult.
-            ^ wrappedResult ].
+            [arrayClass := aJavaClass.
+            arrayClass := arrayClass arrayClass.
+            ^ arrayClass ].
 
     "Created: / 08-04-2011 / 18:40:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 22-05-2011 / 14:00:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-05-2011 / 17:48:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaResolver methodsFor:'common helpers'!