Introduced a JavaClassEnvironment - an abstract namespace-like class to keep Java classes.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 11 Apr 2014 18:20:50 +0200
changeset 3072 f22d5febda61
parent 3069 a29506c02dcc
child 3073 f44978fc1abd
Introduced a JavaClassEnvironment - an abstract namespace-like class to keep Java classes. It implements a protocol of Smalltalk and NameSpace so it can act as an environment for class browsers.
JavaClassEnvironment.st
JavaClassRegistry.st
Make.proto
Make.spec
abbrev.stc
bc.mak
libInit.cc
stx_libjava.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/JavaClassEnvironment.st	Fri Apr 11 18:20:50 2014 +0200
@@ -0,0 +1,468 @@
+"
+ COPYRIGHT (c) 1996-2011 by Claus Gittinger
+
+ New code and modifications done at SWING Research Group [1]:
+
+ COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
+                            SWING Research Group, Czech Technical University in Prague
+
+ 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.
+
+ [1] Code written at SWING Research Group contains a signature
+     of one of the above copright owners. For exact set of such code,
+     see the differences between this version and version stx:libjava
+     as of 1.9.2010
+"
+"{ Package: 'stx:libjava' }"
+
+Object subclass:#JavaClassEnvironment
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Languages-Java-Support'
+!
+
+!JavaClassEnvironment class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1996-2011 by Claus Gittinger
+
+ New code and modifications done at SWING Research Group [1]:
+
+ COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
+                            SWING Research Group, Czech Technical University in Prague
+
+ 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.
+
+ [1] Code written at SWING Research Group contains a signature
+     of one of the above copright owners. For exact set of such code,
+     see the differences between this version and version stx:libjava
+     as of 1.9.2010
+
+"
+!
+
+documentation
+"
+    JavaClassEnvironment is an abstract base class that keeps
+    java classes. It implements 'system environment' protocol
+    so it can act as an environment for JBrowser (or Tools::NewSystemBrowser).
+
+    To open a browser on given environment do
+
+    JBrowser new
+        allButOpen;
+        environment: givenJavaEnvironment;
+        open.
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+
+"
+! !
+
+!JavaClassEnvironment class methodsFor:'testing'!
+
+isAbstract
+    ^ self == JavaClassEnvironment
+! !
+
+!JavaClassEnvironment methodsFor:'accessing'!
+
+at: key 
+    ^ self at: key ifAbsent:[nil]
+
+    "Created: / 03-09-2013 / 17:02:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+at:aSymbol ifAbsent:aBlock
+    ^ self allClassesDo:[:cls|
+        cls name == aSymbol ifTrue:[ ^ cls ].
+    ].
+
+    "Created: / 03-09-2013 / 17:02:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-09-2013 / 12:53:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+at: key put: value
+    ^ self shouldNotImplement
+
+    "Created: / 03-09-2013 / 17:02:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-09-2013 / 12:20:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaClassEnvironment methodsFor:'enumerating'!
+
+allBehaviorsDo:aBlock
+    "evaluate the argument, aBlock for all classes and metaclasses in the system"
+
+    self allClassesAndMetaclassesDo:aBlock
+
+    "
+     Smalltalk allBehaviorsDo:[:aClass | aClass name printCR]
+    "
+!
+
+allClassCategories
+    "return a set of all class categories in the system"
+
+    |allCategories|
+
+    allCategories := Set new.
+    Smalltalk allClassesDo:[:cls |
+	|category|
+
+	category := cls category.
+	category notNil ifTrue:[
+	    allCategories add:category.
+	].
+    ].
+
+    ^ allCategories.
+
+    "
+     Smalltalk allClassCategories
+    "
+
+    "Created: / 17.11.2001 / 12:13:09 / cg"
+!
+
+allClassesAndMetaclassesDo:aBlock
+    "evaluate the argument, aBlock for all classes and metaclasses in the system."
+
+    |already|
+
+    already := IdentitySet new:NumberOfClassesHint*2.
+    self allClassesDo:[:eachClass |
+	|cls|
+
+	cls := eachClass theNonMetaclass.
+	(already includes:cls) ifFalse:[
+	    aBlock value:cls.
+	    already add:cls.
+	].
+	cls := cls class.
+	(already includes:cls) ifFalse:[
+	    aBlock value:cls.
+	    already add:cls.
+	].
+    ].
+!
+
+allClassesDo:aBlock
+    "evaluate the argument, aBlock for all classes in the system."
+
+    self subclassResponsibility
+
+    "
+     Smalltalk allClassesDo:[:aClass | aClass name printCR]
+    "
+
+    "Modified: / 04-09-2013 / 12:19:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+allClassesForWhich:filter
+    "return a collection with all classes in the system,
+     for which filter evaluates to true."
+
+    |collectedClasses|
+
+    collectedClasses := OrderedCollection new.
+    self allClassesForWhich:filter do:[:cls |
+	collectedClasses add:cls
+    ].
+    ^ collectedClasses
+
+    "
+     Smalltalk
+	allClassesForWhich:[:cls | cls name startsWith:'Po']
+    "
+
+    "Created: / 10-08-2006 / 12:11:31 / cg"
+!
+
+allClassesForWhich:filter do:aBlock
+    "evaluate the argument, aBlock for all classes in the system, for which filter evaluates to true."
+
+    self allClassesDo:[:cls |
+	(filter value:cls) ifTrue:[ aBlock value:cls ].
+    ].
+
+    "
+     Smalltalk
+	allClassesForWhich:[:cls | cls name startsWith:'Po']
+	do:[:aClass | Transcript showCR:aClass name]
+    "
+!
+
+allClassesInCategory:aCategory
+    "return a collection of for all classes in aCategory;
+     The order of the classes is not defined."
+
+    ^ self allClassesForWhich:[:cls | cls category = aCategory]
+
+    "
+     Smalltalk allClassesInCategory:'Views-Basic'
+    "
+
+    "Modified: / 10-08-2006 / 12:13:32 / cg"
+!
+
+allClassesInCategory:aCategory do:aBlock
+    "evaluate the argument, aBlock for all classes in the aCategory;
+     The order of the classes is not defined."
+
+    aCategory notNil ifTrue:[
+	self allClassesForWhich:[:cls | cls category = aCategory] do:aBlock
+    ]
+
+    "
+     Smalltalk allClassesInCategory:'Views-Basic' do:[:aClass | Transcript showCR:aClass]
+    "
+
+    "Modified: / 09-08-2006 / 17:18:50 / fm"
+!
+
+allClassesInCategory:aCategory inOrderDo:aBlock
+    "evaluate the argument, aBlock for all classes in aCategory;
+     superclasses come first - then subclasses"
+
+    |classes|
+
+    aCategory notNil ifTrue:[
+	classes := OrderedCollection new.
+	self allClassesInCategory:aCategory do:[:aClass |
+	    classes add:aClass
+	].
+	classes topologicalSort:[:a :b | b isSubclassOf:a].
+	classes do:aBlock
+    ]
+
+    "
+     Smalltalk allClassesInCategory:'Views-Basic' inOrderDo:[:aClass | aClass name printCR]
+    "
+
+    "Modified: / 17.11.2001 / 12:18:15 / cg"
+!
+
+allClassesInOrderDo:aBlock
+    "evaluate the argument, aBlock for all classes in the system;
+     Evaluation order is by inheritance: superclasses come first."
+
+    |already|
+
+    already := IdentitySet new:NumberOfClassesHint.
+    self allClassesDo:[:eachClass |
+	(already includes:eachClass) ifFalse:[
+	    eachClass allSuperclasses reverseDo:[:eachSuperClass |
+		(already includes:eachSuperClass) ifFalse:[
+		    already add:eachSuperClass.
+		    aBlock value:eachSuperClass.
+		].
+	    ].
+	    already add:eachClass.
+	    aBlock value:eachClass.
+	]
+    ].
+
+    "
+     Smalltalk allClassesInOrderDo:[:aClass | Transcript showCR:aClass name]
+    "
+!
+
+allClassesInPackage:aPackageID
+    "evaluate the argument, aBlock for all classes a package;
+     The order of the classes is not defined.
+     The returned collection may include private classes"
+
+    ^ self allClassesForWhich:[:cls | cls package = aPackageID]
+
+    "
+     Smalltalk allClassesInPackage:'bosch:dapasx'
+    "
+
+    "Created: / 10-08-2006 / 12:14:10 / cg"
+    "Modified: / 12-10-2006 / 23:48:43 / cg"
+!
+
+allClassesInPackage:aPackageID do:aBlock
+    "evaluate the argument, aBlock for all classes a package;
+     The order of the classes is not defined."
+
+    ^ self allClassesForWhich:[:cls | cls package = aPackageID] do:aBlock
+
+    "
+     Smalltalk allClassesInPackage:'bosch:dapasx' do:[:aClass | Transcript showCR:aClass]
+    "
+
+    "Created: / 09-08-2006 / 17:14:17 / fm"
+!
+
+allKeysDo:aBlock
+    "evaluate the argument, aBlock for all keys in the Smalltalk dictionary"
+
+    ^ self keysDo:aBlock
+!
+
+allMethodCategories
+    "return a set of all method-categories (protocols) in the system"
+
+    |allCategories|
+
+    allCategories := Set new.
+    Smalltalk allClassesDo:[:cls |
+	allCategories addAll:cls categories.
+    ].
+
+    ^ allCategories.
+
+    "
+     Smalltalk allMethodCategories
+    "
+!
+
+allMethodsDo:aBlock
+    "enumerate all methods in all classes"
+
+    Smalltalk allClassesDo:[:eachClass |
+	eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+	    aBlock value:mthd
+	]
+    ].
+!
+
+allMethodsForWhich:aBlock
+    "return a collection of methods for which aBlock returns true"
+
+    |coll|
+
+    coll := OrderedCollection new.
+    Smalltalk allClassesDo:[:eachClass |
+	eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+	    (aBlock value:mthd) ifTrue:[
+		coll add:mthd
+	    ].
+	]
+    ].
+    ^ coll
+!
+
+allMethodsWithSelectorDo:aTwoArgBlock
+    "enumerate all methods in all classes and evaluate aBlock
+     with method and selector as arguments."
+
+    Smalltalk allClassesDo:[:eachClass |
+	eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+	    aTwoArgBlock value:mthd value:sel
+	]
+    ].
+!
+
+associationsDo:aBlock
+    "evaluate the argument, aBlock for all key/value pairs
+     in the Smalltalk dictionary"
+
+    self keysDo:[:aKey |
+	aBlock value:(aKey -> (self at:aKey))
+    ]
+
+    "Smalltalk associationsDo:[:assoc | assoc printCR]"
+!
+
+keysAndValuesDo: block
+    self allClassesDo:[:cls|
+        block value: cls name value: cls
+    ].
+
+    "Smalltalk associationsDo:[:assoc | assoc printCR]"
+
+    "Created: / 03-09-2013 / 16:54:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-09-2013 / 12:19:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+keysAndValuesSelect:selectBlockWith2Args thenCollect:collectBlockWith2Args
+    |collected|
+
+    collected := OrderedCollection new.
+    self keysAndValuesDo:[:eachKey :eachValue |
+	(selectBlockWith2Args value:eachKey value:eachValue) ifTrue:[
+	    collected add:(collectBlockWith2Args value:eachKey value:eachValue)
+	].
+    ].
+    ^ collected
+
+    "
+     Smalltalk
+	keysAndValuesSelect:[:nm :val | (nm startsWith:'Ab') and:[val notNil]]
+	thenCollect:[:nm :val | nm]
+    "
+!
+
+keysDo:aBlock
+    "evaluate the argument, aBlock for all keys in the Smalltalk dictionary"
+
+    ^self keysAndValuesDo:[:key :value|
+        aBlock value: key
+    ]
+
+    "Created: / 03-09-2013 / 16:55:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaClassEnvironment methodsFor:'queries'!
+
+allClasses
+    "return an unordered collection of all classes in the system.
+     Only globally anchored classes are returned
+     (i.e. anonymous ones have to be aquired by Behavior allSubInstances)"
+
+    |classes|
+
+    classes := IdentitySet new:100.
+    self allClassesDo:[:cls | classes add: cls ].
+    ^ classes
+
+    "
+     CachedClasses := nil.
+     Smalltalk allClasses
+
+    to get the list sorted by name:
+
+     Smalltalk allClasses asSortedCollection:[:a :b | a name < b name]
+    "
+
+    "Modified: / 06-12-2011 / 12:41:42 / cg"
+    "Modified: / 04-09-2013 / 12:18:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+allClassesAndMetaclasses
+    "return an unordered collection of all classes with their metaclasses in the system."
+
+    |classes|
+
+    classes := IdentitySet new:100.
+    self allClassesDo:[:eachClass |
+        classes add:(eachClass theNonMetaclass).
+        classes add:(eachClass theMetaclass).
+    ].
+    ^ classes
+
+    "Modified: / 04-09-2013 / 12:18:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/JavaClassRegistry.st	Thu Apr 10 09:04:48 2014 +0200
+++ b/JavaClassRegistry.st	Fri Apr 11 18:20:50 2014 +0200
@@ -20,7 +20,7 @@
 "
 "{ Package: 'stx:libjava' }"
 
