introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
--- 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'!