Fixed getDeclaringClass() native.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 04 Aug 2014 23:08:33 +0100
changeset 3199 189c572dbe71
parent 3192 b6bced0551a9
child 3200 a63cf3e1042f
child 3201 3890b120ec7f
Fixed getDeclaringClass() native. Look for declaring class in InnerClasses attribute.
JavaClass.st
JavaInnerClasses.st
JavaNativeMethodImpl_OpenJDK6.st
abbrev.stc
experiments/Make.proto
experiments/bc.mak
experiments/experiments.rc
experiments/stx_libjava_experiments.st
libjava.rc
stx_libjava.st
tests/libjava/src/stx/libjava/tests/lang/ReflectionTests.java
tools/Make.proto
tools/bc.mak
tools/stx_libjava_tools.st
tools/tools.rc
--- a/JavaClass.st	Sun Aug 03 23:43:40 2014 +0100
+++ b/JavaClass.st	Mon Aug 04 23:08:33 2014 +0100
@@ -689,6 +689,27 @@
     ^ constantPool
 !
 
+declaringClass
+    | innerClassesAttr |
+
+    innerClassesAttr := self getAttribute: #InnerClasses.
+    innerClassesAttr notNil ifTrue:[ 
+        innerClassesAttr do:[:each | 
+            each innerClassRef name = binaryName ifTrue:[  
+                | declaringClassName |
+
+                declaringClassName := each outerClassRef name.
+                declaringClassName notNil ifTrue:[ 
+                    ^ JavaVM classForName: declaringClassName definedBy: classLoader
+                ].
+            ]
+        ].
+    ].
+    ^ nil
+
+    "Created: / 04-08-2014 / 22:42:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 enclosingClass
     | enclosingMethodAttr |
 
@@ -2409,9 +2430,10 @@
 getAttribute:key
     "get an attribute (by symbolic key)"
 
-    ^ attributes at: key
+    ^ attributes at: key ifAbsent: nil
 
     "Created: / 13-09-2013 / 00:53:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-08-2014 / 22:33:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 setAttribute:key to:aValue
@@ -3206,15 +3228,21 @@
 !JavaClass::Attributes methodsFor:'accessing'!
 
 at: name
+    ^ self at: name ifAbsent: [ self keyNotFoundError: 'No such key: ', name printString   ]
+
+    "Created: / 13-09-2013 / 00:31:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-08-2014 / 22:29:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+at: name ifAbsent: block
     1 to: self size by: 2 do:[:i|
         (self basicAt: i) == name ifTrue:[
             ^ self basicAt: i + 1.
         ]
     ].
-    ^ nil
-
-    "Created: / 13-09-2013 / 00:31:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 13-09-2013 / 02:07:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    ^ block value
+
+    "Created: / 04-08-2014 / 22:28:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaClass::JavaClassVersionDiedHandler class methodsFor:'documentation'!
--- a/JavaInnerClasses.st	Sun Aug 03 23:43:40 2014 +0100
+++ b/JavaInnerClasses.st	Mon Aug 04 23:08:33 2014 +0100
@@ -98,6 +98,12 @@
     ^ accessFlags
 !
 
+innerClassName
+    ^ innerClassRef name
+
+    "Created: / 04-08-2014 / 22:25:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 innerClassRef
     ^ innerClassRef
 !
@@ -106,6 +112,12 @@
     ^ name
 !
 
+outerClassName
+    ^ outerClassRef notNil ifTrue:[ outerClassRef name ] ifFalse: [ nil ]
+
+    "Created: / 04-08-2014 / 22:26:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 outerClassRef
     ^ outerClassRef
 ! !
@@ -125,9 +137,9 @@
 !
 
 setName: aString
-    aString
+    name := aString
 
-    "Created: / 16-10-2013 / 09:23:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 04-08-2014 / 22:50:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 setOuterClassRef: aJavaClassRef
--- a/JavaNativeMethodImpl_OpenJDK6.st	Sun Aug 03 23:43:40 2014 +0100
+++ b/JavaNativeMethodImpl_OpenJDK6.st	Mon Aug 04 23:08:33 2014 +0100
@@ -9959,45 +9959,25 @@
      * @since JDK1.1
      */"
 
-    | cls  enclosingClsName  enclosingCls |
+    | cls declaringClass |
 
     cls := Reflection classForJavaClassObject: this.
     (cls isJavaPrimitiveType or: [ cls isJavaArrayClass ]) ifTrue: [ ^ nil ].
