introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :) jk_new_structure
authorhlopkmar
Wed, 19 Oct 2011 16:18:27 +0000
branchjk_new_structure
changeset 1026 5badd1d31864
parent 1025 2c9c84bdd863
child 1027 43dc608e14aa
introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
src/Java.st
src/JavaClassReader.st
src/JavaClassRef2.st
src/JavaClassRegistry.st
src/JavaMethod.st
src/JavaResolver.st
src/JavaStringRef2.st
src/JavaTestsLoader.st
src/JavaVM.st
src/Make.proto
src/Make.spec
src/abbrev.stc
src/bc.mak
src/libInit.cc
src/libjava.rc
src/stx_libjava.st
--- a/src/Java.st	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/Java.st	Wed Oct 19 16:18:27 2011 +0000
@@ -47,7 +47,8 @@
 		SourceDirectories CacheDirectory JavaHome InternedStrings
 		Java_lang_String Java_lang_Class PrettyPrintStyle
 		LastArgumentString Threads ExcludedClassPath FailedToLoadClasses
-		SourceCache SourceArchiveCache'
+		SourceCache SourceArchiveCache JavaClassLoaderQuerySignal
+		MyJavaRegistry ClassLoaderQuerySignal'
 	poolDictionaries:''
 	category:'Languages-Java-Support'
 !
@@ -113,27 +114,12 @@
 classForName: aString 
     "return a javaClass - either existing or loaded"
     
-    | cls |
+    
 
-    cls := self at: aString.
-    cls isNil ifTrue: [
-        FailedToLoadClasses notNil ifTrue: [
-            (FailedToLoadClasses includes: aString) ifTrue: [
-                "/                ('JAVA [info]: class loading already failed: ' , aString) infoPrintCR.
-                ^ nil
-            ]
-        ].
-        
-        "/('JAVA [info]: late class loading: ' , aString) infoPrintCR.
-        
-        cls := JavaClassReader loadClass: aString.
-        cls isNil ifTrue: [            
-            FailedToLoadClasses isNil ifTrue: [ FailedToLoadClasses := Set new. ].
-            
-            "/FailedToLoadClasses add:aString
-        ]
-    ].
-    ^ cls
+    ^MyJavaRegistry classForName: aString
+                definedBy: Java classLoaderQuerySignal query.
+    
+    
 
     "Created: / 18-03-1997 / 16:45:57 / cg"
     "Modified: / 27-04-1998 / 15:00:52 / cg"
@@ -142,7 +128,7 @@
 !
 
 classNamed:aString
-    ^ self at:aString
+    ^ self javaRegistry at:aString.
 !
 
 intern:aJavaString
@@ -167,6 +153,10 @@
     "Created: / 31-08-2011 / 22:55:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+javaRegistry
