Initial support for generalized built-in class support. builtin-class-support
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 23 May 2013 09:56:27 +0100
branchbuiltin-class-support
changeset 2620 263045d15796
parent 2618 e7757e5d593c
child 2621 c74b6d1cb175
Initial support for generalized built-in class support. When a class known by the run-time system (such as java.lang.Class or java.lang.reflect.Method) is loaded, the class is remembered in a corresponding variable in JavaVMData. This allows natives and other methods to access them through pool variable, which is a lot faster then calling JavaVM>>classForName:definedBy:.
JavaClassRegistry.st
JavaMirror.st
JavaVM.st
JavaVMData.st
--- a/JavaClassRegistry.st	Wed May 22 21:15:02 2013 +0100
+++ b/JavaClassRegistry.st	Thu May 23 09:56:27 2013 +0100
@@ -305,18 +305,34 @@
     | nm |
 
     nm := class name.
-    nm == #'java.lang.Object' ifTrue:[
+    nm == #'java/lang/Object' ifTrue:[
         java_lang_Object := class.
         ^self.
     ].
-    nm == #'java.lang.System' ifTrue:[
+    nm == #'java/lang/System' ifTrue:[
         java_lang_System := class.
         ^self.
     ].
-    nm == #'java.lang.Class' ifTrue:[
+    nm == #'java/lang/Class' ifTrue:[
         java_lang_Class := class.
+        "/ Force load of other reflective classes. This saves us a nil check in
+        "/ JavaMirror>>createMethod... 
+        #(#'java/lang/reflect/Constructor'  #'java/lang/reflect/Method' #'java/lang/reflect/Field') do:[:e|
+            vm classForName: e definedBy: nil.
+        ]. 
         ^self.
     ].
+    nm == #'java/lang/reflect/Constructor' ifTrue:[
+        java_lang_reflect_Constructor := class.
+    ].
+    nm == #'java/lang/reflect/Method' ifTrue:[
+        java_lang_reflect_Method := class.
+    ].    
+    nm == #'java/lang/reflect/Field' ifTrue:[
+        java_lang_reflect_Field := class.
+    ].
+
+
 
     "Created: / 22-05-2013 / 20:40:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
--- a/JavaMirror.st	Wed May 22 21:15:02 2013 +0100
+++ b/JavaMirror.st	Thu May 23 09:56:27 2013 +0100
@@ -23,35 +23,35 @@
 Object subclass:#JavaMirror
 	instanceVariableNames:'klass reflection'
 	classVariableNames:''
-	poolDictionaries:''
+	poolDictionaries:'JavaVMData'
 	category:'Languages-Java-Classes'
 !
 
 JavaMirror subclass:#AlienClassMirror
 	instanceVariableNames:''
 	classVariableNames:''
-	poolDictionaries:''
+	poolDictionaries:'JavaVMData'
 	privateIn:JavaMirror
 !
 
 JavaMirror subclass:#JavaArrayMirror
 	instanceVariableNames:''
 	classVariableNames:''
-	poolDictionaries:''
+	poolDictionaries:'JavaVMData'
 	privateIn:JavaMirror
 !
 
 JavaMirror subclass:#JavaClassMirror
 	instanceVariableNames:''
 	classVariableNames:''
-	poolDictionaries:''
+	poolDictionaries:'JavaVMData'
 	privateIn:JavaMirror
 !
 
 JavaMirror subclass:#JavaPrimitiveMirror
 	instanceVariableNames:''
 	classVariableNames:''
-	poolDictionaries:''
+	poolDictionaries:'JavaVMData'
 	privateIn:JavaMirror
 !
 
@@ -273,7 +273,7 @@
     "
 
     | ctor |
-    ctor := self create: (JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil)
+    ctor := self create: java_lang_reflect_Constructor
                     for: class
                  method: method
               signature: signature 
@@ -309,7 +309,7 @@
     type := JavaVM javaClassObjectForClass:
                 ((JavaDescriptor fromString: javaField descriptor)  javaClassUsingClassLoader: javaField javaClass classLoader).
     modifiers := javaField accessFlags.
-    field := (JavaVM classForName: 'java.lang.reflect.Field' definedBy: nil) new.
+    field := java_lang_reflect_Field new.
     field
         instVarNamed: #clazz put: clazz;
         instVarNamed: #name put: name;
@@ -343,7 +343,7 @@
     "
 
     | mthd |
-    mthd := self create: (JavaVM classForName:'java.lang.reflect.Method' definedBy: nil)
+    mthd := self create: java_lang_reflect_Method
                     for: class
                  method: method
               signature: signature 
@@ -413,7 +413,7 @@
         ctors add: (self getDeclaredConstructorFor: (klass lookupMethodFor: #initialize)).
     ].
 
-    ^(JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil) javaArrayClass withAll: ctors
+    ^java_lang_reflect_Constructor javaArrayClass withAll: ctors
 
     "Modified: / 18-05-2013 / 10:57:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -440,7 +440,7 @@
         fields add: (self createFieldFor: field)
     ].
 