-    (cls binaryName includes: $$) ifFalse: [ ^ nil ].
-    enclosingClsName := cls binaryName copyTo: (cls binaryName lastIndexOf: $$) - 1.
-    enclosingCls := JavaVM classForName:enclosingClsName definedBy:nil.
-    enclosingCls isNil ifTrue: [ self error: 'Cannot fins declaring class' ].
-    ^ Reflection javaClassObjectForClass: enclosingCls
-
-    "Modified: / 07-02-2014 / 09:44:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    declaringClass := cls declaringClass.
+    declaringClass notNil ifTrue:[
+        ^ Reflection javaClassObjectForClass: declaringClass
+    ].
+    ^ nil
+
+    "Modified: / 04-08-2014 / 22:54:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Class_getDeclaringClass: this
     <javanative: 'java/lang/Class' name: 'getDeclaringClass()Ljava/lang/Class;'>
-    "
-     /**
-     * If the class or interface represented by this {@code Class} object
-     * is a member of another class, returns the {@code Class} object
-     * representing the class in which it was declared.  This method returns
-     * null if this class or interface is not a member of any other class.  If
-     * this {@code Class} object represents an array class, a primitive
-     * type, or void,then this method returns null.
-     *
-     * @return the declaring class for this class
-     * @since JDK1.1
-     */"
-
-    | cls  enclosingClsName  enclosingCls |
-
-    cls := Reflection classForJavaClassObject: this.
-    (cls isJavaPrimitiveType or: [ cls isJavaArrayClass ]) ifTrue: [ ^ nil ].
-    (cls binaryName includes: $$) ifFalse: [ ^ nil ].
-    enclosingClsName := cls binaryName copyTo: (cls binaryName lastIndexOf: $$) - 1.
-    enclosingCls := JavaVM classForName:enclosingClsName definedBy:nil.
-    enclosingCls isNil ifTrue: [ self error: 'Cannot fins declaring class' ].
-    ^ Reflection javaClassObjectForClass: enclosingCls
-
-    "Modified: / 07-11-2013 / 23:39:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+
+    ^ self _java_lang_Class_getDeclaringClass0: this
+
+    "Modified: / 04-08-2014 / 22:39:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Class_getEnclosingMethod0: this
--- a/abbrev.stc	Sun Aug 03 23:43:40 2014 +0100
+++ b/abbrev.stc	Mon Aug 04 23:08:33 2014 +0100
@@ -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
@@ -16,10 +15,8 @@
 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
 JavaClassEnvironment JavaClassEnvironment stx:libjava 'Languages-Java-Support' 0
-JavaClassLoadingTests JavaClassLoadingTests stx:libjava 'Languages-Java-Tests-ClassLoading' 1
 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
@@ -32,26 +29,19 @@
 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
@@ -59,9 +49,7 @@
 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
@@ -71,7 +59,6 @@
 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
@@ -96,15 +83,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
@@ -112,21 +96,16 @@
 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
 JavaInvokeDynamic2 JavaInvokeDynamic2 stx:libjava 'Languages-Java-Reader-Support-new' 0
 JavaMethod JavaMethod stx:libjava 'Languages-Java-Classes' 0
 JavaMethodAnnotationContainer JavaMethodAnnotationContainer stx:libjava 'Languages-Java-Annotations' 1
 JavaMethodDescriptor JavaMethodDescriptor stx:libjava 'Languages-Java-Support' 0
 JavaMethodHandle2 JavaMethodHandle2 stx:libjava 'Languages-Java-Reader-Support-new' 0
-JavaMethodRefTests JavaMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
 JavaMethodType2 JavaMethodType2 stx:libjava 'Languages-Java-Reader-Support-new' 0
 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
@@ -138,7 +117,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
@@ -168,3 +146,25 @@
 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
