its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :) jk_new_structure
authorhlopkmar
Mon, 23 May 2011 19:17:40 +0000
branchjk_new_structure
changeset 817 3f2405c6ef88
parent 816 4e3072021201
child 818 7282451f481b
its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
src/JavaClassRefTests.st
src/JavaResolver.st
src/stx_libjava.st
--- a/src/JavaClassRefTests.st	Mon May 23 16:05:45 2011 +0000
+++ b/src/JavaClassRefTests.st	Mon May 23 19:17:40 2011 +0000
@@ -8,6 +8,31 @@
 !
 
 
+!JavaClassRefTests methodsFor:'arrays'!
+
+testCorrectArrayCreation
+|classRef result expectedResult |
+
+    classRef := self getClassRefNamed: '[Ljava/lang/Object;'.
+    result := classRef resolve.
+    expectedResult := JavaVM javaArrayClassFor: (Java classForName: 'java.lang.Object').
+    self assertTrue: (result = expectedResult).
+
+    "Created: / 23-05-2011 / 21:15:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+testCorrectMultiArrayCreation
+    | classRef  result  expectedResult |
+
+    classRef := self getClassRefNamed: '[[[[[Ljava/lang/Object;'.
+    result := classRef resolve.
+    expectedResult := JavaVM 
+                javaArrayClassFor: (Java classForName: 'java.lang.Object').
+    self assertTrue: (result = expectedResult).
+
+    "Created: / 23-05-2011 / 21:15:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+
 !JavaClassRefTests methodsFor:'permission tests'!
 
 testAccessingNonPublicFromInside
@@ -92,6 +117,48 @@
     "Modified: / 23-05-2011 / 17:58:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 ! !
 
+!JavaClassRefTests methodsFor:'primitives'!
+
+testAllPrimitiveArrayClasses
+    | classRef  descriptor |
+
+    #( $B $C $D $F $I $J $S $Z ) do: 
+            [:each | 
+            descriptor := '[' , each.
+            classRef := self getClassRefNamed: descriptor.
+            self assertTrue: ((JavaDescriptor readFromString: descriptor) javaClass 
+                        = classRef resolve) ].
+
+    "Created: / 23-05-2011 / 20:49:39 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+testAllPrimitiveClasses
+    | classRef |
+
+    #( $B $C $D $F $I $J $S $Z )
+        do: 
+            [:each | 
+
+            classRef := self getClassRefNamed: each asString.
+            self assertTrue: ((JavaDescriptor baseTypes at: each) = classRef resolve) ].
+
+    "Created: / 23-05-2011 / 20:48:55 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+testAllPrimitiveMultiArrayClasses
+    | classRef  descriptor |
+
+    #( $B $C $D $F $I $J $S $Z )
+        do: 
+            [:each | 
+            descriptor := '[[[[' , each.
+            classRef := self getClassRefNamed: descriptor.
+            self assertTrue: ((JavaDescriptor readFromString: descriptor) javaClass 
+                        = classRef resolve) ].
+
+    "Created: / 23-05-2011 / 20:50:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+
 !JavaClassRefTests methodsFor:'resolving static tests'!
 
 testCorrectStaticResolving
--- a/src/JavaResolver.st	Mon May 23 16:05:45 2011 +0000
+++ b/src/JavaResolver.st	Mon May 23 19:17:40 2011 +0000
@@ -42,6 +42,13 @@
 
 !JavaResolver methodsFor:'class resolving'!
 
+checkIfPrimitiveArrayRef: aJavaClassRef andWrap: result 
+
+    ^ (JavaDescriptor readFromString: aJavaClassRef name) javaClass.
+
+    "Created: / 23-05-2011 / 21:12:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
 resolveClassIndentifiedByRef: aJavaClassRef 
     | classLoader  result |
 
@@ -50,7 +57,6 @@
     result ifNotNil: 
             [ "/wrap result with array(s) if needed and return it
             self checkIfArrayRef: aJavaClassRef andWrap: result ].
-
      "
      To resolve an unresolved symbolic reference from D to a class or interface C denoted by N,
      the following steps are performed:
@@ -65,13 +71,11 @@
         ifFalse: 
             [ result := self loadUnresolvedClass: aJavaClassRef
                         withJavaClassLoader: classLoader. ].
-
     result ifNil: 
             [ self halt.
              "tell mh, he will throw exception instead, for now, he wants to halt." ].
-     "JV@2011-05-22: Take primitive types into an account"
     result isJavaPrimitiveType 
-        ifTrue: [ ^ self checkIfArrayRef: aJavaClassRef andWrap: result ].
+        ifTrue: [ ^ self checkIfPrimitiveArrayRef: aJavaClassRef andWrap: result ].
     result classInit.
      "
      If C is an array class and its element type is a reference type, then the symbolic reference
@@ -91,7 +95,7 @@
 
     "Created: / 11-04-2011 / 19:07:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified: / 22-05-2011 / 17:59:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 23-05-2011 / 15:30:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 23-05-2011 / 21:11:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 ! !
 
 !JavaResolver methodsFor:'class resolving helpers'!
@@ -129,20 +133,16 @@
 !
 
 loadUnresolvedClass: aJavaClassRef 
+    | nm |
 
-    | 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]].
-
+    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>"
+    "Modified: / 23-05-2011 / 21:06:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 !
 
 loadUnresolvedClass: aJavaClassRef withJavaClassLoader: classLoader 
@@ -163,9 +163,10 @@
 !
 
 validateClassRef: aJavaClassRef 
-    aJavaClassRef isJavaRef ifFalse: [ self halt: 'Argument type not valid' ].
-    aJavaClassRef isJavaClassRef 
-        ifFalse: [ self halt: 'Only class refs please' ].
+    self assert: aJavaClassRef isJavaRef.
+    self assert: aJavaClassRef isJavaClassRef .
+
+    "Modified: / 23-05-2011 / 21:04:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 !
 
 wrapJavaClass: aJavaClass withArrayAsSpecifiedIn: aJavaClassRef 
@@ -176,13 +177,12 @@
     aJavaClassRef isJavaArrayClassRef ifFalse: [ ^ aJavaClass ].
     aJavaClassRef arrayDimensions timesRepeat: 
             [ arrayClass := aJavaClass.
-            arrayClass := arrayClass arrayClass.
-             ].
-^ arrayClass.
+            arrayClass := arrayClass arrayClass. ].
+    ^ arrayClass.
 
     "Created: / 08-04-2011 / 18:40:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified: / 22-05-2011 / 17:48:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 23-05-2011 / 14:43:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 23-05-2011 / 21:06:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 ! !
 
 !JavaResolver methodsFor:'common helpers'!
--- a/src/stx_libjava.st	Mon May 23 16:05:45 2011 +0000
+++ b/src/stx_libjava.st	Mon May 23 19:17:40 2011 +0000
@@ -366,7 +366,7 @@
     "Return a SVN revision number of myself.
      This number is updated after a commit"
 
-    ^ "$SVN-Revision:"'1159'"$"
+    ^ "$SVN-Revision:"'1160'"$"
 ! !
 
 !stx_libjava class methodsFor:'file generation'!