-Object subclass:#JavaClassRegistry
+JavaClassEnvironment subclass:#JavaClassRegistry
 	instanceVariableNames:'vm loaders notifier lock'
 	classVariableNames:''
 	poolDictionaries:'JavaVMData'
--- a/Make.proto	Thu Apr 10 09:04:48 2014 +0200
+++ b/Make.proto	Fri Apr 11 18:20:50 2014 +0200
@@ -179,6 +179,7 @@
 $(OUTDIR)JavaByte.$(O) JavaByte.$(H): JavaByte.st $(INCLUDE_TOP)/stx/libbasic/ArithmeticValue.$(H) $(INCLUDE_TOP)/stx/libbasic/Integer.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Number.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaByteCodeProcessor.$(O) JavaByteCodeProcessor.$(H): JavaByteCodeProcessor.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaClassAccessor.$(O) JavaClassAccessor.$(H): JavaClassAccessor.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)JavaClassEnvironment.$(O) JavaClassEnvironment.$(H): JavaClassEnvironment.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaClassQuery.$(O) JavaClassQuery.$(H): JavaClassQuery.st $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Query.$(H) $(STCHDR)
 $(OUTDIR)JavaClassReloader.$(O) JavaClassReloader.$(H): JavaClassReloader.st $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)JavaCodeLibraryOrBundle.$(O) JavaCodeLibraryOrBundle.$(H): JavaCodeLibraryOrBundle.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -246,7 +247,7 @@
 $(OUTDIR)JavaClassMemberRef2.$(O) JavaClassMemberRef2.$(H): JavaClassMemberRef2.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaRef2.$(H) $(STCHDR)
 $(OUTDIR)JavaClassReader.$(O) JavaClassReader.$(H): JavaClassReader.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaConstants.$(H) $(STCHDR)
 $(OUTDIR)JavaClassRef2.$(O) JavaClassRef2.$(H): JavaClassRef2.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaRef2.$(H) $(STCHDR)