+JavaByteCodeDisassemblerTests JavaByteCodeDisassemblerTests stx:libjava 'Languages-Java-Tests' 1
+JavaByteCodeProcessorTests JavaByteCodeProcessorTests stx:libjava 'Languages-Java-Tests' 1
+JavaClassLoadingTests JavaClassLoadingTests stx:libjava 'Languages-Java-Tests-ClassLoading' 1
+JavaClassReaderTests JavaClassReaderTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaClassRefTests JavaClassRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaExceptionTests JavaExceptionTests stx:libjava 'Languages-Java-Tests' 1
+JavaFieldRefTests JavaFieldRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaFreshlyInitializedResource JavaFreshlyInitializedResource stx:libjava 'Languages-Java-Tests' 1
+JavaInterfaceMethodRefTests JavaInterfaceMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaJUnitTests JavaJUnitTests stx:libjava 'Languages-Java-Tests-Libraries' 1
+JavaLookupResolutionAlgorithmTests JavaLookupResolutionAlgorithmTests stx:libjava 'Languages-Java-Tests-Interop' 1
+JavaLookupTests JavaLookupTests stx:libjava 'Languages-Java-Tests-Interop' 1
+JavaMethodRefTests JavaMethodRefTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaMonitorsTests JavaMonitorsTests stx:libjava 'Languages-Java-Tests' 1
+JavaNativeMemoryTests JavaNativeMemoryTests stx:libjava 'Languages-Java-Tests' 1
+JavaRefMock JavaRefMock stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 0
+JavaRefsAndConstantPoolTestCase JavaRefsAndConstantPoolTestCase stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaReleaseTests JavaReleaseTests stx:libjava 'Languages-Java-Tests' 1
+JavaRuntimeConstantPoolTests JavaRuntimeConstantPoolTests stx:libjava 'Languages-Java-Tests-RuntimeConstantPool' 1
+JavaUTF8Tests JavaUTF8Tests stx:libjava 'Languages-Java-Tests' 1
+TestletTestCaseProxy TestletTestCaseProxy stx:libjava 'Languages-Java-Tests-Proxies' 3
--- a/experiments/Make.proto	Sun Aug 03 23:43:40 2014 +0100
+++ b/experiments/Make.proto	Mon Aug 04 23:08:33 2014 +0100
@@ -137,6 +137,8 @@
 	cd ../../libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../libbasic3 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../../libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../../goodies/sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../ && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 
 
--- a/experiments/bc.mak	Sun Aug 03 23:43:40 2014 +0100
+++ b/experiments/bc.mak	Mon Aug 04 23:08:33 2014 +0100
@@ -54,6 +54,8 @@
 	pushd ..\..\libbasic2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\libbasic3 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\goodies\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd .. & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
 
--- a/experiments/experiments.rc	Sun Aug 03 23:43:40 2014 +0100
+++ b/experiments/experiments.rc	Mon Aug 04 23:08:33 2014 +0100
@@ -3,7 +3,7 @@
 // automagically generated from the projectDefinition: stx_libjava_experiments.
 //
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION     6,2,12886,12886
+  FILEVERSION     6,2,32767,32767
   PRODUCTVERSION  6,2,4,0
 #if (__BORLANDC__)
   FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
@@ -20,12 +20,12 @@
     BEGIN
       VALUE "CompanyName", "eXept Software AG\0"
       VALUE "FileDescription", "Smalltalk/X Class library (LIB)\0"
-      VALUE "FileVersion", "6.2.12886.12886\0"
+      VALUE "FileVersion", "6.2.32767.32767\0"
       VALUE "InternalName", "stx:libjava/experiments\0"
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2014\nCopyright eXept Software AG 1998-2014\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.4.0\0"
-      VALUE "ProductDate", "Wed, 25 Jun 2014 12:45:30 GMT\0"
+      VALUE "ProductDate", "Mon, 04 Aug 2014 22:07:11 GMT\0"
     END
 
   END
--- a/experiments/stx_libjava_experiments.st	Sun Aug 03 23:43:40 2014 +0100
+++ b/experiments/stx_libjava_experiments.st	Mon Aug 04 23:08:33 2014 +0100
@@ -76,8 +76,8 @@
      by searching along the inheritance chain of all of my classes."
 
     ^ #(
-        #'stx:libbasic'    "Autoload - superclass of Benchmarks::JavaLookup "
-        #'stx:libjava'    "Java - superclass of JavaMethodWrapperCompiler "
+        #'stx:libbasic'    "Autoload - superclass of Benchmarks::JavaLookup"
+        #'stx:libjava'    "Java - superclass of JavaMethodWrapperCompiler"
     )
 !
 
