Fixes for Java reflection on Smalltalk classes. development
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 20 Nov 2013 16:40:09 +0000
branchdevelopment
changeset 2942 c39cbf09ea3d
parent 2940 451954b79f93
child 2943 cc9cf6c073bd
Fixes for Java reflection on Smalltalk classes. This commit should also fix smalltalk workspace servlet/JSP.
JavaClassReader.st
JavaClassRegistry.st
JavaResolver.st
extensions.st
tools/JavaCompiler.st
--- 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'!