its nice to work after jv :) after writing tests I surprisedly realized, that he already implemented primitives and primitive arrays in JavaClassRef2 :)
--- 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'!