--- a/libjava.rc	Sun Aug 03 23:43:40 2014 +0100
+++ b/libjava.rc	Mon Aug 04 23:08:33 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011\nCopyright Jan Vrany, Jan Kurs and Marcel Hlopko\n          SWING Research Group, Czech Technical University In Prague\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.4.0\0"
-      VALUE "ProductDate", "Fri, 25 Jul 2014 00:47:34 GMT\0"
+      VALUE "ProductDate", "Mon, 04 Aug 2014 22:07:06 GMT\0"
     END
 
   END
--- a/stx_libjava.st	Sun Aug 03 23:43:40 2014 +0100
+++ b/stx_libjava.st	Mon Aug 04 23:08:33 2014 +0100
@@ -160,7 +160,7 @@
      by searching along the inheritance chain of all of my classes."
 
     ^ #(
-        #'stx:goodies/sunit'    "TestAsserter - superclass of GroovyEvaluatorTests"
+        #'stx:goodies/sunit'    "TestAsserter - superclass of JUnitTestCaseProxy"
         #'stx:libbasic'    "AbstractNumberVector - extended"
         #'stx:libbasic2'    "SignedIntegerArray - extended"
         #'stx:libbasic3'    "SystemEnvironment - superclass of JavaClassEnvironment"
@@ -308,7 +308,6 @@
         "<className> or (<className> attributes...) in load order"
         GroovyCompiler
         GroovyEvaluator
-        (GroovyEvaluatorTests autoload)
         GroovyLanguage
         GroovySourceFileWriter
         JavaAnnotation
@@ -321,10 +320,8 @@
         JavaBooleanArray
         JavaByte
         JavaByteCodeProcessor
-        (JavaByteCodeProcessorTests autoload)
         JavaClassAccessor
         JavaClassEnvironment
-        (JavaClassLoadingTests autoload)
         JavaClassQuery
         JavaClassReloader
         JavaCodeLibraryOrBundle
@@ -337,26 +334,19 @@
         JavaDescriptor
         JavaError
         JavaExceptionTable
-        (JavaExceptionTests autoload)
         JavaField
         JavaFinalizationRegistry
-        (JavaFreshlyInitializedResource autoload)
         JavaInnerClasses
-        (JavaJUnitTests autoload)
         JavaLanguage
         JavaLibraries
         (JavaLibrariesResource autoload)
         JavaLocalVariableTable
         JavaLocalVariableTableEntry
         JavaLookup
-        (JavaLookupResolutionAlgorithmTests autoload)
-        (JavaLookupTests autoload)
         JavaMetaclass
         JavaMonitor
-        (JavaMonitorsTests autoload)
         JavaNameAndType2
         JavaNativeMemory
-        (JavaNativeMemoryTests autoload)
         JavaNioSupport
         JavaObject
         JavaObjectDictionary
@@ -364,9 +354,7 @@
         JavaPopUpView
         JavaProcess
         JavaRef2
-        (JavaRefsAndConstantPoolTestCase autoload)
         JavaRelease
-        (JavaReleaseTests autoload)
         JavaResolver
         JavaShort
         JavaSlotIndexCache
@@ -376,7 +364,6 @@
         (JavaTestCaseProxy autoload)
         JavaTestsLoader
         JavaTopView
-        (JavaUTF8Tests autoload)
         JavaUnresolvedCompilationError
         JavaUnresolvedConstant
         JavaUtilities
@@ -401,15 +388,12 @@
         JavaAnnotationPrimitiveValue
         JavaBehavior
         JavaByteCodeDisassembler
-        (JavaByteCodeDisassemblerTests autoload)
         JavaByteCodeEnumerator
         JavaByteCodeProcessorAdapter
         JavaClassAnnotationContainer
         JavaClassMemberRef2
         JavaClassReader
-        (JavaClassReaderTests autoload)
         JavaClassRef2
-        (JavaClassRefTests autoload)
         JavaClassRegistry
         JavaCodeBundle
         JavaCodeLibrary
@@ -417,21 +401,16 @@
         JavaFieldAnnotationContainer
         JavaFieldDescriptor
         JavaFieldDescriptorWithUnionType
-        (JavaFieldRefTests autoload)
         (JavaInitializedResource autoload)
-        (JavaInterfaceMethodRefTests autoload)
         JavaInvalidRefError
         JavaInvokeDynamic2
         JavaMethod
         JavaMethodAnnotationContainer
         JavaMethodDescriptor
         JavaMethodHandle2
-        (JavaMethodRefTests autoload)
         JavaMethodType2
         JavaMirror
         #'JavaNativeMethodImpl_OpenJDK6'