-$(OUTDIR)JavaClassRegistry.$(O) JavaClassRegistry.$(H): JavaClassRegistry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaVMData.$(H) $(STCHDR)
+$(OUTDIR)JavaClassRegistry.$(O) JavaClassRegistry.$(H): JavaClassRegistry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaClassEnvironment.$(H) $(INCLUDE_TOP)/stx/libjava/JavaVMData.$(H) $(STCHDR)
 $(OUTDIR)JavaCodeBundle.$(O) JavaCodeBundle.$(H): JavaCodeBundle.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaCodeLibraryOrBundle.$(H) $(STCHDR)
 $(OUTDIR)JavaCodeLibrary.$(O) JavaCodeLibrary.$(H): JavaCodeLibrary.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaCodeLibraryOrBundle.$(H) $(STCHDR)
 $(OUTDIR)JavaEmbeddedFrameView.$(O) JavaEmbeddedFrameView.$(H): JavaEmbeddedFrameView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libjava/JavaView.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(STCHDR)
--- a/Make.spec	Thu Apr 10 09:04:48 2014 +0200
+++ b/Make.spec	Fri Apr 11 18:20:50 2014 +0200
@@ -64,6 +64,7 @@
 	JavaByte \
 	JavaByteCodeProcessor \
 	JavaClassAccessor \