-    ^ (JavaVM classForName:'java.lang.reflect.Field' definedBy: nil) javaArrayClass 
+    ^ java_lang_reflect_Field javaArrayClass 
         withAll:fields
 
     "Modified: / 18-05-2013 / 10:57:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -458,7 +458,7 @@
             methods add: (self getDeclaredMethodFor: mthd).
         ].
     ].
-    ^(JavaVM classForName:'java.lang.reflect.Method' definedBy: nil) javaArrayClass withAll: methods
+    ^java_lang_reflect_Method javaArrayClass withAll: methods
 
     "Modified: / 18-05-2013 / 10:57:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -595,7 +595,7 @@
     "Returns an java.lang.reflect.Constructor[] with all constructors 
      declared by this class"
 
-    ^ (JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil) javaArrayClass new:0.
+    ^ java_lang_reflect_Constructor javaArrayClass new:0.
 
     "Modified: / 18-05-2013 / 10:57:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -604,7 +604,7 @@
     "Returns an java.lang.reflect.Field[] with all constructors 
      declared by this class."
 
-    ^(JavaVM classForName:'java.lang.reflect.Field' definedBy: nil) javaArrayClass new:0.
+    ^java_lang_reflect_Field javaArrayClass new:0.
 
     "Modified: / 18-05-2013 / 10:57:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -613,7 +613,7 @@
     "Returns an java.lang.reflect.Method[] with all methods 
      declared by this class"
     
-    ^ (JavaVM classForName:'java.lang.reflect.Method' definedBy: nil) javaArrayClass new:0.
+    ^ java_lang_reflect_Method javaArrayClass new:0.
 
     "Modified: / 18-05-2013 / 10:57:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -676,7 +676,7 @@
             ctors add: (self getDeclaredConstructorFor: mthd).
         ].
     ].
-    ^(JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil) javaArrayClass withAll: ctors
+    ^java_lang_reflect_Constructor javaArrayClass withAll: ctors
 
     "Modified: / 18-05-2013 / 10:56:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -692,7 +692,7 @@
     JavaClassReader classLoaderQuerySignal answer: klass classLoader do:[
         fields := fields collect:[:f | self createFieldFor:f ].
     ].
-    ^ (JavaVM classForName:'java.lang.reflect.Field' definedBy: nil) javaArrayClass 
+    ^ java_lang_reflect_Field javaArrayClass 
         withAll:fields
 
     "Modified: / 18-05-2013 / 10:57:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -714,7 +714,7 @@
             ]
         ].
     ].
-    ^(JavaVM classForName:'java.lang.reflect.Method' definedBy: nil) javaArrayClass withAll: methods
+    ^java_lang_reflect_Method javaArrayClass withAll: methods
 
     "Modified: / 18-05-2013 / 10:57:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -802,7 +802,7 @@
     "Returns an java.lang.reflect.Constructor[] with all constructors 
      declared by this class"
 
-    ^ (JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil) javaArrayClass new:0.
+    ^ java_lang_reflect_Constructor javaArrayClass new:0.
 
     "Modified: / 18-05-2013 / 10:57:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -811,7 +811,7 @@
     "Returns an java.lang.reflect.Field[] with all constructors 
      declared by this class."
 
-    ^(JavaVM classForName:'java.lang.reflect.Field' definedBy: nil) javaArrayClass new:0.
+    ^java_lang_reflect_Field javaArrayClass new:0.
 
     "Modified: / 18-05-2013 / 10:58:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
@@ -820,7 +820,7 @@
     "Returns an java.lang.reflect.Method[] with all methods 
      declared by this class"
     
-    ^ (JavaVM classForName:'java.lang.reflect.Method' definedBy: nil) javaArrayClass new:0.
+    ^ java_lang_reflect_Method javaArrayClass new:0.
 
     "Modified: / 18-05-2013 / 10:58:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
--- a/JavaVM.st	Wed May 22 21:15:02 2013 +0100
+++ b/JavaVM.st	Thu May 23 09:56:27 2013 +0100
@@ -2500,6 +2500,12 @@
         #'java/lang/Object'
         #'java/lang/String'
         #'java/lang/System'        
+        #'java/lang/Class'  
+
+        #'java/lang/reflect/Constructor'      
+        #'java/lang/reflect/Method'
+        #'java/lang/reflect/Field'
+
     )
 
     "Created: / 22-05-2013 / 20:38:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
--- a/JavaVMData.st	Wed May 22 21:15:02 2013 +0100
+++ b/JavaVMData.st	Thu May 23 09:56:27 2013 +0100
@@ -33,7 +33,7 @@
 		JavaConsoleStream JavaEventQueueThread PermittedDirectories
 		StdinReplacementFileQuerySignal JavaScreenUpdaterThread
 		ZipInflaters LoadedLibs EnteredMonitorsPerProcess
-		java_lang_Object java_lang_System java_lang_Class'
+		java_lang_Object java_lang_System java_lang_Class java_lang_reflect_Constructor java_lang_reflect_Method java_lang_reflect_Field'
 	poolDictionaries:''
 	category:'Languages-Java-Support'
 !