-        (JavaRefMock autoload)
-        (JavaRuntimeConstantPoolTests autoload)
         JavaStringRef2
         (JavaTestsResource autoload)
         JavaUnhandledExceptionError
@@ -443,7 +422,6 @@
         ProxyMethodGuardNode
         ProxyMethodInvocationNode
         ProxyMethodJavaFieldAccessor
-        (TestletTestCaseProxy autoload)
         JavaAlienMirror
         JavaArrayMirror
         JavaByteCodePreresolver
@@ -473,6 +451,28 @@
         ProxyMethodJavaTypeCheckNode
         JavaNativeMethod
         #'JavaNativeMethodImpl_OracleJDK8'
+        (GroovyEvaluatorTests autoload)
+        (JavaByteCodeDisassemblerTests autoload)
+        (JavaByteCodeProcessorTests autoload)
+        (JavaClassLoadingTests autoload)
+        (JavaClassReaderTests autoload)
+        (JavaClassRefTests autoload)
+        (JavaExceptionTests autoload)
+        (JavaFieldRefTests autoload)
+        (JavaFreshlyInitializedResource autoload)
+        (JavaInterfaceMethodRefTests autoload)
+        (JavaJUnitTests autoload)
+        (JavaLookupResolutionAlgorithmTests autoload)
+        (JavaLookupTests autoload)
+        (JavaMethodRefTests autoload)
+        (JavaMonitorsTests autoload)
+        (JavaNativeMemoryTests autoload)
+        (JavaRefMock autoload)
+        (JavaRefsAndConstantPoolTestCase autoload)
+        (JavaReleaseTests autoload)
+        (JavaRuntimeConstantPoolTests autoload)
+        (JavaUTF8Tests autoload)
+        (TestletTestCaseProxy autoload)
     )
 !
 
--- a/tests/libjava/src/stx/libjava/tests/lang/ReflectionTests.java	Sun Aug 03 23:43:40 2014 +0100
+++ b/tests/libjava/src/stx/libjava/tests/lang/ReflectionTests.java	Mon Aug 04 23:08:33 2014 +0100
@@ -183,5 +183,81 @@
         assertEquals(ca[0].getClass().getComponentType(), Character.TYPE);
         assertEquals(oa[0].getClass().getComponentType(), Object.class);
     }
+    
+    public static class NestedClassL1 {
+        protected Object o1;
+        
+        public static class NestedClassL2 {
+            
+        }
+        
+        public NestedClassL1() {
+            o1 = new Object() { public int hashCode() { return 10; } }; 
+        }
+        
+        public Object getO1() {
+            return o1;
+        }
+        
+        public Object getO2() {
+            return new Object() { public int hashCode() { return 20; } };
+        }
+        
+        
+    }
+    
+    @Test
+    public void test_getEnclosingClass_01() {
+        assertEquals(this.getClass(), NestedClassL1.class.getEnclosingClass() );
+        assertEquals(NestedClassL1.class, NestedClassL1.NestedClassL2.class.getEnclosingClass() );
+    }
+    
+    @Test
+    public void test_getEnclosingClass_02() {
+        Object o = new Object() { public int hashCode() { return 10; } };         
+        assertEquals(this.getClass(), o.getClass().getEnclosingClass() );        
+    }
+    
+    @Test 
+    public void test_getEnclosingMethod_01() {
+        Object o1 = (new NestedClassL1()).getO1();
+        Object o2 = (new NestedClassL1()).getO2();
+        
+        assertEquals(null, o1.getClass().getEnclosingMethod());
+        try {
+            assertEquals(NestedClassL1.class.getDeclaredMethod("getO2", new Class[0]), o2.getClass().getEnclosingMethod());
+        } catch (SecurityException e) {
+            fail();            
+        } catch (NoSuchMethodException e) {
+            fail();
+        }
+    }
+    
+    @Test 
+    public void test_getEnclosingConstructor_01() {
+        Object o1 = (new NestedClassL1()).getO1();
+        Object o2 = (new NestedClassL1()).getO2();
+                
+        try {
+            assertEquals(NestedClassL1.class.getDeclaredConstructor(new Class[0]), o1.getClass().getEnclosingConstructor());
+        } catch (SecurityException e) {
+            fail();            
+        } catch (NoSuchMethodException e) {
+            fail();
+        }
+        assertEquals(null, o2.getClass().getEnclosingConstructor());
+    }
+    
+    @Test
+    public void test_isAnonymous() {
+        Object o1 = (new NestedClassL1()).getO1();
+        Object o2 = (new NestedClassL1()).getO2();
+
+        assertTrue(o1.getClass().isAnonymousClass());
+        assertTrue(o2.getClass().isAnonymousClass());
+        assertFalse(this.getClass().isAnonymousClass());
+        assertFalse(NestedClassL1.class.isAnonymousClass());
+    }
+    
 
 }