+	JavaClassEnvironment \
 	JavaClassQuery \
 	JavaClassReloader \
 	JavaCodeLibraryOrBundle \
@@ -200,6 +201,7 @@
     $(OUTDIR_SLASH)JavaByte.$(O) \
     $(OUTDIR_SLASH)JavaByteCodeProcessor.$(O) \
     $(OUTDIR_SLASH)JavaClassAccessor.$(O) \
+    $(OUTDIR_SLASH)JavaClassEnvironment.$(O) \
     $(OUTDIR_SLASH)JavaClassQuery.$(O) \
     $(OUTDIR_SLASH)JavaClassReloader.$(O) \
     $(OUTDIR_SLASH)JavaCodeLibraryOrBundle.$(O) \
--- a/abbrev.stc	Thu Apr 10 09:04:48 2014 +0200
+++ b/abbrev.stc	Fri Apr 11 18:20:50 2014 +0200
@@ -3,7 +3,6 @@
 # it provides information about a classes filename, category and especially namespace.
 GroovyCompiler GroovyCompiler stx:libjava 'Languages-Groovy-Compiler' 0
 GroovyEvaluator GroovyEvaluator stx:libjava 'Languages-Groovy-Compiler' 0
-GroovyEvaluatorTests GroovyEvaluatorTests stx:libjava 'Languages-Groovy-Tests' 1
 GroovyLanguage GroovyLanguage stx:libjava 'Languages-Groovy-Support' 1
 GroovySourceFileWriter GroovySourceFileWriter stx:libjava 'Languages-Groovy-Support' 0
 JavaAnnotation JavaAnnotation stx:libjava 'Languages-Java-Reader-Support' 0
