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:.
--- 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'
!