--- a/tools/Make.proto	Sun Aug 03 23:43:40 2014 +0100
+++ b/tools/Make.proto	Mon Aug 04 23:08:33 2014 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libcomp -I$(INCLUDE_TOP)/stx/libjava -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/smallsense -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libcomp -I$(INCLUDE_TOP)/stx/libjava -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg2
 
 
 # if you need any additional defines for embedded C code,
@@ -140,9 +140,10 @@
 	cd ../../libcomp && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../libui && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../../libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../../goodies/sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../../libwidg && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../ && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../../libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
-	cd ../../libwidg && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../libwidg2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 	cd ../../libtool && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 
--- a/tools/bc.mak	Sun Aug 03 23:43:40 2014 +0100
+++ b/tools/bc.mak	Mon Aug 04 23:08:33 2014 +0100
@@ -34,7 +34,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libcomp -I$(INCLUDE_TOP)\stx\libjava -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\smallsense -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libcomp -I$(INCLUDE_TOP)\stx\libjava -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg2
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -57,9 +57,10 @@
 	pushd ..\..\libcomp & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\libui & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\goodies\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\libwidg & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd .. & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-	pushd ..\..\libwidg & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\libwidg2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 	pushd ..\..\libtool & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
--- a/tools/stx_libjava_tools.st	Sun Aug 03 23:43:40 2014 +0100
+++ b/tools/stx_libjava_tools.st	Mon Aug 04 23:08:33 2014 +0100
@@ -30,12 +30,12 @@
      by searching along the inheritance chain of all of my classes."
 
     ^ #(
-        #'stx:libbasic'    "Autoload - superclass of JavaCompilerTests "
-        #'stx:libjava'    "JavaObject - extended "
-        #'stx:libtool'    "AbstractSettingsApplication - superclass of JavaSettingsApplication "
-        #'stx:libview'    "DisplaySurface - superclass of JavaListInspectorView "
-        #'stx:libview2'    "ApplicationModel - extended "
-        #'stx:libwidg2'    "HierarchicalItem - superclass of JavaCodeBundleEditor::Item "
+        #'stx:libbasic'    "Autoload - superclass of JavaCompilerTests"
+        #'stx:libjava'    "JavaObject - extended"
+        #'stx:libtool'    "AbstractSettingsApplication - superclass of JavaSettingsApplication"
+        #'stx:libview'    "DisplaySurface - superclass of JavaListInspectorView"
+        #'stx:libview2'    "ApplicationModel - extended"
+        #'stx:libwidg2'    "HierarchicalItem - superclass of JavaCodeBundleEditor::Item"
     )
 !
 
@@ -47,8 +47,9 @@
      by searching all classes (and their packages) which are referenced by my classes."
 
     ^ #(
-        #'stx:libbasic2'    "BackgroundQueueProcessingJob - referenced by JavaSourceDocument class>>initialize "
-        #'stx:libcomp'    "ParseError - referenced by JavaScannerBase>>syntaxError:position:to: "
+        #'stx:goodies/smallsense'    "SmallSense::ParseTreeIndex - referenced by JavaSyntaxHighlighter>>formatClassDefinition:in:"
+        #'stx:libbasic2'    "BackgroundQueueProcessingJob - referenced by JavaSourceDocument class>>initialize"
+        #'stx:libcomp'    "ParseError - referenced by JavaScannerBase>>syntaxError:position:to:"
     )
 !
 
--- a/tools/tools.rc	Sun Aug 03 23:43:40 2014 +0100
+++ b/tools/tools.rc	Mon Aug 04 23:08:33 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.4.0\0"
-      VALUE "ProductDate", "Thu, 24 Jul 2014 20:13:26 GMT\0"
+      VALUE "ProductDate", "Mon, 04 Aug 2014 22:07:14 GMT\0"
     END
 
   END