Fixes for Java reflection on Smalltalk classes.
This commit should also fix smalltalk workspace servlet/JSP.
--- a/JavaClassReader.st Wed Nov 20 10:42:07 2013 +0000
+++ b/JavaClassReader.st Wed Nov 20 16:40:09 2013 +0000
@@ -114,7 +114,6 @@
"Created: 3.8.1997 / 18:17:21 / cg"
! !
-
!JavaClassReader class methodsFor:'constants'!
fileMajorVersions
@@ -502,7 +501,7 @@
JavaClassReader invalidClassFormatSignal
handle: [
"Kludge, sometimes zar gets corrupted"
- zar := JavaArchiveCache at: zipFile put: (JavaVM commonOpenStreamUsing: [ZipArchive oldFileNamed: zipFile]).
+ zar := JavaArchiveCache at: zipFile put: (Array with: (JavaVM commonOpenStreamUsing: [ZipArchive oldFileNamed: zipFile]) with: 1).
read value
]
do: [ read value ].
@@ -511,7 +510,7 @@
^nil
"Created: / 03-12-2012 / 22:47:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 18-11-2013 / 22:53:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 20-11-2013 / 15:44:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
readClass: className ignoring: classesBeingLoadedOrNil classPath: classPath
--- a/JavaClassRegistry.st Wed Nov 20 10:42:07 2013 +0000
+++ b/JavaClassRegistry.st Wed Nov 20 16:40:09 2013 +0000
@@ -344,11 +344,13 @@
JavaCompiler notNil ifTrue:[
JavaCompiler recompileErroneousClassesReferringTo: newClass ignoring: newClass.
].
- self registerClassInSmalltalk: newClass notify: true.
+ newClass isJavaClass ifTrue:[
+ self registerClassInSmalltalk: newClass notify: true.
+ ].
"Created: / 23-10-2011 / 11:53:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 02-11-2011 / 18:40:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 17-10-2013 / 10:39:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 20-11-2013 / 16:05:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
registerClassInSmalltalk: javaclass notify: doNotify
--- a/JavaResolver.st Wed Nov 20 10:42:07 2013 +0000
+++ b/JavaResolver.st Wed Nov 20 16:40:09 2013 +0000
@@ -176,6 +176,7 @@
checkPermissionsFrom: refOwner to: resolvedClass
refOwner hasMagicAccessRights ifTrue: [ ^ true ].
+ resolvedClass isJavaClass ifFalse:[ ^ true ].
(JavaDescriptor isJavaPrimitiveArrayName: resolvedClass javaName) ifTrue: [
^ true
].
@@ -191,6 +192,7 @@
"Modified (comment): / 09-10-2011 / 23:11:54 / Marcel Hlopko <hlopik@gmail.com>"
"Modified: / 23-08-2012 / 20:21:40 / m"
"Modified: / 30-11-2012 / 20:34:26 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 20-11-2013 / 16:07:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
loadUnresolvedClass: aJavaClassRef
--- a/extensions.st Wed Nov 20 10:42:07 2013 +0000
+++ b/extensions.st Wed Nov 20 16:40:09 2013 +0000
@@ -560,12 +560,30 @@
!Class methodsFor:'accessing - java'!
+binaryName
+ "Returns Java binary name for this class."
+
+ ^ 'SMALLTALK/' , self name
+
+ "Created: / 20-11-2013 / 15:55:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Class methodsFor:'accessing - java'!
+
classLoader
JavaVM smalltalkClassLoader
"Created: / 22-08-2012 / 13:00:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!Class methodsFor:'queries'!
+
+isSynthetic
+ ^ false "/ Smalltalk classes are not synthetic...
+
+ "Created: / 20-11-2013 / 16:03:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!Class methodsFor:'accessing - java'!
javaMirror
--- a/tools/JavaCompiler.st Wed Nov 20 10:42:07 2013 +0000
+++ b/tools/JavaCompiler.st Wed Nov 20 16:40:09 2013 +0000
@@ -237,7 +237,7 @@
JavaVM booted ifFalse:[ ^ self ].
JavaVM registry classes do:[:each |
- ((each binaryName ~= 'stx/libjava/tools/compiler/CompileError') and:[each ~~ classToIgnore]) ifTrue:[
+ (each isJavaClass and:[(each binaryName ~= 'stx/libjava/tools/compiler/CompileError') and:[each ~~ classToIgnore]]) ifTrue:[
(each constantPool contains: [:entry | entry isJavaClassRef and:[entry name = 'stx/libjava/tools/compiler/CompileError']]) ifTrue:[
| source |
@@ -250,6 +250,7 @@
].
"Created: / 17-10-2013 / 09:51:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 20-11-2013 / 16:08:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!JavaCompiler methodsFor:'accessing'!