# HG changeset patch # User vranyj1 # Date 1319832940 0 # Node ID 1db06119bf3e3f3fd9e0e8f4601e553653a70dec # Parent 9031c415cacf8e666ebb36e413fd192e12e02d8f Temporary commit (fixing class loaders - classes gets registered twice) diff -r 9031c415cacf -r 1db06119bf3e src/JavaClassReader.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 " - "Modified: / 23-10-2011 / 22:07:10 / Jan Vrany " + "Modified: / 28-10-2011 / 21:56:02 / Jan Vrany " ! 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 " "Modified: / 28-01-2011 / 15:09:48 / Marcel Hlopko " "Modified: / 18-05-2011 / 15:30:29 / Marcel Hlopko " - "Modified: / 23-10-2011 / 15:23:46 / Jan Vrany " + "Modified: / 28-10-2011 / 21:58:52 / Jan Vrany " ! readStream:aStream ignoring:classesBeingLoaded diff -r 9031c415cacf -r 1db06119bf3e src/JavaClassRegistry.st --- 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. ] ] ]. diff -r 9031c415cacf -r 1db06119bf3e src/JavaVM.st --- 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 " "Modified: / 01-04-2011 / 12:33:37 / Marcel Hlopko " "Modified: / 09-10-2011 / 20:29:10 / Marcel Hlopko " + "Modified: / 28-10-2011 / 22:11:23 / Jan Vrany " ! initializeAdditionalJavaProtocol @@ -2104,7 +2104,14 @@ ! classLoaderQuerySignal -^ ClassLoaderQuerySignal. + + + + self breakPoint: #jv. + + ^JavaClassReader classLoaderQuerySignal + + "Modified: / 28-10-2011 / 22:11:10 / Jan Vrany " ! 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 " + "Modified: / 28-10-2011 / 22:11:56 / Jan Vrany " ! 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 " + "Modified: / 28-10-2011 / 21:40:16 / Jan Vrany " ! 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 " "Modified (comment): / 21-10-2011 / 13:34:46 / Marcel Hlopko " + "Modified: / 28-10-2011 / 22:12:14 / Jan Vrany " ! classNamed: className definedBy: classLoader @@ -6599,17 +6609,17 @@ _java_lang_Throwable_fillInStackTrace: nativeContext - | 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 " + "Modified: / 28-10-2011 / 22:15:54 / Jan Vrany " ! _java_lang_Throwable_getStackTraceDepth: nativeContext