@@ -11,14 +10,12 @@
 JavaAnnotationDefault JavaAnnotationDefault stx:libjava 'Languages-Java-Annotations' 1
 JavaAnnotationDictionary JavaAnnotationDictionary stx:libjava 'Languages-Java-Annotations' 1
 JavaAnnotationValue JavaAnnotationValue stx:libjava 'Languages-Java-Reader-Support' 0
-JavaAntProjectResource JavaAntProjectResource stx:libjava 'Languages-Java-Tests' 2
 JavaArray JavaArray stx:libjava 'Languages-Java-Classes' 1
 JavaBooleanArray JavaBooleanArray stx:libjava 'Languages-Java-Support' 0
 JavaByte JavaByte stx:libjava 'Languages-Java-Support' 0
 JavaByteCodeProcessor JavaByteCodeProcessor stx:libjava 'Languages-Java-Bytecode' 0
-JavaByteCodeProcessorTests JavaByteCodeProcessorTests stx:libjava 'Languages-Java-Tests' 1
 JavaClassAccessor JavaClassAccessor stx:libjava 'Languages-Java-Classes' 0
-JavaClassLoadingTests JavaClassLoadingTests stx:libjava 'Languages-Java-Tests-ClassLoading' 1
+JavaClassEnvironment JavaClassEnvironment stx:libjava 'Languages-Java-Support' 0
 JavaClassQuery JavaClassQuery stx:libjava 'Languages-Java-Classes' 1
 JavaClassReloader JavaClassReloader stx:libjava 'Languages-Java-Support' 0
 JavaCodeLibraryOrBundle JavaCodeLibraryOrBundle stx:libjava 'Languages-Java-Support-Libraries' 0
@@ -31,26 +28,18 @@
 JavaDescriptor JavaDescriptor stx:libjava 'Languages-Java-Support' 0
 JavaError JavaError stx:libjava 'Languages-Java-Support' 1
 JavaExceptionTable JavaExceptionTable stx:libjava 'Languages-Java-Support' 0
-JavaExceptionTests JavaExceptionTests stx:libjava 'Languages-Java-Tests' 1
 JavaField JavaField stx:libjava 'Languages-Java-Reader-Support' 0
 JavaFinalizationRegistry JavaFinalizationRegistry stx:libjava 'Languages-Java-Support' 0
-JavaFreshlyInitializedResource JavaFreshlyInitializedResource stx:libjava 'Languages-Java-Tests' 1
 JavaInnerClasses JavaInnerClasses stx:libjava 'Languages-Java-Support' 0
-JavaJUnitTests JavaJUnitTests stx:libjava 'Languages-Java-Tests-Libraries' 1
 JavaLanguage JavaLanguage stx:libjava 'Languages-Java-Support' 1
 JavaLibraries JavaLibraries stx:libjava 'Languages-Java-Support' 0
-JavaLibrariesResource JavaLibrariesResource stx:libjava 'Languages-Java-Tests' 1
 JavaLocalVariableTable JavaLocalVariableTable stx:libjava 'Languages-Java-Support' 0
 JavaLocalVariableTableEntry JavaLocalVariableTableEntry stx:libjava 'Languages-Java-Support' 0
 JavaLookup JavaLookup stx:libjava 'Languages-Java-Interop' 0
-JavaLookupResolutionAlgorithmTests JavaLookupResolutionAlgorithmTests stx:libjava 'Languages-Java-Tests-Interop' 1
-JavaLookupTests JavaLookupTests stx:libjava 'Languages-Java-Tests-Interop' 1
 JavaMetaclass JavaMetaclass stx:libjava 'Languages-Java-Classes' 0
 JavaMonitor JavaMonitor stx:libjava 'Languages-Java-Support' 0
-JavaMonitorsTests JavaMonitorsTests stx:libjava 'Languages-Java-Tests' 1
 JavaNameAndType2 JavaNameAndType2 stx:libjava 'Languages-Java-Reader-Support-new' 0
 JavaNativeMemory JavaNativeMemory stx:libjava 'Languages-Java-Support' 0
-JavaNativeMemoryTests JavaNativeMemoryTests stx:libjava 'Languages-Java-Tests' 1
 JavaNioSupport JavaNioSupport stx:libjava 'Languages-Java-Support-Native' 0
 JavaObject JavaObject stx:libjava 'Languages-Java-Classes' 0
 JavaObjectDictionary JavaObjectDictionary stx:libjava 'Languages-Java-Support' 0
