Temporary commit (fixing class loaders - classes gets registered twice) jk_new_structure
authorvranyj1
Fri, 28 Oct 2011 20:15:40 +0000
branchjk_new_structure
changeset 1058 1db06119bf3e
parent 1057 9031c415cacf
child 1059 22fe06c9e367
Temporary commit (fixing class loaders - classes gets registered twice)
src/JavaClassReader.st
src/JavaClassRegistry.st
src/JavaVM.st
--- a/src/JavaClassReader.st	Fri Oct 28 18:58:45 2011 +0000
+++ b/src/JavaClassReader.st	Fri Oct 28 20:15:40 2011 +0000
@@ -244,10 +244,7 @@
                 classPath: Java release classPath.
     class notNil ifTrue:[ ^ class ].
 
-    class := self
-                readClass: className ignoring: classesBeingLoadedOrNil 
-                classPath: Java classPath.
-    class notNil ifTrue:[
+    class isNil ifTrue:[
         JavaVM booted ifFalse:[
             self breakPoint:#jv info: 'Should not happen!!'.
         ].
@@ -255,7 +252,14 @@
         (scl := java_lang_ClassLoader instVarNamed:#scl) isNil ifTrue:[
             scl := java_lang_ClassLoader perform: #'getSystemClassLoader()Ljava/lang/ClassLoader;'
         ].
-        class classLoader: scl.        
+        JavaClassReader classLoaderQuerySignal answer: scl do:[
+            class := self
+                readClass: className ignoring: classesBeingLoadedOrNil 
+                classPath: Java classPath.
+        ].
+        class notNil ifTrue:[
+            self assert: class classLoader == scl.
+        ].
     ].
 
     ^class
@@ -263,7 +267,7 @@
     "Created: / 15-04-1996 / 14:58:53 / cg"
     "Modified: / 20-10-1998 / 17:24:54 / cg"
     "Modified: / 21-10-2011 / 13:39:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 23-10-2011 / 22:07:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-10-2011 / 21:56:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 readClass: className ignoring: classesBeingLoadedOrNil classPath: classPath 
@@ -612,6 +616,7 @@
     ] ifFalse: [
         "/ a java class
         classBeingLoaded := JavaClass fullName: thisClassName numStatic: nStatic.
+        classBeingLoaded classLoader: self class classLoaderQuerySignal query.        
         fields := fields select: [:f | f isStatic not ].
         JavaClass setInstanceVariableStringFromFields: staticFields
             in: classBeingLoaded class.
@@ -636,7 +641,7 @@
     
     classBeingLoaded fields do: [:each | self updateOwnerInField: each ].
     classBeingLoaded staticFields do: [:each | self updateOwnerInField: each ].    
-    JavaVM classRegistry registerClass: classBeingLoaded.
+    "/JavaVM classRegistry registerClass: classBeingLoaded.
     classesbeingLoaded remove: classBeingLoaded name ifAbsent:[].
     ^ classBeingLoaded.
 
@@ -654,7 +659,7 @@
     "Modified: / 15-10-2010 / 17:37:38 / Jan Kurs <kurs.jan@post.cz>"
     "Modified: / 28-01-2011 / 15:09:48 / Marcel Hlopko <hlopik@gmail.com>"
     "Modified: / 18-05-2011 / 15:30:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 23-10-2011 / 15:23:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-10-2011 / 21:58:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 readStream:aStream ignoring:classesBeingLoaded
--- a/src/JavaClassRegistry.st	Fri Oct 28 18:58:45 2011 +0000
+++ b/src/JavaClassRegistry.st	Fri Oct 28 20:15:40 2011 +0000
@@ -139,7 +139,7 @@
 
     classes := classLoadersAndClasses at: classLoader ifAbsent: nil.
     classes isNil ifTrue:[
-        classLoadersAndClasses at: classLoader put: Dictionary new        
+        classes := classLoadersAndClasses at: classLoader put: Dictionary new        
     ].
     ^classes at: className ifAbsent: [
         | class |
@@ -345,9 +345,12 @@
     classLoadersAndClasses keysAndValuesDo:[:loader :classes|
 
         (classes includesKey: aJavaClass name) ifTrue:[
-            self breakPoint: #jv.
-            loader = aJavaClass classLoader ifTrue:[
-                self error:'Trying to register class twice!!'
+            loader == aJavaClass classLoader ifTrue:[
+                (classes at: aJavaClass name) ~~ aJavaClass ifTrue:[
+                    self error:'Trying to register class twice!!'
+                ].
+            ] ifFalse:[
+                self breakPoint: #jv.
             ]
         ]                        
     ].
--- a/src/JavaVM.st	Fri Oct 28 18:58:45 2011 +0000
+++ b/src/JavaVM.st	Fri Oct 28 20:15:40 2011 +0000
@@ -68,7 +68,7 @@
 		StdinReplacementFileQuerySignal AssertionsEnabled
 		SimulatedNativeMemory Reflection ZipCache ZipEntryCache
 		ZipLastModTimesCache ZipInflaters JavaPrivilegedAccessQuery
-		ClassRegistry ClassLoaderQuerySignal'
+		ClassRegistry'
 	poolDictionaries:''
 	category:'Languages-Java-Support'
 !
@@ -1425,15 +1425,15 @@
     JavaPrivilegedAccessQuery defaultAnswer:false.
     AssertionsEnabled := true.
     ClassRegistry := JavaClassRegistry new.
-    ClassLoaderQuerySignal := Query new.
 
     "
      JavaVM initialize"
+
     "Created: / 02-01-1998 / 18:02:34 / cg"
     "Modified: / 02-12-1998 / 23:02:22 / cg"
-    "Modified: / 25-02-2011 / 08:05:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 01-04-2011 / 12:33:37 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified: / 09-10-2011 / 20:29:10 / Marcel Hlopko <hlopik@gmail.com>"
+    "Modified: / 28-10-2011 / 22:11:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 initializeAdditionalJavaProtocol
@@ -2104,7 +2104,14 @@
 !
 
 classLoaderQuerySignal
-^ ClassLoaderQuerySignal.
+
+    <resource: #obsolete>
+
+    self breakPoint: #jv.
+
+    ^JavaClassReader classLoaderQuerySignal
+
+    "Modified: / 28-10-2011 / 22:11:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 internalErrorSignal
@@ -2259,9 +2266,10 @@
 classForName: className 
     "load class from registry - load using classLoader from query or JavaClassReader if absent"
     
-    ^self classForName: className definedBy: self classLoaderQuerySignal query.
+    ^self classForName: className definedBy: JavaClassReader classLoaderQuerySignal query.
 
     "Modified: / 21-10-2011 / 12:08:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 28-10-2011 / 22:11:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 classForName: className definedBy: classLoader 
@@ -2276,13 +2284,14 @@
                 ifNotNil: [
                     | classObject |
                     classObject := classLoader 
-                                perform: #'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
+                                perform: #'loadClassInternal(Ljava/lang/String;)Ljava/lang/Class;'
                                 with: (Java as_String: (className asJavaishClassName)).
                     self classForJavaClassObject: classObject.
                 ]
         ].
 
     "Created: / 21-10-2011 / 12:01:16 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 28-10-2011 / 21:40:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 classForName: className definedBy: classLoader ifAbsentPut: aBlock 
@@ -2308,10 +2317,11 @@
 classNamed: className 
     "Return class with given name loaded by current classloader or nil if class is not yet loaded"
     
-    ^ self classNamed: className definedBy: self classLoaderQuerySignal query.
+    ^ self classNamed: className definedBy: JavaClassReader classLoaderQuerySignal query.
 
     "Modified: / 21-10-2011 / 12:09:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified (comment): / 21-10-2011 / 13:34:46 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 28-10-2011 / 22:12:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 classNamed: className definedBy: classLoader 
@@ -6599,17 +6609,17 @@
 
 _java_lang_Throwable_fillInStackTrace: nativeContext 
     <javanative: 'java/lang/Throwable' name: 'fillInStackTrace'>
-    | exClass  exceptionObject  list  con |
-
-    exClass := Java classNamed: 'java/lang/Throwable'.
+    | java_lang_Throwable  exceptionObject  list  con |
+
+    java_lang_Throwable := Java classNamed: 'java/lang/Throwable'.
     exceptionObject := nativeContext receiver.
     
     "/
     "/ debugging only
     "/
     
-    (exceptionObject isKindOf: (JavaVM classNamed: 'java/lang/Throwable')) ifFalse: [
-        self halt
+    (java_lang_Throwable notNil and:[(exceptionObject isKindOf: java_lang_Throwable) not]) ifTrue: [
+        self error:'Thrown object is not a java.lang.Throwable'.
     ].
     con := thisContext sender.
     
@@ -6640,6 +6650,7 @@
     "Created: / 04-01-1998 / 14:27:40 / cg"
     "Modified: / 08-05-1998 / 21:29:53 / cg"
     "Modified: / 21-10-2011 / 13:41:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 28-10-2011 / 22:15:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Throwable_getStackTraceDepth: nativeContext