+^MyJavaRegistry.
+!
+
 java_lang_Class
     Java_lang_Class isNil ifTrue:[
         Java_lang_Class := self at:'java.lang.Class'
@@ -489,26 +479,16 @@
 !Java class methodsFor:'class initialization'!
 
 initAllClasses
-    |system|
-
-    FailedToLoadClasses := nil.
-    self initAllStaticFields.
-
-    system := self classForName:'java.lang.System'.
-    system isInitialized ifFalse:[
-        self initSystemClass.
-    ].
+    | system |
 
-    self allClassesDo:[:cls |
-       cls isInitialized ifFalse:[
-           cls classInit
-       ]
-    ]
+    FailedToLoadClasses := nil.   
+    self initAllStaticFields.
+    system := self classForName: 'java.lang.System'.
+    system isInitialized ifFalse: [ self initSystemClass. ].
+    self allClassesDo: [:cls | cls isInitialized ifFalse: [ cls classInit ] ]
 
-     "
-      Java initAllClasses
-     "
-
+    "
+     Java initAllClasses"
     "Modified: / 27.11.1998 / 00:33:05 / cg"
 !
 
@@ -520,61 +500,55 @@
 !
 
 initSystemClass
-    |system|
-
-    system := Java at:'java.lang.System'.
-    system isNil ifTrue:[
-"/        JavaVM initializeVM.
-"/        system := Java at:'java.lang.System'.
-"/        system isNil ifTrue:[
-        self warn:'JavaVM: no ''' , 'java.lang.System' allBold , ''' class.'.
+    | system |
+    system := Java classForName: 'java.lang.System'.
+    system isNil ifTrue: [
+        "/        JavaVM initializeVM.
+        "/        system := Java at:'java.lang.System'.
+        "/        system isNil ifTrue:[
+        self warn: 'JavaVM: no ''' , 'java.lang.System' allBold , ''' class.'.
+        
 "/            self error:'no ''java.lang.System'' class'.
-            ^ self
+        
+        ^ 
+        
 "/        ].
+        self
     ].
-
     system classInit.
-    (system implements:#'initializeSystemClass()V') ifTrue:[
-        system perform: "invokeStatic:" #'initializeSystemClass()V'.
+    (system implements: #'initializeSystemClass()V') ifTrue: [
+        system "invokeStatic:" perform: #'initializeSystemClass()V'.
     ].
 
     "
      Java initSystemClass
 
-     (Java at:'java.lang.System') 
+     (Java at:'java.lang.System')
         perform:#'getProperty(Ljava/lang/String;)Ljava/lang/String;'
-        with:(Java as_String:'java.home')
-    "
-
+        with:(Java as_String:'java.home')"
     "Modified: / 10.11.1998 / 12:39:58 / cg"
 !
 
 initialize
     JavaNativeMethod flushAllCachedNativeMethods.
-
     InternedStrings := Dictionary new.
     FailedToLoadClasses := nil.
-
-    ClassPath := OrderedCollection new. 
+    ClassPath := OrderedCollection new.
     ClassPathExt := nil.
     ExcludedClassPath := OrderedCollection new.
-
     SourceCache := CacheDictionary new: 32.
     SourceArchiveCache := CacheDictionary new: 32.
-
     self initializeRelease. "lazy initialization of Release"
-
     self initializePrettyPrintStyle.
-
     ObjectMemory addDependent: self.
+     MyJavaRegistry := JavaClassRegistry new.
+         ClassLoaderQuerySignal := Query new.
 
     "
-     Java flushAllJavaResources.   
+     Java flushAllJavaResources.
      Java initialize.
      JavaVM initializeVM
-     Java classPath inspect
-    "
-
+     Java classPath inspect"
     "Modified: / 06-11-2001 / 09:24:12 / cg"
     "Created: / 03-10-2010 / 15:54:02 / Jan Kurs <kurs.jan@post.cz>"
     "Modified: / 15-10-2010 / 17:37:20 / Jan Kurs <kurs.jan@post.cz>"
@@ -976,86 +950,71 @@
 
 !Java class methodsFor:'registering java classes'!
 
-at:aJavaName
+at: aJavaName 
     "search & return for a class by name;
      if there is no such class, return nil.
      The argument, aJavaName may be either an internal name
      (sep'd by slashes) or an external name (sep'd by periods).
      The 'java/lang' standard packages prefix may be ommitted."
-
-    |sym nm cls|
-
-    Classes isNil ifTrue:[^ nil].
-
+    
+    | sym  nm  cls |
+    Classes isNil ifTrue: [ ^ nil ].
     sym := aJavaName asSymbolIfInterned.
-    sym notNil ifTrue:[
-        cls := Classes at:sym ifAbsent:nil.
-        cls notNil ifTrue:[^ cls].
+    sym notNil ifTrue: [
+        cls := Classes at: sym ifAbsent: nil.
+        cls notNil ifTrue: [ ^ cls ].
     ].
-
     nm := aJavaName.
-    (nm includes:$.) ifTrue:[
-        nm := (nm asString copyReplaceAll:$. with:$/).
+    (nm includes: $.) ifTrue: [
+        nm := (nm asString copyReplaceAll: $. with: $/).
         sym := nm asSymbolIfInterned.
-        sym notNil ifTrue:[
-            cls := Classes at:sym ifAbsent:nil.
-            cls notNil ifTrue:[^ cls].
+        sym notNil ifTrue: [
+            cls := Classes at: sym ifAbsent: nil.
+            cls notNil ifTrue: [ ^ cls ].
         ].
     ].
-        
-    (nm includes:$/) ifFalse:[
+    (nm includes: $/) ifFalse: [
         "/
         "/ try java.lang.Foo
         "/
         nm := 'java/lang/' , nm.
         sym := nm asSymbolIfInterned.
-        sym notNil ifTrue:[
-            cls := Classes at:sym ifAbsent:nil.
-            cls notNil ifTrue:[^ cls].
+        sym notNil ifTrue: [
+            cls := Classes at: sym ifAbsent: nil.
+            cls notNil ifTrue: [ ^ cls ].
         ].
     ].
-
     ^ nil
 
     "
-     Java at:'java/lang/String' 
+     Java at:'java/lang/String'
      Java at:'java.lang.String'
-     Java at:'String'          
-     Java at:'System'            
-     Java at:'Foo'               
-    "
-
+     Java at:'String'
+     Java at:'System'
+     Java at:'Foo'"
     "Modified: / 18.7.1998 / 22:55:16 / cg"
 !
 
-at:aJavaName put:aJavaClass
-    |nameSymbol oldClass|
-
-    Classes isNil ifTrue:[
-        Classes := IdentityDictionary new.
-    ].
-
+at: aJavaName put: aJavaClass 
+    | nameSymbol  oldClass |
+self breakPoint:#mh.
+    Classes isNil ifTrue: [ Classes := IdentityDictionary new. ].
     nameSymbol := aJavaName asSymbol.
-    (Classes includesKey:nameSymbol) ifTrue:[
-        oldClass := Classes at:nameSymbol.
-        oldClass == aJavaClass ifTrue:[
-            ^ self
-        ].
+    (Classes includesKey: nameSymbol) ifTrue: [
+        oldClass := Classes at: nameSymbol.
+        oldClass == aJavaClass ifTrue: [ ^ self ].
         ('JAVA: class ' , aJavaName , ' is already loaded') infoPrintCR.
-        self updateClassRefsFrom:oldClass to:aJavaClass.
+        self updateClassRefsFrom: oldClass to: aJavaClass.
     ].
-
-    Classes at:nameSymbol put:aJavaClass.
-    nameSymbol == #'java/lang/String' ifTrue:[
-        Java_lang_String := aJavaClass
-    ].
-
+    Classes at: nameSymbol put: aJavaClass.
+    nameSymbol == #'java/lang/String' ifTrue: [ Java_lang_String := aJavaClass ].
+    
 "/    UnresolvedClassRefs notNil ifTrue:[
 "/        UnresolvedClassRefs do:[:toResolve |
 "/        ]
 "/    ].
-
-    self changed:#classes
+    
+    self changed: #classes
 
     "Created: 17.4.1996 / 23:29:31 / cg"
     "Modified: 7.8.1997 / 19:15:58 / cg"
@@ -1063,28 +1022,29 @@
 
 flushAllJavaResources
     self flushClasses.
-
     SourceCache := CacheDictionary new: 32.
     SourceArchiveCache := CacheDictionary new: 32.
-
-    ObjectMemory allObjectsDo:[:someObject |
-        someObject isBehavior ifTrue:[
-            someObject isJavaClass ifTrue:[
-                someObject setConstantPool:nil.
-                someObject setInterfaces:nil.
-                someObject setMethodDictionary:(MethodDictionary new).
-                Logger log: 'flushing ' , someObject fullName severity: #info facility: 'JVM'.
-            ]
+    MyJavaRegistry flush.
+    ObjectMemory 
+        allObjectsDo: [
+            :someObject | 
+            someObject isBehavior ifTrue: [
+                someObject isJavaClass ifTrue: [
+                    someObject setConstantPool: nil.
+                    someObject setInterfaces: nil.
+                    someObject setMethodDictionary: (MethodDictionary new).
+                    Logger 
+                        log: 'flushing ' , someObject fullName
+                        severity: #info
+                        facility: 'JVM'.
+                ]
+            ].
         ].
-    ].
     JavaClass flushClassesInitOrder.
-
     self flushClasses
 
     "
-     Java flushAllJavaResources
-    "
-
+     Java flushAllJavaResources"
     "Modified: / 06-11-2001 / 09:49:37 / cg"
     "Modified: / 14-09-2011 / 22:15:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -1206,6 +1166,12 @@
     "Modified: 12.8.1997 / 03:04:44 / cg"
 ! !
 
+!Java class methodsFor:'signals'!
+
+classLoaderQuerySignal
+^ ClassLoaderQuerySignal.
+! !
+
 !Java class methodsFor:'source management'!
 
 classSource:filename package:package in:dirOrZipFile 
--- a/src/JavaClassReader.st	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/JavaClassReader.st	Wed Oct 19 16:18:27 2011 +0000
@@ -212,87 +212,50 @@
 
 !JavaClassReader class methodsFor:'file reading'!
 
-loadClass:aClassName
-    "reads a class, installs and returns it.
-     The classes string constants are resolved & <clinit> is called,
-     if it implements it."
-
-    ^self loadClassLazy: aClassName
-
-
-    "
-     JavaClassReader loadClass:'awt/Component'
-     JavaClassReader loadClass:'awt/Button'
-     JavaClassReader loadClass:'browser/AddButton'
-
-     JavaClassReader loadClass:'java/lang/Object'
-     JavaClassReader loadClass:'java/lang/AbstractMethodError'
-     JavaClassReader loadClass:'java/lang/Thread'
-    "
+readClass: aClassName 
+    "reads a class, and returns it.
+     <clinit> is called, class is not installed"
+    
+    ^ self readClass: aClassName ignoring: Set new.
 
     "Created: / 15-04-1996 / 14:58:53 / cg"
     "Modified: / 20-10-1998 / 17:24:54 / cg"
     "Modified: / 08-09-2011 / 08:10:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-loadClassLazy: internalJavaClassName 
-    ^ self loadClassLazy: internalJavaClassName ignoring: Set new.
-
-    "Created: / 08-04-2011 / 18:00:28 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 11-04-2011 / 19:31:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-!
-
-loadClassLazy: className classpath: classpath 
-
-    ^self loadClassLazy: className classpath: classpath ignoring: Set new.
-
-    "Created: / 08-09-2011 / 08:05:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-loadClassLazy: className classpath: classpath ignoring: classesBeingLoaded 
-    "private helper:
-      reads a class, installs and returns it.
-      The class is searched along the ClassPath.
+readClass: className ignoring: classesBeingLoadedOrNil 
+    "reads a class, and returns it.
+     <clinit> is called, class is not installed
 
      className expected format:
-        foo.bar.Baz - normal class
-        foo/bar/Baz - alternative format
-        [[Lfoo/bar/Baz; - array
-        [[I - primitive array
+     foo.bar.Baz - normal class
+     foo/bar/Baz - alternative format
+     [[Lfoo/bar/Baz; - array
+     [[I - primitive array"
+    
+    | rslt  clsName  cls  classesBeingLoaded |
 
-     This is a partial load (to load other classes):
-     - The classes stringConstants are not fixed to be JavaStrings
-       (i.e they are still ST-Strings).
-     - The class is NOT initialized."
-    
-    | rslt  clsName  cls  loadedClass |
     (JavaDescriptor isJavaPrimitiveArrayName: className) ifTrue: [
         ^ (JavaDescriptor fromString: className) javaClass.
     ].
+    (cls := Java javaRegistry at: clsName) ifNotNil: [ ^ cls. ].
     clsName := self getCleanClassNameFrom: className.
-    (classesBeingLoaded notNil and: [ classesBeingLoaded includes: clsName ]) ifTrue: [
-        ('oops - recursive load of ' , clsName , ' attempted') printNL.
-        self halt: 'should not happen'.
-        ^ JavaUnresolvedClassConstant fullName: clsName
+    (classesBeingLoadedOrNil notNil 
+        and: [ classesBeingLoadedOrNil includes: clsName ]) 
+            ifTrue: [ self halt: 'recursive load - should not happen'. ].
+    classesBeingLoadedOrNil isNil ifTrue: [
+        classesBeingLoaded := Set with: clsName
+    ] ifFalse: [
+        classesBeingLoaded := classesBeingLoadedOrNil
+                    add: clsName;
+                    yourself.
     ].
-    (cls := Java at: clsName) notNil ifTrue: [
-        ('oops - ' , clsName , ' is already loaded') printNL.
-        ^ cls
-    ].
-    classesBeingLoaded isNil ifTrue: [ loadedClass := Set with: clsName ] ifFalse: [
-        loadedClass := Set withAll: classesBeingLoaded.
-        loadedClass add: clsName.
-    ].
-    classpath do: [
+    Java effectiveClassPath do: [
         :path | 
         | nm  p  zar  entry  zipFile  read |
 
-        Verbose == true ifTrue: [
-            Transcript showCR: 'trying ' , path asFilename pathName , ' ...'.
-        ].
         p := path.
         p asFilename isDirectory ifTrue: [
-        self halt.
             (p endsWith: Filename separator) ifFalse: [
                 p := p , (Filename separator asString)
             ].
@@ -303,21 +266,18 @@
                     do: [
                         :tryName | 
                         nm := p , tryName , '.class'.
-                        Verbose == true ifTrue: [ Transcript showCR: 'trying ' , nm , ' ...'. ].
                         nm asFilename exists ifTrue: [
                             (Java isExcludedFromClassPath: nm) ifFalse: [
-                                self halt. rslt := self loadFileLazy: nm ignoring: loadedClass.
-                                rslt notNil ifTrue: [ ^ rslt ].
+                                self breakPoint:#mh.
+                                "means we are successfully going to read something :)"
+                                rslt := self readFile: nm ignoring: classesBeingLoaded.
+                                rslt notNil ifTrue: [                                   
+                                    ^ rslt.
+                                ].
                             ]
                         ].
                     ]
         ] ifFalse: [
-            Verbose == true ifTrue: [
-                Transcript 
-                    showCR: 'trying ' , (p asFilename withSuffix: 'jar') pathName , ' ...'.
-                Transcript 
-                    showCR: 'and ' , (p asFilename withSuffix: 'zip') pathName , ' ...'.
-            ].
             ((zipFile := p asFilename withSuffix: 'jar') exists 
                 or: [ (zipFile := p asFilename withSuffix: 'zip') exists ]) 
                     ifTrue: [
@@ -328,7 +288,7 @@
                                 entry := zar extract: nm.
                                 entry notNil ifTrue: [
                                     (Java isExcludedFromClassPath: nm) ifFalse: [
-                                        rslt := self loadStreamLazy: (entry readStream) ignoring: loadedClass.
+                                        rslt := self readStream: (entry readStream) ignoring: classesBeingLoaded.
                                         rslt notNil ifTrue: [ ^ rslt ].
                                     ]
                                 ]
@@ -343,462 +303,65 @@
                     ]
         ]
     ].
-    ^ nil.
 
-    "Modified: / 14-08-1997 / 11:38:42 / stefan"
-    "Modified: / 17-09-1998 / 20:51:25 / cg"
-    "Modified: / 21-03-2011 / 12:42:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Created: / 12-08-2011 / 08:48:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-loadClassLazy: aClassName ignoring: classesBeingLoaded 
-    | class  loader  classObject |
-
-    "Try supplied class loader, if any"
-    loader := ClassLoaderQuerySignal query.
-    (JavaDescriptor isJavaPrimitiveArrayName: aClassName) ifTrue: [
-        ^ (JavaDescriptor fromString: aClassName) javaClass.
-    ].
-    loader 
-        ifNil: [
-            "Try primordial (bootstrap) class loader, if it finds a class, return it"
-            class := self 
-                        loadClassLazy: aClassName
-                        classpath: Java release classPath
-                        ignoring: classesBeingLoaded.
-            class notNil ifTrue: [
-                JavaClassReader postLoadActions.
-                ((aClassName 
-                    indexOfSubCollection: '[L'
-                    startingAt: 1
-                    ifAbsent: [ -1 ]
-                    caseSensitive: true) ~= -1) ifTrue: [
-                    ^ JavaClassReader makeArrayOf: class
-                        withDimensions: (aClassName occurrencesOf: $[)
-                ].
-                ^ class.
-            ].
-             "No classloader specified, try system class loader"
-            loader := (Java classForName: 'java.lang.ClassLoader') instVarNamed: #scl.
-            loader isNil ifTrue: [
-                loader := (Java classForName: 'java.lang.ClassLoader') 
-                            perform: #'getSystemClassLoader()Ljava/lang/ClassLoader;'.
-                loader isNil ifTrue: [
-                    self error: 'Cannot obtain system class loader!!'.
-                    ^ self.
-                ].
-            ].
-        ].
-    classObject := loader 
-                perform: #'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
-                with: (Java as_String: (aClassName copyReplaceAll: $/ with: $.)).
-    classObject notNil ifTrue: [ ^ JavaVM classForJavaClassObject: classObject. ].
-     "Bad, class not found..."
-    JavaVM throwClassNotFoundException: aClassName.
-
-    "Modified: / 14-08-1997 / 11:38:42 / stefan"
-    "Modified: / 17-09-1998 / 20:51:25 / cg"
-    "Modified: / 21-03-2011 / 12:42:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 08-09-2011 / 08:25:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-loadClassesIn: directory 
-    "load all classes (.class files, strictly speaking) found in given directory.
-     The argument is string containing the name of the directory.
-
-    Returns a set of loaded classes."
-    
-    ^self loadClassesIn: directory  matching: '*'
-
-    "Modified: / 11-06-2011 / 13:35:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-loadClassesIn: directory matching: pattern
-    "load all classes (.class files, strictly speaking) found in given directory.
-     The arguments are a string containing the name of the directory
-     and a class name pattern. Only classes matching the pattern are loaded.
-     class names are matched using String>>matches:.
-    
-     Returns a set of loaded classes."
-    
-    | dir  dirString  className  loadedClasses |
-
-    dir := directory asFilename asAbsoluteFilename.
-    loadedClasses := Set new.
-    Java addToClassPath: dir pathName.
-    dir recursiveDirectoryContentsAsFilenamesDo: 
-            [:filename |
-            (filename isRegularFile and: [ filename suffix = #class ]) 
-                ifTrue: 
-                    [ dirString := dir pathName.
-                    className := filename withoutSuffix pathName.
-                    className := className subString: dirString size + 2 to: className size.
-                    className := className copyReplaceAll: (Filename separator) with: $..
-                    (className matches: pattern) ifTrue:
-                        [loadedClasses add: (self loadClass: className)]]].
-
-    ^ loadedClasses.
-
-    "Modified: / 29-04-2011 / 17:43:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Created: / 11-06-2011 / 13:34:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 11-06-2011 / 16:19:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-loadFile:aFilename
-    "reads a class from aFilename, installs and returns it.
-     The classes strings are fixed and its class-init function is called."
-
-    self loadFileLazy:aFilename ignoring:(Set new).
-
-    "Modified: / 08-09-2011 / 08:01:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+  
+    "Created: / 15-04-1996 / 14:58:53 / cg"
+    "Modified: / 20-10-1998 / 17:24:54 / cg"
+    "Modified: / 08-09-2011 / 08:10:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-loadFileLazy:aFilename ignoring:classesBeingLoaded
-    "reads a class from aFilename, installs and returns it.
-     Strings are fixed and classrefs are fixed, 
-     but NO no class-init functions are called."
-
-    |aClass pool|
-
-    aClass := self readFile:aFilename ignoring:classesBeingLoaded.
-    aClass notNil ifTrue:[
-        aClass isJavaClass ifTrue:[
-            "/ a java class
-            Java at:(aClass fullName asSymbol) put:aClass.
-
-            classesBeingLoaded remove:aClass fullName ifAbsent:nil.
-
-            JavaUnresolvedConstant resolveFor:aClass.
-        ] ifFalse:[    
-            "/ a smalltalk class
-            "/ self halt.
-aClass inspect.
-        ]
-    ].
-    ^ aClass
-
-    "
-     JavaClassReader loadFile:'/phys/ibm3/hotjava/classes/browser/AddButton.class'
-
-     '/phys/ibm3/java/lib/java/lang' asFilename
-        directoryContents do:[:nm |
-            (nm endsWith:'.class') ifTrue:[
-                ('/phys/ibm3/java/lib/java/lang/' , nm) printNL.
-                JavaClassReader loadFile:'/phys/ibm3/java/lib/java/lang/' , nm
-            ]
-        ].
-
-     '/phys/ibm3/java/lib/java/io' asFilename
-        directoryContents do:[:nm |
-            (nm endsWith:'.class') ifTrue:[
-                ('/phys/ibm3/java/lib/java/io/' , nm) printNL.
-                JavaClassReader loadFile:'/phys/ibm3/java/lib/java/io/' , nm
-            ]
-        ].
-
-     '/phys/ibm3/java/lib/java/net' asFilename
-        directoryContents do:[:nm |
-            (nm endsWith:'.class') ifTrue:[
-                ('/phys/ibm3/java/lib/java/net/' , nm) printNL.
-                JavaClassReader loadFile:'/phys/ibm3/java/lib/java/net/' , nm
-            ]
-        ].
-
-     '/phys/ibm3/java/lib/java/util' asFilename
-        directoryContents do:[:nm |
-            (nm endsWith:'.class') ifTrue:[
-                ('/phys/ibm3/java/lib/java/util/' , nm) printNL.
-                JavaClassReader loadFile:'/phys/ibm3/java/lib/java/util/' , nm
-            ]
-        ].
-
-     '/phys/ibm3/java/lib/java/awt' asFilename
-        directoryContents do:[:nm |
-            (nm endsWith:'.class') ifTrue:[
-                ('/phys/ibm3/java/lib/java/awt/' , nm) printNL.
-                JavaClassReader loadFile:'/phys/ibm3/java/lib/java/awt/' , nm
-            ]
-        ].
-
-     '/phys/ibm3/java/lib/java/applet' asFilename
-        directoryContents do:[:nm |
-            (nm endsWith:'.class') ifTrue:[
-                ('/phys/ibm3/java/lib/java/applet/' , nm) printNL.
-                JavaClassReader loadFile:'/phys/ibm3/java/lib/java/applet/' , nm
-            ]
-        ].
-
-     JavaClassReader loadFile:'/phys/ibm3/java/lib/java/lang/AbstractMethodError.class'
-     JavaClassReader loadFile:'/phys/ibm3/java/lib/java/lang/Thread.class'
-    "
-
-    "Created: / 15.4.1996 / 14:58:53 / cg"
-    "Modified: / 12.5.1998 / 22:06:52 / cg"
-!
-
-loadStreamLazy:aStream ignoring:classesBeingLoaded
-    "reads a class from aStream, installs and returns it.
-     Strings are fixed and classrefs are fixed, 
-     but NO no class-init functions are called."
-
-    |javaClass pool|
-
-    javaClass := self readStream:aStream ignoring:classesBeingLoaded.
-    javaClass notNil ifTrue:[
-        Java at:(javaClass fullName asSymbol) put:javaClass.
-
-        classesBeingLoaded remove:javaClass fullName ifAbsent:nil.
-
-        JavaUnresolvedConstant resolveFor:javaClass.
-    ].
-    ^ javaClass
-
-    "Created: / 30.3.1998 / 17:59:02 / cg"
-!
-
-postLoadActions
-    "Resolve all classes' string constants.
-     Perform all class initialization functions (of those which are not
-     yet initialized)."
-
-    ^ self postLoadActions:true
-
-    "Modified: 15.8.1997 / 01:02:17 / cg"
-!
-
-postLoadActions:loadUnresolved
-    "Resolve all classes' string constants.
-     Perform all class initialization functions 
-     (of those which are not yet initialized)."
-
-    |classes prevUnresolved newUnresolved loader|
-
-    "/ need at least java.lang.String, for valid constants
-    Java java_lang_String isNil ifTrue:[
-        self loadClassLazy:'java.lang.String' ignoring:(Set new).
-    ].
-
-    LazyClassLoading ifFalse:[
-        loader := ClassLoaderQuerySignal query.
-
-        prevUnresolved := nil.
-        newUnresolved := JavaUnresolvedConstant unresolvedClassNames asArray.
-        loadUnresolved ifTrue:[
-            [prevUnresolved ~= newUnresolved] whileTrue:[
-                newUnresolved do:[:nextUnresolved |
-                    |classURL|
-
-                    (Java at:nextUnresolved) isNil ifTrue:[ "/ could have been loaded in the meantime
-                        Silent ifFalse:[
-                            'loading unresolved: ' print. nextUnresolved printCR.
-                        ].
-                        loader isNil ifTrue:[
-                            self
-                                loadClassLazy:nextUnresolved
-                                ignoring:(Set new).
-                        ] ifFalse:[
-                            "/
-                            "/ the aquired loader is a javaClassLoader
-                            "/ which expects an URL as arg.
-                            "/
-                            "/ classURL := Java as_URL:('file:' , nextUnresolved asString , '.class').
-                            "/ loader loadClass:classURL
-                            loader
-                                perform:#'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
-                                with:(Java as_String:(nextUnresolved asString)).
-                        ]
-                    ]
-                ].
-                prevUnresolved := newUnresolved.
-                newUnresolved := JavaUnresolvedConstant unresolvedClassNames asArray.
-            ].
-        ].
-false ifTrue:[
-        newUnresolved size == 0 ifTrue:[
-            "/ nothing unresolved
-
-            (classes := Java allClasses) notNil ifTrue:[
-                "/ init all new classes
-                "/ fetch again - there could be new ones ...
-
-                classes := Java allClasses.
-                classes do:[:aJavaClass |
-                    aJavaClass isInitialized ifFalse:[
-                        Silent ifFalse:[
-                            'performing class initialization of ' print. aJavaClass fullName printCR.
-                        ].
-                        aJavaClass classInit
-                    ]
-                ]
-            ]
-        ].
-].
-    ]
-
-    "Created: / 15.8.1997 / 01:01:44 / cg"
-    "Modified: / 21.10.1998 / 01:18:35 / cg"
-!
-
-readFile:aFilename ignoring:classesBeingLoaded
+readFile: aFilename ignoring: classesBeingLoaded 
     "reads a class from aFilename and returns it.
      The JavaClass is NOT installed as global and unresolved
      refs are NOT patched."
-
-    |inStream javaClass|
+    
+    | inStream  javaClass |
 
-    [
-        inStream := aFilename asFilename readStream.
-    ] on:StreamError do:[:ex|
-        Logger log: ('no file: ' , aFilename asString) severity: #error facility: 'JVM'.
-        self halt.
-        ^ nil
-    ].
-
-    javaClass := self new readStream:inStream ignoring:classesBeingLoaded.
-    (javaClass notNil and:[javaClass isJavaClass]) ifTrue:[
-        javaClass setBinaryFilePath:(inStream pathName).
+    [ inStream := aFilename asFilename readStream. ] on: StreamError
+        do: [
+    :ex | 
+    Logger 
+        log: ('no file: ' , aFilename asString)
+        severity: #error
+        facility: 'JVM'.
+    self halt.
+    ^ nil
+].
+    javaClass := self readStream: inStream ignoring: classesBeingLoaded.
+    (javaClass notNil and: [ javaClass isJavaClass ]) ifTrue: [
+        javaClass setBinaryFilePath: (inStream pathName).
     ].
     inStream close.
-
-    AbsolutelySilent ifFalse:[
-        Logger log: 'loaded class ' , javaClass displayString severity: #info facility: 'JVM'.
+    AbsolutelySilent ifFalse: [
+        Logger 
+            log: 'loaded class ' , javaClass displayString
+            severity: #info
+            facility: 'JVM'.
     ].
-
-
-    ^ javaClass
+    ^ javaClass.
 
     "Created: / 15-04-1996 / 14:58:53 / cg"
     "Modified: / 09-05-1998 / 01:44:24 / cg"
     "Modified: / 14-09-2011 / 22:20:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-readStream:aStream
-    "reads a class from aStream and returns it.
-     The JavaClass is installed as global.
-     If new classes are required to be loaded, a new standard loader
-     is created."
-
-    ^ self readStream:aStream loader:nil
-
-    "Modified: 14.8.1997 / 19:51:50 / cg"
-!
-
 readStream: aStream ignoring: classesBeingLoaded 
     "reads a class from aStream and returns it.
      The JavaClass is not installed as global"
     
     | javaClass |
 
-    javaClass := JavaClassReader new readStream: aStream ignoring: classesBeingLoaded.
-    AbsolutelySilent ifFalse: [ 
-        Logger log: 'loaded class ' , javaClass displayString severity: #info facility: 'JVM'.
-    ].
-    ^ javaClass
+    javaClass := JavaClassReader new readStream: aStream
+                ignoring: classesBeingLoaded.
+    Logger 
+        log: 'loaded class ' , javaClass displayString
+        severity: #info
+        facility: 'JVM'.
+    ^ javaClass.
 
     "Modified: / 30-03-1998 / 18:14:40 / cg"
     "Modified: / 09-05-2011 / 23:15:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified: / 14-09-2011 / 22:21:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-readStream:aStream loader:aClassLoader
-    "reads a class from aStream and returns it.
-     The JavaClass is installed as global.
-     If new classes are required to be loaded, aClassLoader is
-     asked to do it. If aClassLoader is nil, a new standard loader
-     is created."
-
-    ^ self
-	readStream:aStream 
-	loader:aClassLoader 
-	loadUnresolved:true
-
-    "Modified: 15.8.1997 / 01:00:35 / cg"
-!
-
-readStream: aStream loader: aClassLoader loadUnresolved: loadUnresolved 
-    "reads a class from aStream and returns it.
-     The JavaClass is installed as global.
-     If new classes are required to be loaded, aClassLoader is
-     asked to do it. If aClassLoader is nil, a new standard loader
-     is created."
-    
-    | javaClass |
-
-    ClassLoaderQuerySignal answer: aClassLoader
-        do: 
-            [ javaClass := self readStream: aStream ignoring: (Set new).
-            javaClass notNil 
-                ifTrue: 
-                    [ JavaClassReader postLoadActions: loadUnresolved.
-                    Java at: (javaClass fullName asSymbol) put: javaClass.
-                    JavaUnresolvedConstant resolveFor: javaClass. ]. ].
-    ^ javaClass
-
-    "Created: / 15-08-1997 / 00:59:24 / cg"
-    "Modified: / 23-01-1998 / 17:14:09 / cg"
-    "Modified: / 09-05-2011 / 23:15:23 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 26-07-2011 / 17:21:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-resolveClass:aJavaClass
-    "Resolve a particular classes' constants.
-     Perform all class initialization functions 
-     (of those which are not yet initialized)."
-
-    |loader classToLoad|
-
-    LazyClassLoading ifFalse:[
-        loader := (aJavaClass classLoader). "/ ? (ClassLoaderQuerySignal raise).
-
-        [
-            classToLoad := nil.
-            aJavaClass constantPool do:[:item |
-                |itemClass |
-
-                itemClass := item class.
-                itemClass == JavaUnresolvedClassConstant ifTrue:[
-                    classToLoad := item className.
-"/                ] ifFalse:[
-"/                    itemClass == JavaUnresolvedMethodrefConstant ifTrue:[
-"/self halt.
-"/                    ] ifFalse:[
-"/                        itemClass == JavaUnresolvedInterfaceMethodrefConstant ifTrue:[
-"/self halt.
-"/                        ]
-"/                    ]
-                ].
-            ].
-
-            classToLoad notNil ifTrue:[
-                loader isNil ifTrue:[
-                    self
-                        loadClassLazy:classToLoad
-                        ignoring:(Set new).
-                ] ifFalse:[
-                    "/
-                    "/ the aquired loader is a javaClassLoader
-                    "/ which expects an URL as arg.
-                    "/
-                    "/ classURL := Java as_URL:('file:' , nextUnresolved asString , '.class').
-                    "/ loader loadClass:classURL
-                    loader
-                        perform:#'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
-                        with:(Java as_String:(classToLoad asString)).
-                ]
-            ].
-            classToLoad notNil.
-        ] whileTrue.
-
-        aJavaClass isInitialized ifFalse:[
-            Silent ifFalse:[
-                'performing class initialization of ' print. aJavaClass fullName printCR.
-            ].
-            aJavaClass classInit
-        ].
-    ]
-
-    "Created: / 20.10.1998 / 17:53:22 / cg"
-    "Modified: / 20.10.1998 / 17:59:09 / cg"
 ! !
 
 !JavaClassReader class methodsFor:'helpers'!
@@ -832,13 +395,66 @@
     ^ arrayClass.
 ! !
 
-!JavaClassReader class methodsFor:'mode setting'!
+!JavaClassReader class methodsFor:'obsolete'!
+
+resolveClass: aJavaClass 
+    "Resolve a particular classes' constants.
+     Perform all class initialization functions
+     (of those which are not yet initialized)."
+    
+    | loader  classToLoad |
+
+    self breakPoint: #mh.
+     "new resolving does not need this - shouldn't be called at all"
+    LazyClassLoading ifFalse: [
+        loader := (aJavaClass classLoader).
+        [
+            classToLoad := nil.
+            aJavaClass constantPool do: [
+                :item | 
+                | itemClass |
 
-useOldClassReader
-    self error: 'Old class reader should not be used anymore!!'.
-UsedJavaClassReaderClass := JavaClassReader.
+                itemClass := item class.
+                itemClass == JavaUnresolvedClassConstant ifTrue: [
+                    classToLoad := item className.
+                    
+"/                ] ifFalse:[
+"/                    itemClass == JavaUnresolvedMethodrefConstant ifTrue:[
+"/self halt.
+"/                    ] ifFalse:[
+"/                        itemClass == JavaUnresolvedInterfaceMethodrefConstant ifTrue:[
+"/self halt.
+"/                        ]
+"/                    ]
+                ].
+            ].
+            classToLoad notNil ifTrue: [
+                loader isNil ifTrue: [
+                    Java javaRegistry classForName: classToLoad.
+                ] ifFalse: [
+                    "/
+                    "/ the aquired loader is a javaClassLoader
+                    "/ which expects an URL as arg.
+                    "/
+                    "/ classURL := Java as_URL:('file:' , nextUnresolved asString , '.class').
+                    "/ loader loadClass:classURL
+                    loader perform: #'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
+                        with: (Java as_String: (classToLoad asString)).
+                ]
+            ].
+            classToLoad notNil.
+        ] whileTrue.
+        aJavaClass isInitialized ifFalse: [
+            Silent ifFalse: [
+                'performing class initialization of ' print.
+                aJavaClass fullName printCR.
+            ].
+            aJavaClass classInit
+        ].
+    ]
 
-    "Created: / 09-05-2011 / 23:11:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Created: / 20.10.1998 / 17:53:22 / cg"
+    "Modified: / 20.10.1998 / 17:59:09 / cg"
 ! !
 
 !JavaClassReader methodsFor:'accessing'!
@@ -1993,34 +1609,13 @@
 !
 
 readConstant_String
-    | string_index  chars  jString |
+    | string_index |
 
     string_index := inStream nextUnsignedShortMSB: msb.
-    Verbose 
-        ifTrue: 
-            [ Transcript
-                show: 'string; index= ';
-                showCR: string_index ].
-    
-    "/ resolve here if possible
+    ^ JavaStringRef2 in: constants withValueAt: string_index.
+
     
-    string_index < constSlot 
-        ifTrue: 
-            [ Java java_lang_String notNil 
-                ifTrue: 
-                    [ chars := (constants at: string_index).
-                    chars isString ifFalse: [ self halt: 'should not happen' ].
-                    jString := JavaVM javaStringObjectForString:chars interned:true.
-                    ^ jString. ] ].
-    ^ JavaUnresolvedStringConstant 
-        pool: constants
-        poolIndex: constSlot
-        stringIndex: string_index
-
-    "
-     Verbose := true.
-     JavaClassReader readFile:'/phys/ibm3/java/lib/java/lang/System.class'"
-
+    
     "Created: / 15-04-1996 / 15:20:33 / cg"
     "Modified: / 07-05-1998 / 11:42:45 / cg"
     "Modified: / 13-05-2011 / 17:31:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
@@ -2665,24 +2260,17 @@
 
 loadSuperclassIdentifiedBy: something ignoring: classesBeingLoaded 
     "overriding method, here we expect something to be new JavaClassRef2"
-
+    
     self assert: something isJavaRef
         message: 'class identifier is not a java reference'.
-
     self assert: something isJavaClassRef
-        message: 'class identifier is not a java class reference'.
-
-    (classesBeingLoaded includes: something fullName) ifTrue: 
-        [self error: 'class we want to load is being loaded and that means something went wrong. tell mh'].
-
-    "Do NOT use >>something resolve<< here, since something
-     has no owner set and therefore access check will cause DNU.
-     Ask JV for details."
-
-    "
-    ^Java classForName: something javaClassName.
-    "
-    ^self class loadClass: something javaClassName.
+        message: 'class identifier is not a java class reference'.  
+    (classesBeingLoaded includes: something name) ifTrue: [
+        self 
+            error: 'class we want to load is being loaded and that means something went wrong. tell mh'
+    ].
+     "hint in case of bug - is parent of something set? surely jv will know more :)" "find out which classloader is used"
+    ^ Java javaRegistry classForName: something name definedBy: nil.
 
     "Created: / 18-05-2011 / 14:55:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified: / 31-08-2011 / 21:25:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
--- a/src/JavaClassRef2.st	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/JavaClassRef2.st	Wed Oct 19 16:18:27 2011 +0000
@@ -242,6 +242,12 @@
 
 !JavaClassRef2 methodsFor:'queries'!
 
+isJavaClassOrStringRef
+    ^ true.
+
+    "Created: / 11-04-2011 / 19:10:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
 isJavaClassRef
 ^true.
 
@@ -272,12 +278,10 @@
     "Created: / 12-08-2011 / 22:18:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-resolve: doInit
+resolve: doInit 
     "
-    Resolves a class. If doInit is true, then the class is initialuzed,
-    otherwise not.
-    "
-    
+     Resolves a class. If doInit is true, then the class is initialuzed,
+     otherwise not."
     self isResolved ifFalse: [ self findResolvedValue: doInit ].
     ^ valueCache.
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/JavaClassRegistry.st	Wed Oct 19 16:18:27 2011 +0000
@@ -0,0 +1,299 @@
+"
+ COPYRIGHT (c) 1996-2011 by Claus Gittinger
+ COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
+                            SWING Research Group, Czech Technical University in Prague
+
+ Parts of the code written by Claus Gittinger are under following
+ license:
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+
+ Parts of the code written at SWING Reasearch Group [1] are MIT licensed:
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the 'Software'), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+ [1] Code written at SWING Research Group contain a signature
+     of one of the above copright owners.
+"
+"{ Package: 'stx:libjava' }"
+
+Object subclass:#JavaClassRegistry
+	instanceVariableNames:'classLoadersAndClasses systemClassLoader'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Languages-Java-Support'
+!
+
+!JavaClassRegistry class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1996-2011 by Claus Gittinger
+ COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
+                            SWING Research Group, Czech Technical University in Prague
+
+ Parts of the code written by Claus Gittinger are under following
+ license:
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+
+ Parts of the code written at SWING Reasearch Group [1] are MIT licensed:
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the 'Software'), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+ [1] Code written at SWING Research Group contain a signature
+     of one of the above copright owners.
+
+"
+! !
+
+!JavaClassRegistry class methodsFor:'instance creation'!
+
+new
+^ self basicNew initialize.
+! !
+
+!JavaClassRegistry methodsFor:'* uncategorized *'!
+
+getSystemClassLoader
+    systemClassLoader 
+        ifNil: [
+            systemClassLoader := (Java classForName: 'java.lang.ClassLoader') 
+                        perform: #'getSystemClassLoader()Ljava/lang/ClassLoader;'.
+        ].
+    ^ systemClassLoader.
+!
+
+handleNilClassLoaderFor: aJavaClassName 
+! !
+
+!JavaClassRegistry methodsFor:'class loaders'!
+
+addClassLoader: aJavaClassLoader
+
+classLoadersAndClasses at: aJavaClassLoader put: Dictionary new.
+!
+
+getClassesDefinedBy:classLoader 
+    ^classLoadersAndClasses at: classLoader ifAbsent: [nil].
+!
+
+removeClassLoader: aJavaClassLoader 
+    classLoadersAndClasses removeKey: aJavaClassLoader.
+! !
+
+!JavaClassRegistry methodsFor:'class loading'!
+
+loadClassesIn: directory 
+"load all classes (.class files, strictly speaking) found in given directory.
+The argument is string containing the name of the directory.
+
+Returns a set of loaded classes."
+
+^ self loadClassesIn: directory matching: '*'.
+
+"Modified: / 11-06-2011 / 13:35:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+loadClassesIn: directory matching: pattern 
+"load all classes (.class files, strictly speaking) found in given directory.
+The arguments are a string containing the name of the directory
+and a class name pattern. Only classes matching the pattern are loaded.
+class names are matched using String>>matches:.
+ALL CLASSES ARE INSTALLED!!
+Returns a set of loaded classes."
+
+| dir  dirString  className  loadedClasses |
+
+dir := directory asFilename asAbsoluteFilename.
+loadedClasses := Set new.
+Java addToClassPath: dir pathName.
+dir 
+recursiveDirectoryContentsAsFilenamesDo: [
+:filename | 
+(filename isRegularFile and: [ filename suffix = #class ]) ifTrue: [
+dirString := dir pathName.
+className := filename withoutSuffix pathName.
+className := className subString: dirString size + 2 to: className size.
+className := className copyReplaceAll: (Filename separator) with: $..
+(className matches: pattern) ifTrue: [
+|loadedClass|
+loadedClass := JavaClassReader readClass: className.
+self addClass: loadedClass definedBy:nil.
+loadedClasses add: loadedClass.
+]
+]
+].
+^ loadedClasses.
+
+"Modified: / 29-04-2011 / 17:43:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+"Created: / 11-06-2011 / 13:34:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+"Modified: / 11-06-2011 / 16:19:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+loadFile: aFilename 
+    "reads a class from aFilename, installs and returns it."
+    
+    | aClass |
+
+    aClass := JavaClassReader readFile: aFilename ignoring: Set new.
+    self addClass: aClass definedBy: nil.
+    ^ aClass.
+
+    "Created: / 15.4.1996 / 14:58:53 / cg"
+    "Modified: / 12.5.1998 / 22:06:52 / cg"
+!
+
+loadStream: javaClassDataStream loader: aJavaClassLoader 
+    "reads a class from aStream and returns it.
+     The JavaClass is installed as global.
+     If new classes are required to be loaded, aClassLoader is
+     asked to do it. If aClassLoader is nil, a new standard loader
+     is created."
+    
+    | javaClass |
+
+    JavaClassReader classLoaderQuerySignal answer: aJavaClassLoader
+        do: [
+            javaClass := JavaClassReader readStream: javaClassDataStream
+                        ignoring: (Set new).
+            javaClass 
+                ifNil: [
+                    Logger 
+                        log: 'JavaClassReader was not able to read given data stream'
+                        severity: #severe
+                        facility: #JavaClassRegistry.
+                    self breakPoint: #mh.
+                    ^ nil.
+                ].
+            self addClass: javaClass definedBy: aJavaClassLoader.
+        ].
+    ^ javaClass
+! !
+
+!JavaClassRegistry methodsFor:'classes'!
+
+addClass:aJavaClass definedBy:classLoader
+|classesDefinedByClassLoader|
+classesDefinedByClassLoader := classLoadersAndClasses at: classLoader ifAbsentPut:[Dictionary new].
+classesDefinedByClassLoader at: aJavaClass name put: aJavaClass.
+!
+
+at: className 
+    ^ (classLoadersAndClasses at: nil) at: className ifAbsent: nil.
+!
+
+at: classLoader at: className
+    ^ (classLoadersAndClasses at: classLoader) at: className ifAbsent: nil.
+!
+
+classForName: className
+    "you should be damn sure you don't have class loader"
+   ^ self classForName: className definedBy:nil.
+!
+
+classForName: className definedBy: aJavaClassLoader 
+    | classesLoadedByClassLoader  result  classLoader |
+
+    classesLoadedByClassLoader := classLoadersAndClasses at: classLoader
+                ifAbsent: [
+                    "classloader not found?"
+                    self breakPoint: #mh.
+                ].
+    result := classesLoadedByClassLoader at: className
+                ifAbsent: [
+                    |   newJavaClass |
+                    
+                    aJavaClassLoader 
+                        ifNil: [ newJavaClass := self loadClassNamed: className. ]
+                        ifNotNil: [ newJavaClass := self loadClassNamed: className using: aJavaClassLoader. ].
+                ].
+    ^ result.
+!
+
+loadClassNamed: className 
+    | result |
+
+    result := JavaClassReader readClass: className.
+    self addClass: result definedBy: result classLoader.
+    ^ result.
+!
+
+loadClassNamed: className using: classLoader 
+    | classObject  result |
+
+    classObject := classLoader 
+                perform: #'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
+                with: (Java as_String: (className copyReplaceAll: $/ with: $.)).
+    classObject ifNil: [ self breakPoint: #mh ].
+    result := JavaVM classForJavaClassObject: classObject.
+    self addClass: result definedBy: result classLoader.
+    ^ result.
+! !
+
+!JavaClassRegistry methodsFor:'initialization'!
+
+flush
+    classLoadersAndClasses := Dictionary new.
+    classLoadersAndClasses at: nil put: Dictionary new.
+    systemClassLoader := nil.
+!
+
+initialize
+    classLoadersAndClasses := Dictionary new.
+    classLoadersAndClasses at: nil put: Dictionary new.
+! !
+
+!JavaClassRegistry class methodsFor:'documentation'!
+
+version_SVN
+    ^ '$Id$'
+! !
--- a/src/JavaMethod.st	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/JavaMethod.st	Wed Oct 19 16:18:27 2011 +0000
@@ -2404,7 +2404,7 @@
 !JavaMethod class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libjava/JavaMethod.st,v 1.108 2011/08/19 13:49:39 cg Exp $'
+    ^ '$Id$'
 !
 
 version_CVS
--- a/src/JavaResolver.st	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/JavaResolver.st	Wed Oct 19 16:18:27 2011 +0000
@@ -238,17 +238,16 @@
 loadUnresolvedClass: aJavaClassRef 
     | nm |
 
-    nm := aJavaClassRef javaClassName.
+    nm := aJavaClassRef name.
     nm size == 1 
         and: [ JavaDescriptor baseTypes at: nm first ifPresent: [:cls | ^ cls ] ].
-
-    "Note, that loadClass itself deals with class loaders.
+     "Note, that loadClass itself deals with class loaders.
      The caller of me should set one using code like:
-
-        JavaClassReader classLoaderQuerySignal answer: loader do:[call me]
-
+     
+     JavaClassReader classLoaderQuerySignal answer: loader do:[call me]
+     
     "
-    ^ JavaClassReader loadClass: nm
+    ^ Java javaRegistry classForName: nm definedBy: JavaClassReader classLoaderQuerySignal query.
 
     "Created: / 11-04-2011 / 19:27:10 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
     "Modified: / 23-05-2011 / 21:06:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
--- a/src/JavaStringRef2.st	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/JavaStringRef2.st	Wed Oct 19 16:18:27 2011 +0000
@@ -42,7 +42,7 @@
 "{ Package: 'stx:libjava' }"
 
 JavaRef2 subclass:#JavaStringRef2
-	instanceVariableNames:'nameIndex'
+	instanceVariableNames:'valueIndex'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Languages-Java-Reader-Support-new'
@@ -95,12 +95,20 @@
 "
 ! !
 
+!JavaStringRef2 class methodsFor:'instance creation'!
+
+in: aJavaConstantPool withValueAt: valueIndex 
+^ self basicNew initializeIn: aJavaConstantPool withValueAt: valueIndex.
+
+"Created: / 10-05-2011 / 14:56:15 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+
 !JavaStringRef2 methodsFor:'accessing'!
 
 = another 
-    another isJavaRef ifFalse: [^false].
-    constantPool = another constantPool ifFalse: [^ false].
-    nameIndex = another nameIndex ifFalse: [^false].
+    another isJavaRef ifFalse: [ ^ false ].
+    constantPool = another constantPool ifFalse: [ ^ false ].
+    valueIndex = another valueIndex ifFalse: [ ^ false ].
     ^ true.
 
     "Created: / 13-05-2011 / 17:19:56 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
@@ -113,14 +121,14 @@
 !
 
 findResolvedValue
-    valueCache := Java as_String: (constantPool at: nameIndex).
+    valueCache := Java as_String: (constantPool at: valueIndex).
     ^ valueCache.
 
     "Created: / 13-05-2011 / 17:21:49 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 !
 
 hash
-    ^ constantPool hash bitXor: nameIndex hash.
+    ^ constantPool hash bitXor: valueIndex hash.
 
     "Created: / 13-05-2011 / 17:20:22 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 !
@@ -133,11 +141,35 @@
 !
 
 name
-    ^ constantPool at: nameIndex.
+    "dont use me, I'm here just because marcel was not sure he found and fixed all senders"
+    self breakPoint: #mh.
+    ^ constantPool at: valueIndex.
+
+    "Created: / 13-05-2011 / 17:23:11 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+value
+    ^ constantPool at: valueIndex.
 
     "Created: / 13-05-2011 / 17:23:11 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 ! !
 
+!JavaStringRef2 methodsFor:'initialization'!
+
+initializeIn: aJavaConstantPool withValueAt: valueCPIndex 
+valueIndex := valueCPIndex.
+constantPool := aJavaConstantPool.
+    super initialize.
+! !
+
+!JavaStringRef2 methodsFor:'queries'!
+
+isJavaClassOrStringRef
+^ true.
+
+"Created: / 11-04-2011 / 19:10:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+
 !JavaStringRef2 class methodsFor:'documentation'!
 
 version_SVN
--- a/src/JavaTestsLoader.st	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/JavaTestsLoader.st	Wed Oct 19 16:18:27 2011 +0000
@@ -250,21 +250,20 @@
     "Created: / 11-06-2011 / 16:05:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-loadIn: directories matching: pattern
-
+loadIn: directories matching: pattern 
     | classes |
-    
-    JavaInitializedResource new setUp.  
+
+    JavaInitializedResource new setUp.
     JavaLibrariesResource new setUp.
     JavaTestsResource new setUp.
     classes := OrderedCollection new.
-
-    directories do:
-            [:each|
-            each asFilename exists ifTrue:
-                [classes addAll: (JavaClassReader loadClassesIn: each matching: pattern)]].
-
-    ^classes
+    directories do: [
+        :each | 
+        each asFilename exists ifTrue: [
+            classes addAll: (Java javaRegistry loadClassesIn: each matching: pattern)
+        ]
+    ].
+    ^ classes
 
     "Created: / 11-06-2011 / 16:05:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 20-06-2011 / 19:02:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
--- a/src/JavaVM.st	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/JavaVM.st	Wed Oct 19 16:18:27 2011 +0000
@@ -1805,10 +1805,8 @@
     ObjectMemory
         javaJustInTimeCompilation: false;
         javaNativeCodeOptimization: false.
-
-    "Java lot of stack. Change default to 2 MB"
-    Process defaultMaximumStackSize:1024 * 1024 * 2.
-
+     "Java lot of stack. Change default to 2 MB"
+    Process defaultMaximumStackSize: 1024 * 1024 * 2.
     JavaObject autoload.
     JavaContext autoload.
     MonitorTrace ifNil: [ self initialize ].
@@ -1817,7 +1815,6 @@
     JavaConsoleStream := Transcript.
     Java initAllStaticFields.
     Java markAllClassesUninitialized.
-
     ZipCache := OrderedCollection new.
     ZipEntryCache := OrderedCollection new.
     ZipInflaters := OrderedCollection new.
@@ -1827,10 +1824,12 @@
     "/ by resolver ... (sigh)
     
     JavaNativeMethod flushAllCachedNativeMethods.
-    JavaMethod allSubInstancesDo: 
-            [:m | 
+    JavaMethod 
+        allSubInstancesDo: [
+            :m | 
             m checked: false.
-            m code: nil. ].
+            m code: nil.
+        ].
     ObjectMemory flushCaches.
     
     "/ sigh - must flush inline caches.
@@ -1858,7 +1857,6 @@
     "
      JavaVM initialize.
      JavaVM initializeVM."
-
     "Created: / 03-01-1998 / 21:29:09 / cg"
     "Modified: / 14-12-1999 / 18:58:56 / cg"
     "Modified: / 15-10-2010 / 15:27:45 / Jan Kurs <kurs.jan@post.cz>"
@@ -2593,7 +2591,7 @@
 !
 
 javaStringObjectForString:string interned:intern 
-    self breakPoint:#mh info:'refactor my sender to use reflection directly'.
+    
     ^self reflection javaStringObjectForString:string interned:intern.
 
     "Created: / 22-11-2010 / 16:28:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -4812,34 +4810,32 @@
     "Created: / 10-12-2010 / 15:11:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-_java_lang_ClassLoader_defineClass1: nativeContext
-
+_java_lang_ClassLoader_defineClass1: nativeContext 
     <javanative: 'java/lang/ClassLoader' name: 'defineClass1'>
     "
-    private native Class defineClass1(String name, byte[] b, int off, int len,
-                                      ProtectionDomain pd, String source);
-    "
-    | name b off len pd source bs cls |
-    name :=  Java as_ST_String: (nativeContext argAt:1).
-    b := nativeContext argAt:2.
-    off := nativeContext argAt:3.
-    len := nativeContext argAt:4.
-    pd := nativeContext argAt:5.
-    source := Java as_ST_String: (nativeContext argAt:6).
-
-    bs := (off = 0 and: [len = b size]) 
-            ifTrue:[b readStream]
-            ifFalse:[(b copyFrom: off + 1 to: off + len) readStream].
-    [
-        cls := JavaClassReader readStream: bs loader: nativeContext receiver.
-    ] on: JavaClassReader invalidClassFormatSignal do:[
-        self throwClassFormatError.
-        ^self.
-    ].
+     private native Class defineClass1(String name, byte[] b, int off, int len,
+                                      ProtectionDomain pd, String source);"
+    
+    | className  b  off  len  pd  source  bs  cls |
+self breakPoint:#mh.
+    className := Java as_ST_String: (nativeContext argAt: 1).
+    b := nativeContext argAt: 2.
+    off := nativeContext argAt: 3.
+    len := nativeContext argAt: 4.
+    pd := nativeContext argAt: 5.
+    source := Java as_ST_String: (nativeContext argAt: 6).
+    bs := (off = 0 and: [ len = b size ]) ifTrue: [ b readStream ] ifFalse: [
+                (b copyFrom: off + 1 to: off + len) readStream
+            ].
+    [ cls := Java javaRegistry loadStream: bs loader: nativeContext receiver. ] 
+        on: JavaClassReader invalidClassFormatSignal
+        do: [
+    self throwClassFormatError.
+    ^ self.
+].
     cls classLoader: nativeContext receiver.
-    "FIXME: What to do with source?"
-
-    ^self reflection javaClassObjectForClass: cls.
+     "FIXME: What to do with source?"
+    ^ self reflection javaClassObjectForClass: cls.
 
     "Modified: / 31-08-2011 / 21:18:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -4847,17 +4843,14 @@
 _java_lang_ClassLoader_findBootstrapClass: nativeContext 
     <javanative: 'java/lang/ClassLoader' name: 'findBootstrapClass'>
     | nm  class |
-
+self breakPoint:#mh.
     nm := Java as_ST_String: (nativeContext argAt: 1).
-    class := JavaClassReader 
-                loadClassLazy: nm
-                classpath: Java release classPath
-                ignoring: Set new.
+    class := Java javaRegistry classForName: nm definedBy: nil.
     ^ class notNil 
         ifTrue: [ self reflection javaClassObjectForClass: class ]
-        ifFalse: [ self throwClassNotFoundException: nm ]
-
-    "Modified: / 18-10-2011 / 23:13:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+        ifFalse: [ self throwClassNotFoundException: nm ].
+
+    "Modified: / 08-09-2011 / 08:04:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_ClassLoader_findLoadedClass0: nativeContext
@@ -4888,52 +4881,53 @@
     "Created: / 09-11-2010 / 20:55:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-_java_lang_ClassLoader_resolveClass0: nativeContext
-
+_java_lang_ClassLoader_resolveClass0: nativeContext 
     <javanative: 'java/lang/ClassLoader' name: 'resolveClass0'>
-
     "resolve a new class as previously created by defineClass0"
     
-    |jClassLoader jCls cls anyUnresolved|
-
+    | jClassLoader  jCls  cls  anyUnresolved |
+
+    self breakPoint: #mh.
     jClassLoader := nativeContext receiver.
-    jCls := nativeContext argAt:1.
-    jCls isNil ifTrue:[
+    jCls := nativeContext argAt: 1.
+    jCls isNil ifTrue: [
         self halt.
         ^ nil
     ].
-    cls := self reflection classForJavaClassObject:jCls.
-    cls isNil ifTrue:[
+    cls := self reflection classForJavaClassObject: jCls.
+    cls isNil ifTrue: [
         self halt.
         ^ nil
     ].
-    JavaClassReader classLoaderQuerySignal answer:jClassLoader
-        do:[
-            JavaClassReader resolveClass:cls.
+    JavaClassReader classLoaderQuerySignal answer: jClassLoader
+        do: [self breakPoint:#mh. 
+        "correct this so it works with new resolving"
+            JavaClassReader resolveClass: cls.
             
 "/        JavaClassReader postLoadActions:true.
             
             anyUnresolved := false.
-            cls constantPool do:[:entry | 
-                (entry isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
-                    self halt:'debugHalt'.
+            cls constantPool do: [
+                :entry | 
+                (entry isMemberOf: JavaUnresolvedClassConstant) ifTrue: [
+                    self halt: 'debugHalt'.
                     entry preResolve.
-                    self halt:'debugHalt'.
+                    self halt: 'debugHalt'.
                     anyUnresolved := true.
                 ]
             ]
         ].
-    anyUnresolved ifTrue:[
-        jClassLoader notNil ifTrue:[
+    anyUnresolved ifTrue: [
+        jClassLoader notNil ifTrue: [
             "/ any unresolved left -> try resolving with standard loader
-            JavaClassReader classLoaderQuerySignal answer:nil
-                do:[
-                    JavaClassReader postLoadActions:true.
-                    cls constantPool do:[:entry | 
-                        (entry isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
-                            self halt:'debugHalt'.
+            JavaClassReader classLoaderQuerySignal answer: nil
+                do: [
+                    cls constantPool do: [
+                        :entry | 
+                        (entry isMemberOf: JavaUnresolvedClassConstant) ifTrue: [
+                            self halt: 'debugHalt'.
                             entry preResolve.
-                            self halt:'debugHalt'.
+                            self halt: 'debugHalt'.
                         ]
                     ]
                 ]
@@ -7275,65 +7269,33 @@
     "Created: / 27.1.2000 / 02:56:37 / cg"
 !
 
-_ClassLoader_defineClass0:nativeContext
+_ClassLoader_defineClass0: nativeContext 
     "create a new class from a given byteArray.
      Here, construct a stream on it and pass the work to the
      JavaClassReader."
-
-    |jClassLoader jName name data offset length inStream newClass
-     loaderStub jClass|
+    
+    | jClassLoader  jName  data  offset  length  inStream  newClass  jClass |
 
     jClassLoader := nativeContext receiver.
-    jName := nativeContext argAt:1.
-
-    "/ className is now optional ...
-"/    jName isNil ifTrue:[
-"/        self internalError:'nil name in defineClass'.
-"/        ^ nil
-"/    ] ifFalse:[
-"/        name := Java as_ST_String:jName.
-"/    ].
-
-    data := nativeContext argAt:2.
-    offset := nativeContext argAt:3.
-    length := nativeContext argAt:4.
-
+    jName := nativeContext argAt: 1.
+    data := nativeContext argAt: 2.
+    offset := nativeContext argAt: 3.
+    length := nativeContext argAt: 4.
     inStream := data readStream.
-    inStream position:offset + 1.
-    inStream readLimit:(offset + length).
-
-"/    loaderStub := Plug new.
-"/    loaderStub respondTo:#loadClass: with:[:clsName |
-"/                                                |jName|
-"/
-"/self halt.
-"/                                                jName := Java as_String:clsName.
-"/                                                "/ jClassLoader loadClass:jName
-"/                                                jClassLoader 
-"/                                                    perform:#'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
-"/                                                    with:jName.
-"/                                          ].
-
-"/    ('JAVA [info]: defining class ...') infoPrintCR.
-
-"/    self internalError:'break'.
-
-    newClass := JavaClassReader 
-                    readStream:inStream 
-                    loader:jClassLoader "loaderStub"
-                    loadUnresolved:false.
-
-    newClass isNil ifTrue:[
-        ('JAVA [info]: defineClass failed') infoPrintCR.
+    inStream position: offset + 1.
+    inStream readLimit: (offset + length).
+    newClass := JavaClassRegistry loadStream: inStream loader: jClassLoader.
+    newClass isNil ifTrue: [
+        Logger 
+            log: '_ClassLoader_defineClass0: was not able to read given class'
+            severity: #severe
+            facility: #JavaVM.
+        self breakPoint: #mh.
         ^ nil.
     ].
-"/    Transcript showCR:('defined class ' , newClass fullName , '.').
-    newClass classLoader:jClassLoader.
-
-"/    ('Java [info]: defined new class: ' , newClass fullName) infoPrintCR.
-
-    jClass := self javaClassObjectForClass:newClass.
-    ^ jClass
+    newClass classLoader: jClassLoader.
+    jClass := self javaClassObjectForClass: newClass.
+    ^ jClass.
 
     "Created: / 7.1.1998 / 12:35:10 / cg"
     "Modified: / 24.1.1998 / 15:26:21 / cg"
@@ -7441,50 +7403,53 @@
     "Created: / 27.1.1998 / 18:37:08 / cg"
 !
 
-_ClassLoader_resolveClass0:nativeContext 
+_ClassLoader_resolveClass0: nativeContext 
     "resolve a new class as previously created by defineClass0"
     
-    |jClassLoader jCls cls loaderStub anyUnresolved|
+    | jClassLoader  jCls  cls anyUnresolved |
 
     jClassLoader := nativeContext receiver.
-    jCls := nativeContext argAt:1.
-    jCls isNil ifTrue:[
+    jCls := nativeContext argAt: 1.
+    jCls isNil ifTrue: [
         self halt.
         ^ nil
     ].
-    cls := self reflection javaClassObjectForClass:jCls.
-    cls isNil ifTrue:[
+    cls := self reflection javaClassObjectForClass: jCls.
+    cls isNil ifTrue: [
         self halt.
         ^ nil
     ].
     ('JavaVM [info]: resolving class ' , cls fullName , ' ...') infoPrintCR.
-    JavaClassReader classLoaderQuerySignal answer:jClassLoader
-        do:[
-            JavaClassReader resolveClass:cls.
+    JavaClassReader classLoaderQuerySignal answer: jClassLoader
+        do: [
+        "correct this so it works with new resolving"
+        self breakPoint:#mh.
+            JavaClassReader resolveClass: cls.
             
 "/        JavaClassReader postLoadActions:true.
             
             anyUnresolved := false.
-            cls constantPool do:[:entry | 
-                (entry isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
-                    self halt:'debugHalt'.
+            cls constantPool do: [
+                :entry | 
+                (entry isMemberOf: JavaUnresolvedClassConstant) ifTrue: [
+                    self halt: 'debugHalt'.
                     entry preResolve.
-                    self halt:'debugHalt'.
+                    self halt: 'debugHalt'.
                     anyUnresolved := true.
                 ]
             ]
         ].
-    anyUnresolved ifTrue:[
-        jClassLoader notNil ifTrue:[
+    anyUnresolved ifTrue: [
+        jClassLoader notNil ifTrue: [
             "/ any unresolved left -> try resolving with standard loader
-            JavaClassReader classLoaderQuerySignal answer:nil
-                do:[
-                    JavaClassReader postLoadActions:true.
-                    cls constantPool do:[:entry | 
-                        (entry isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
-                            self halt:'debugHalt'.
+            JavaClassReader classLoaderQuerySignal answer: nil
+                do: [
+                    cls constantPool do: [
+                        :entry | 
+                        (entry isMemberOf: JavaUnresolvedClassConstant) ifTrue: [
+                            self halt: 'debugHalt'.
                             entry preResolve.
-                            self halt:'debugHalt'.
+                            self halt: 'debugHalt'.
                         ]
                     ]
                 ]
--- a/src/Make.proto	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/Make.proto	Wed Oct 19 16:18:27 2011 +0000
@@ -1,7 +1,7 @@
 # $Header$
 #
 # DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libjava at 2011-10-12 16:50:29.691.
+# automagically generated from the projectDefinition: stx_libjava at 2011-10-19 18:18:03.345.
 #
 # Warning: once you modify this file, do not rerun
 # stmkmp or projectDefinition-build again - otherwise, your changes are lost.
@@ -141,6 +141,7 @@
 $(OUTDIR)JavaBehavior.$(O) JavaBehavior.$(H): JavaBehavior.st $(INCLUDE_TOP)/stx/libbasic/Class.$(H) $(INCLUDE_TOP)/stx/libbasic/ClassDescription.$(H) $(INCLUDE_TOP)/stx/libbasic/Behavior.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaByteCodeProcessor.$(O) JavaByteCodeProcessor.$(H): JavaByteCodeProcessor.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaClassReader.$(O) JavaClassReader.$(H): JavaClassReader.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)JavaClassRegistry.$(O) JavaClassRegistry.$(H): JavaClassRegistry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaConstantPool.$(O) JavaConstantPool.$(H): JavaConstantPool.st $(INCLUDE_TOP)/stx/libbasic/Array.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaContext.$(O) JavaContext.$(H): JavaContext.st $(INCLUDE_TOP)/stx/libbasic/Context.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaDecompiler.$(O) JavaDecompiler.$(H): JavaDecompiler.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/src/Make.spec	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/Make.spec	Wed Oct 19 16:18:27 2011 +0000
@@ -1,7 +1,7 @@
 # $Header$
 #
 # DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libjava at 2011-10-12 16:50:29.262.
+# automagically generated from the projectDefinition: stx_libjava at 2011-10-19 18:18:02.921.
 #
 # Warning: once you modify this file, do not rerun
 # stmkmp or projectDefinition-build again - otherwise, your changes are lost.
@@ -166,6 +166,7 @@
 	JavaVoidTypeNode \
 	JavaInterfaceMethodRef2 \
 	JavaNativeMethod \
+	JavaClassRegistry \
 
 
 
@@ -287,6 +288,7 @@
     $(OUTDIR)JavaVoidTypeNode.$(O) \
     $(OUTDIR)JavaInterfaceMethodRef2.$(O) \
     $(OUTDIR)JavaNativeMethod.$(O) \
+    $(OUTDIR)JavaClassRegistry.$(O) \
     $(OUTDIR)extensions.$(O) \
 
 
--- a/src/abbrev.stc	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/abbrev.stc	Wed Oct 19 16:18:27 2011 +0000
@@ -17,7 +17,7 @@
 JavaClassReader JavaClassReader stx:libjava 'Languages-Java-Support' 0
 JavaClassReader2Tests JavaClassReader2Tests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
 JavaClassReaderTests JavaClassReaderTests stx:libjava 'Languages-Java-Tests' 1
-JavaClassRefTests JavaClassRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaClassRefTests JavaClassRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
 JavaConstantPool JavaConstantPool stx:libjava 'Languages-Java-Reader-Support' 0
 JavaContext JavaContext stx:libjava 'Languages-Java-Support' 0
 JavaDecompiler JavaDecompiler stx:libjava 'Languages-Java-Support-Decompiling' 0
@@ -27,20 +27,20 @@
 JavaExceptionTableEntry JavaExceptionTableEntry stx:libjava 'Languages-Java-Support' 0
 JavaExceptionThrowerMock JavaExceptionThrowerMock stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
 JavaField JavaField stx:libjava 'Languages-Java-Reader-Support' 0
-JavaFieldRefTests JavaFieldRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
-JavaInitializedResource JavaInitializedResource stx:libjava 'Languages-Java-Tests' 2
-JavaInterfaceMethodRefTests JavaInterfaceMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
-JavaJUnitTests JavaJUnitTests stx:libjava 'Languages-Java-Tests' 1
+JavaFieldRefTests JavaFieldRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaInitializedResource JavaInitializedResource stx:libjava 'Languages-Java-Tests' 0
+JavaInterfaceMethodRefTests JavaInterfaceMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaJUnitTests JavaJUnitTests stx:libjava 'Languages-Java-Tests' 0
 JavaJavadocNode JavaJavadocNode stx:libjava 'Languages-Java-AST' 0
 JavaLanguage JavaLanguage stx:libjava 'Languages-Java-Support' 1
 JavaLibraries JavaLibraries stx:libjava 'Languages-Java-Support' 0
-JavaLibrariesResource JavaLibrariesResource stx:libjava 'Languages-Java-Tests' 1
+JavaLibrariesResource JavaLibrariesResource stx:libjava 'Languages-Java-Tests' 0
 JavaLocalVariableTable JavaLocalVariableTable stx:libjava 'Languages-Java-Support' 0
 JavaLocalVariableTableEntry JavaLocalVariableTableEntry stx:libjava 'Languages-Java-Support' 0
 JavaLookup JavaLookup stx:libjava 'Languages-Java-Lookup' 0
 JavaMathSupport JavaMathSupport stx:libjava 'Languages-Java-Support-Native' 0
 JavaMethod JavaMethod stx:libjava 'Languages-Java-Classes' 0
-JavaMethodRefTests JavaMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaMethodRefTests JavaMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
 JavaNameAndType2 JavaNameAndType2 stx:libjava 'Languages-Java-Reader-Support-new' 0
 JavaNativeMemory JavaNativeMemory stx:libjava 'Languages-Java-Support' 0
 JavaNode JavaNode stx:libjava 'Languages-Java-AST' 0
@@ -48,35 +48,35 @@
 JavaObjectDictionary JavaObjectDictionary stx:libjava 'Languages-Java-Support' 0
 JavaPackage JavaPackage stx:libjava 'Languages-Java-Classes' 0
 JavaParseResult JavaParseResult stx:libjava 'Languages-Java-Parser' 0
-JavaParserNavigationTests JavaParserNavigationTests stx:libjava 'Languages-Java-Tests' 1
+JavaParserNavigationTests JavaParserNavigationTests stx:libjava 'Languages-Java-Tests' 0
 JavaParserTestCase JavaParserTestCase stx:libjava 'Languages-Java-Tests' 1
-JavaParserTests JavaParserTests stx:libjava 'Languages-Java-Tests' 1
+JavaParserTests JavaParserTests stx:libjava 'Languages-Java-Tests' 0
 JavaPopUpView JavaPopUpView stx:libjava 'Languages-Java-Views-Support' 2
 JavaProcess JavaProcess stx:libjava 'Languages-Java-Classes' 0
 JavaRef2 JavaRef2 stx:libjava 'Languages-Java-Reader-Support-new' 0
 JavaRefMock JavaRefMock stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
-JavaRefTests JavaRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaRefTests JavaRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
 JavaRelease JavaRelease stx:libjava 'Languages-Java-Support' 0
 JavaResolver JavaResolver stx:libjava 'Languages-Java-Reader-Support-new' 0
-JavaRuntimeConstantPoolTests JavaRuntimeConstantPoolTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
-JavaSelectorParserTests JavaSelectorParserTests stx:libjava 'Languages-Java-Lookup-Tests' 1
+JavaRuntimeConstantPoolTests JavaRuntimeConstantPoolTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaSelectorParserTests JavaSelectorParserTests stx:libjava 'Languages-Java-Lookup-Tests' 0
 JavaSlotIndexCache JavaSlotIndexCache stx:libjava 'Languages-Java-Support' 0
 JavaSourceCodeCache JavaSourceCodeCache stx:libjava 'Languages-Java-Support' 1
 JavaSourceFileWriter JavaSourceFileWriter stx:libjava 'Languages-Java-Support' 0
 JavaStartup JavaStartup stx:libjava 'Languages-Java-Support' 1
 JavaTestCaseProxy JavaTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
 JavaTestsLoader JavaTestsLoader stx:libjava 'Languages-Java-Tests' 0
-JavaTestsResource JavaTestsResource stx:libjava 'Languages-Java-Tests' 2
+JavaTestsResource JavaTestsResource stx:libjava 'Languages-Java-Tests' 0
 JavaTopView JavaTopView stx:libjava 'Languages-Java-Views-Support' 2
 JavaTypeBox JavaTypeBox stx:libjava 'Languages-Java-Types' 0
-JavaUTF8Tests JavaUTF8Tests stx:libjava 'Languages-Java-Tests' 1
+JavaUTF8Tests JavaUTF8Tests stx:libjava 'Languages-Java-Tests' 0
 JavaUnresolvedConstant JavaUnresolvedConstant stx:libjava 'Languages-Java-Reader-Support' 0
 JavaVM JavaVM stx:libjava 'Languages-Java-Support' 0
 JavaView JavaView stx:libjava 'Languages-Java-Views-Support' 2
 JavaZipSupport JavaZipSupport stx:libjava 'Languages-Java-Support' 0
-LookupIntegrationTests LookupIntegrationTests stx:libjava 'Languages-Java-Lookup-Tests' 1
-LookupIntegrationTestsResource LookupIntegrationTestsResource stx:libjava 'Languages-Java-Lookup-Tests' 3
-LookupTests LookupTests stx:libjava 'Languages-Java-Lookup-Tests' 1
+LookupIntegrationTests LookupIntegrationTests stx:libjava 'Languages-Java-Lookup-Tests' 0
+LookupIntegrationTestsResource LookupIntegrationTestsResource stx:libjava 'Languages-Java-Lookup-Tests' 0
+LookupTests LookupTests stx:libjava 'Languages-Java-Lookup-Tests' 0
 MessageDescription MessageDescription stx:libjava 'Languages-Java-Lookup' 0
 NoOpTypeBox NoOpTypeBox stx:libjava 'Languages-Java-Types' 0
 PPJavaNode PPJavaNode stx:libjava 'Languages-Java-AST' 0
@@ -88,8 +88,8 @@
 SmalltalkAppletContext SmalltalkAppletContext stx:libjava 'Languages-Java-Views-Support' 0
 SmalltalkAppletStub SmalltalkAppletStub stx:libjava 'Languages-Java-Views-Support' 0
 SmalltalkLookup SmalltalkLookup stx:libjava 'Languages-Java-Lookup' 0
-SmalltalkSelectorParserTests SmalltalkSelectorParserTests stx:libjava 'Languages-Java-Lookup-Tests' 1
-TestletTestCaseProxy TestletTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
+SmalltalkSelectorParserTests SmalltalkSelectorParserTests stx:libjava 'Languages-Java-Lookup-Tests' 0
+TestletTestCaseProxy TestletTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 0
 stx_libjava stx_libjava stx:libjava '* Projects & Packages *' 3
 JavaAnnotationArrayValue JavaAnnotationArrayValue stx:libjava 'Languages-Java-Reader-Support' 0
 JavaAnnotationClassValue JavaAnnotationClassValue stx:libjava 'Languages-Java-Reader-Support' 0
@@ -145,5 +145,6 @@
 JavaVoidTypeNode JavaVoidTypeNode stx:libjava 'Languages-Java-AST' 0
 JavaInterfaceMethodRef2 JavaInterfaceMethodRef2 stx:libjava 'Languages-Java-Reader-Support-new' 0
 JavaNativeMethod JavaNativeMethod stx:libjava 'Languages-Java-Classes' 0
-JavaClassLoadingTests JavaClassLoadingTests stx:libjava 'Languages-Java-Tests-ClassLoading' 1
-JavaFreshlyInitializedResource JavaFreshlyInitializedResource stx:libjava 'Languages-Java-Tests' 2
+JavaClassLoadingTests JavaClassLoadingTests stx:libjava 'Languages-Java-Tests-ClassLoading' 0
+JavaFreshlyInitializedResource JavaFreshlyInitializedResource stx:libjava 'Languages-Java-Tests' 0
+JavaClassRegistry JavaClassRegistry stx:libjava 'Languages-Java-Support' 0
--- a/src/bc.mak	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/bc.mak	Wed Oct 19 16:18:27 2011 +0000
@@ -1,7 +1,7 @@
 # $Header$
 #
 # DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libjava at 2011-10-12 16:50:29.912.
+# automagically generated from the projectDefinition: stx_libjava at 2011-10-19 18:18:03.565.
 #
 # Warning: once you modify this file, do not rerun
 # stmkmp or projectDefinition-build again - otherwise, your changes are lost.
@@ -99,6 +99,7 @@
 $(OUTDIR)JavaBehavior.$(O) JavaBehavior.$(H): JavaBehavior.st $(INCLUDE_TOP)\stx\libbasic\Class.$(H) $(INCLUDE_TOP)\stx\libbasic\ClassDescription.$(H) $(INCLUDE_TOP)\stx\libbasic\Behavior.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaByteCodeProcessor.$(O) JavaByteCodeProcessor.$(H): JavaByteCodeProcessor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaClassReader.$(O) JavaClassReader.$(H): JavaClassReader.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)JavaClassRegistry.$(O) JavaClassRegistry.$(H): JavaClassRegistry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaConstantPool.$(O) JavaConstantPool.$(H): JavaConstantPool.st $(INCLUDE_TOP)\stx\libbasic\Array.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaContext.$(O) JavaContext.$(H): JavaContext.st $(INCLUDE_TOP)\stx\libbasic\Context.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaDecompiler.$(O) JavaDecompiler.$(H): JavaDecompiler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/src/libInit.cc	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/libInit.cc	Wed Oct 19 16:18:27 2011 +0000
@@ -38,6 +38,7 @@
 _JavaBehavior_Init(pass,__pRT__,snd);
 _JavaByteCodeProcessor_Init(pass,__pRT__,snd);
 _JavaClassReader_Init(pass,__pRT__,snd);
+_JavaClassRegistry_Init(pass,__pRT__,snd);
 _JavaConstantPool_Init(pass,__pRT__,snd);
 _JavaContext_Init(pass,__pRT__,snd);
 _JavaDecompiler_Init(pass,__pRT__,snd);
--- a/src/libjava.rc	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/libjava.rc	Wed Oct 19 16:18:27 2011 +0000
@@ -23,7 +23,7 @@
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011\nCopyright Jan Vrany, Jan Kurs and Marcel Hlopko\b          SWING Research Group, Czech Technical University In Prague\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.1.1\0"
-      VALUE "ProductDate", "Wed, 12 Oct 2011 14:50:33 GMT\0"
+      VALUE "ProductDate", "Wed, 19 Oct 2011 16:18:05 GMT\0"
     END
 
   END
--- a/src/stx_libjava.st	Wed Oct 19 15:21:57 2011 +0000
+++ b/src/stx_libjava.st	Wed Oct 19 16:18:27 2011 +0000
@@ -205,17 +205,17 @@
 
     ^ #(
         #'squeak:petitparser'    "PPDelegateParser - superclass of JavaParser "
-        #'stx:goodies/sunit'    "TestCase - superclass of AbstractJavaTestCase "
-        #'stx:libbasic'    "Dictionary - superclass of JavaAnnotationDictionary "
-        #'stx:libbasic2'    "BitArray - superclass of extended BooleanArray "
+        #'stx:goodies/sunit'    "TestAsserter - superclass of JavaByteCodeProcessorTests "
+        #'stx:libbasic'    "Number - superclass of Byte "
+        #'stx:libbasic2'    "UnboxedIntegerArray - superclass of extended SignedIntegerArray "
         #'stx:libbasic3'    "MessageTracer - referenced by JavaMethod>>setBreakPoint "
         #'stx:libcomp'    "ObjectFileLoader - referenced by JavaVM class>>_Runtime_loadFileInternalI: "
         #'stx:libhtml'    "URL - referenced by JavaEmbeddedFrameView>>setupAppletFrameIn:initializeJava: "
         #'stx:libtool'    "WorkspaceApplication - referenced by JavaEvaluator>>evaluate:in:receiver:notifying:logged:ifFail: "
-        #'stx:libview'    "DeviceGraphicsContext - superclass of JavaPopUpView "
-        #'stx:libview2'    "Plug - referenced by JavaSourceCodeCache>>findMethodLine:inMethods: "
-        #'stx:libwidg'    "GenericToolbarIconLibrary - extended "
-        #'stx:libwidg2'    "CheckBox - referenced by JavaVM class>>_WCheckboxPeer_create: "
+        #'stx:libview'    "SimpleView - superclass of JavaTopView "
+        #'stx:libview2'    "GIFReader - referenced by JavaVM class>>_GifImageDecoder_parseImage: "
+        #'stx:libwidg'    "Label - referenced by JavaVM class>>_WLabelPeer_create: "
+        #'stx:libwidg2'    "MenuPanel - referenced by JavaVM class>>processEvent: "
     )
 ! !
 
@@ -451,6 +451,7 @@
         JavaNativeMethod
         (JavaClassLoadingTests autoload)
         (JavaFreshlyInitializedResource autoload)
+        JavaClassRegistry
     )
 !
 
@@ -601,7 +602,7 @@
     "Return a SVN revision number of myself.
      This number is updated after a commit"
 
-    ^ "$SVN-Revision:"'1372'"$"
+    ^ "$SVN-Revision:"'1375'"$"
 ! !
 
 !stx_libjava class methodsFor:'file generation'!