@@ -58,19 +47,15 @@
 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
-JavaRefsAndConstantPoolTestCase JavaRefsAndConstantPoolTestCase stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
 JavaRelease JavaRelease stx:libjava 'Languages-Java-Support' 1
-JavaReleaseTests JavaReleaseTests stx:libjava 'Languages-Java-Tests' 1
 JavaResolver JavaResolver stx:libjava 'Languages-Java-Reader-Support-new' 0
 JavaShort JavaShort stx:libjava 'Languages-Java-Support' 0
 JavaSlotIndexCache JavaSlotIndexCache stx:libjava 'Languages-Java-Support' 0
 JavaSocket JavaSocket stx:libjava 'Languages-Java-Support' 0
 JavaSourceCodeCache JavaSourceCodeCache stx:libjava 'Languages-Java-Support' 1
 JavaSourceFileWriter JavaSourceFileWriter stx:libjava 'Languages-Java-Support' 0
-JavaTestCaseProxy JavaTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
 JavaTestsLoader JavaTestsLoader stx:libjava 'Languages-Java-Tests' 0
 JavaTopView JavaTopView stx:libjava 'Languages-Java-Views-Support' 2
-JavaUTF8Tests JavaUTF8Tests stx:libjava 'Languages-Java-Tests' 1
 JavaUnresolvedCompilationError JavaUnresolvedCompilationError stx:libjava 'Languages-Java-Support' 1
 JavaUnresolvedConstant JavaUnresolvedConstant stx:libjava 'Languages-Java-Reader-Support' 0
 JavaUtilities JavaUtilities stx:libjava 'Languages-Java-Utilities' 0
@@ -84,7 +69,6 @@
 SmalltalkAppletStub SmalltalkAppletStub stx:libjava 'Languages-Java-Views-Support' 0
 stx_libjava stx_libjava stx:libjava '* Projects & Packages *' 3
 GroovyMetaclass GroovyMetaclass stx:libjava 'Languages-Groovy-Classes' 0
-JUnitTestCaseProxy JUnitTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
 Java Java stx:libjava 'Languages-Java-Support' 0
 JavaAnnotationArrayValue JavaAnnotationArrayValue stx:libjava 'Languages-Java-Reader-Support' 0
 JavaAnnotationClassValue JavaAnnotationClassValue stx:libjava 'Languages-Java-Reader-Support' 0
@@ -93,15 +77,12 @@
 JavaAnnotationPrimitiveValue JavaAnnotationPrimitiveValue stx:libjava 'Languages-Java-Reader-Support' 0
 JavaBehavior JavaBehavior stx:libjava 'Languages-Java-Classes' 0
 JavaByteCodeDisassembler JavaByteCodeDisassembler stx:libjava 'Languages-Java-Bytecode' 0
-JavaByteCodeDisassemblerTests JavaByteCodeDisassemblerTests stx:libjava 'Languages-Java-Tests' 1
 JavaByteCodeEnumerator JavaByteCodeEnumerator stx:libjava 'Languages-Java-Support-Decompiling' 0
 JavaByteCodeProcessorAdapter JavaByteCodeProcessorAdapter stx:libjava 'Languages-Java-Bytecode' 0
 JavaClassAnnotationContainer JavaClassAnnotationContainer stx:libjava 'Languages-Java-Annotations' 1
 JavaClassMemberRef2 JavaClassMemberRef2 stx:libjava 'Languages-Java-Reader-Support-new' 0
 JavaClassReader JavaClassReader stx:libjava 'Languages-Java-Support' 0
-JavaClassReaderTests JavaClassReaderTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
 JavaClassRef2 JavaClassRef2 stx:libjava 'Languages-Java-Reader-Support-new' 0
-JavaClassRefTests JavaClassRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
 JavaClassRegistry JavaClassRegistry stx:libjava 'Languages-Java-Support' 0
 JavaCodeBundle JavaCodeBundle stx:libjava 'Languages-Java-Support-Libraries' 0
 JavaCodeLibrary JavaCodeLibrary stx:libjava 'Languages-Java-Support-Libraries' 0
@@ -109,20 +90,13 @@
 JavaFieldAnnotationContainer JavaFieldAnnotationContainer stx:libjava 'Languages-Java-Annotations' 1
 JavaFieldDescriptor JavaFieldDescriptor stx:libjava 'Languages-Java-Support' 0
 JavaFieldDescriptorWithUnionType JavaFieldDescriptorWithUnionType stx:libjava 'Languages-Java-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
 JavaInvalidRefError JavaInvalidRefError stx:libjava 'Languages-Java-Support' 1
 JavaMethod JavaMethod stx:libjava 'Languages-Java-Classes' 0
 JavaMethodAnnotationContainer JavaMethodAnnotationContainer stx:libjava 'Languages-Java-Annotations' 1
 JavaMethodDescriptor JavaMethodDescriptor stx:libjava 'Languages-Java-Support' 0
-JavaMethodRefTests JavaMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
 JavaMirror JavaMirror stx:libjava 'Languages-Java-Classes' 0
 JavaNativeMethodImpl_OpenJDK6 JavaNativeMethodImpl_OpenJDK6 stx:libjava 'Languages-Java-Support-Java 6' 0
-JavaRefMock JavaRefMock stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
-JavaRuntimeConstantPoolTests JavaRuntimeConstantPoolTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
 JavaStringRef2 JavaStringRef2 stx:libjava 'Languages-Java-Reader-Support-new' 0
-JavaTestsResource JavaTestsResource stx:libjava 'Languages-Java-Tests' 2
 JavaUnhandledExceptionError JavaUnhandledExceptionError stx:libjava 'Languages-Java-Support' 1
 JavaUnresolvedClassConstant JavaUnresolvedClassConstant stx:libjava 'Languages-Java-Reader-Support' 0
 JavaUnresolvedStringConstant JavaUnresolvedStringConstant stx:libjava 'Languages-Java-Reader-Support' 0
@@ -131,7 +105,6 @@
 ProxyMethodGuardNode ProxyMethodGuardNode stx:libjava 'System-Compiler-Interop' 0
 ProxyMethodInvocationNode ProxyMethodInvocationNode stx:libjava 'System-Compiler-Interop' 0
 ProxyMethodJavaFieldAccessor ProxyMethodJavaFieldAccessor stx:libjava 'Languages-Java-Interop' 0
-TestletTestCaseProxy TestletTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
 JavaAlienMirror JavaAlienMirror stx:libjava 'Languages-Java-Classes' 0
 JavaArrayMirror JavaArrayMirror stx:libjava 'Languages-Java-Classes' 0
 JavaByteCodePreresolver JavaByteCodePreresolver stx:libjava 'Languages-Java-Bytecode' 0
@@ -160,3 +133,31 @@
 ProxyMethodJavaTypeCheckNode ProxyMethodJavaTypeCheckNode stx:libjava 'Languages-Java-Interop' 0
 JavaNativeMethod JavaNativeMethod stx:libjava 'Languages-Java-Classes' 0
 JavaNativeMethodImpl_OracleJDK8 JavaNativeMethodImpl_OracleJDK8 stx:libjava 'Languages-Java-Support-Java 8' 0
+GroovyEvaluatorTests GroovyEvaluatorTests stx:libjava 'Languages-Groovy-Tests' 1
+JUnitTestCaseProxy JUnitTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
+JavaAntProjectResource JavaAntProjectResource stx:libjava 'Languages-Java-Tests' 2
+JavaByteCodeDisassemblerTests JavaByteCodeDisassemblerTests stx:libjava 'Languages-Java-Tests' 0
+JavaByteCodeProcessorTests JavaByteCodeProcessorTests stx:libjava 'Languages-Java-Tests' 0
+JavaClassLoadingTests JavaClassLoadingTests stx:libjava 'Languages-Java-Tests-ClassLoading' 0
+JavaClassReaderTests JavaClassReaderTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaClassRefTests JavaClassRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaExceptionTests JavaExceptionTests stx:libjava 'Languages-Java-Tests' 0
+JavaFieldRefTests JavaFieldRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaFreshlyInitializedResource JavaFreshlyInitializedResource stx:libjava 'Languages-Java-Tests' 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-Libraries' 0
+JavaLibrariesResource JavaLibrariesResource stx:libjava 'Languages-Java-Tests' 0
+JavaLookupResolutionAlgorithmTests JavaLookupResolutionAlgorithmTests stx:libjava 'Languages-Java-Tests-Interop' 0
+JavaLookupTests JavaLookupTests stx:libjava 'Languages-Java-Tests-Interop' 0
+JavaMethodRefTests JavaMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaMonitorsTests JavaMonitorsTests stx:libjava 'Languages-Java-Tests' 0
+JavaNativeMemoryTests JavaNativeMemoryTests stx:libjava 'Languages-Java-Tests' 0
+JavaRefMock JavaRefMock stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaRefsAndConstantPoolTestCase JavaRefsAndConstantPoolTestCase stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaReleaseTests JavaReleaseTests stx:libjava 'Languages-Java-Tests' 0
+JavaRuntimeConstantPoolTests JavaRuntimeConstantPoolTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaTestCaseProxy JavaTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
+JavaTestsResource JavaTestsResource stx:libjava 'Languages-Java-Tests' 0
+JavaUTF8Tests JavaUTF8Tests stx:libjava 'Languages-Java-Tests' 0
+TestletTestCaseProxy TestletTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 0
--- a/bc.mak	Thu Apr 10 09:04:48 2014 +0200
+++ b/bc.mak	Fri Apr 11 18:20:50 2014 +0200
@@ -112,6 +112,7 @@
 $(OUTDIR)JavaByte.$(O) JavaByte.$(H): JavaByte.st $(INCLUDE_TOP)\stx\libbasic\ArithmeticValue.$(H) $(INCLUDE_TOP)\stx\libbasic\Integer.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Number.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaByteCodeProcessor.$(O) JavaByteCodeProcessor.$(H): JavaByteCodeProcessor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaClassAccessor.$(O) JavaClassAccessor.$(H): JavaClassAccessor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)JavaClassEnvironment.$(O) JavaClassEnvironment.$(H): JavaClassEnvironment.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaClassQuery.$(O) JavaClassQuery.$(H): JavaClassQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
 $(OUTDIR)JavaClassReloader.$(O) JavaClassReloader.$(H): JavaClassReloader.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)JavaCodeLibraryOrBundle.$(O) JavaCodeLibraryOrBundle.$(H): JavaCodeLibraryOrBundle.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -179,7 +180,7 @@
 $(OUTDIR)JavaClassMemberRef2.$(O) JavaClassMemberRef2.$(H): JavaClassMemberRef2.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libjava\JavaRef2.$(H) $(STCHDR)
 $(OUTDIR)JavaClassReader.$(O) JavaClassReader.$(H): JavaClassReader.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libjava\JavaConstants.$(H) $(STCHDR)
 $(OUTDIR)JavaClassRef2.$(O) JavaClassRef2.$(H): JavaClassRef2.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libjava\JavaRef2.$(H) $(STCHDR)
-$(OUTDIR)JavaClassRegistry.$(O) JavaClassRegistry.$(H): JavaClassRegistry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libjava\JavaVMData.$(H) $(STCHDR)
+$(OUTDIR)JavaClassRegistry.$(O) JavaClassRegistry.$(H): JavaClassRegistry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libjava\JavaClassEnvironment.$(H) $(INCLUDE_TOP)\stx\libjava\JavaVMData.$(H) $(STCHDR)
 $(OUTDIR)JavaCodeBundle.$(O) JavaCodeBundle.$(H): JavaCodeBundle.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libjava\JavaCodeLibraryOrBundle.$(H) $(STCHDR)
 $(OUTDIR)JavaCodeLibrary.$(O) JavaCodeLibrary.$(H): JavaCodeLibrary.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libjava\JavaCodeLibraryOrBundle.$(H) $(STCHDR)
 $(OUTDIR)JavaEmbeddedFrameView.$(O) JavaEmbeddedFrameView.$(H): JavaEmbeddedFrameView.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libjava\JavaView.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(STCHDR)
--- a/libInit.cc	Thu Apr 10 09:04:48 2014 +0200
+++ b/libInit.cc	Fri Apr 11 18:20:50 2014 +0200
@@ -41,6 +41,7 @@
 _JavaByte_Init(pass,__pRT__,snd);
 _JavaByteCodeProcessor_Init(pass,__pRT__,snd);
 _JavaClassAccessor_Init(pass,__pRT__,snd);
+_JavaClassEnvironment_Init(pass,__pRT__,snd);
 _JavaClassQuery_Init(pass,__pRT__,snd);
 _JavaClassReloader_Init(pass,__pRT__,snd);
 _JavaCodeLibraryOrBundle_Init(pass,__pRT__,snd);
--- a/stx_libjava.st	Thu Apr 10 09:04:48 2014 +0200
+++ b/stx_libjava.st	Fri Apr 11 18:20:50 2014 +0200
@@ -320,6 +320,7 @@
         JavaByte
         JavaByteCodeProcessor
         JavaClassAccessor
+        JavaClassEnvironment
         JavaClassQuery
         JavaClassReloader
         JavaCodeLibraryOrBundle