JavaMirror.st
branchperformance-optimizations
changeset 2601 3d4b433fb25c
parent 2588 58b1e0fd20e7
child 2620 263045d15796
--- a/JavaMirror.st	Sat May 18 22:49:58 2013 +0100
+++ b/JavaMirror.st	Sat May 18 23:03:23 2013 +0100
@@ -273,7 +273,7 @@
     "
 
     | ctor |
-    ctor := self create: (JavaVM classForName:'java.lang.reflect.Constructor')
+    ctor := self create: (JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil)
                     for: class
                  method: method
               signature: signature 
@@ -284,6 +284,7 @@
     ^ctor
 
     "Created: / 01-08-2012 / 10:20:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:55:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 createFieldFor: javaField 
@@ -300,9 +301,15 @@
     name := JavaVM reflection javaStringObjectForString: javaField name
                 interned: true.
     slot := javaField index.
-    type := JavaVM javaClassObjectForClass: javaField typeClass.
+    "/ Following could be coded like (and actually it was):
+    "/
+    "/type := JavaVM javaClassObjectForClass: javaField typeClass.
+    "/
+    "/ however, for performance reasons its better to avoid ClassLoader query, so:
+    type := JavaVM javaClassObjectForClass:
+                ((JavaDescriptor fromString: javaField descriptor)  javaClassUsingClassLoader: javaField javaClass classLoader).
     modifiers := javaField accessFlags.
-    field := (JavaVM classForName: 'java.lang.reflect.Field') new.
+    field := (JavaVM classForName: 'java.lang.reflect.Field' definedBy: nil) new.
     field
         instVarNamed: #clazz put: clazz;
         instVarNamed: #name put: name;
@@ -318,6 +325,7 @@
     ^ field.
 
     "Created: / 22-08-2012 / 12:09:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 11:51:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 createMethodFor: class method: method name: name signature: signature modifiers: modifiers parameterTyoes: parameterClasses returnType: returnClass exceptionTypes: exceptionClasses annotations: annotations
@@ -335,7 +343,7 @@
     "
 
     | mthd |
-    mthd := self create: (JavaVM classForName:'java.lang.reflect.Method')
+    mthd := self create: (JavaVM classForName:'java.lang.reflect.Method' definedBy: nil)
                     for: class
                  method: method
               signature: signature 
@@ -352,6 +360,7 @@
     ^mthd
 
     "Created: / 01-08-2012 / 10:46:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:55:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaMirror::AlienClassMirror class methodsFor:'documentation'!
@@ -378,9 +387,9 @@
 getClassLoader
     "Returns a class loader that loaded this class"
 
-    ^ (JavaVM classForName:'stx.libjava.ClassLoader') instVarNamed: #scl.
+    ^ (JavaVM classForName:'stx.libjava.ClassLoader' definedBy: nil) instVarNamed: #scl.
 
-    "Modified: / 07-05-2013 / 11:19:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getDeclaredConstructors:publicOnly
@@ -404,9 +413,9 @@
         ctors add: (self getDeclaredConstructorFor: (klass lookupMethodFor: #initialize)).
     ].
 
-    ^(JavaVM classForName:'java.lang.reflect.Constructor') javaArrayClass withAll: ctors
+    ^(JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil) javaArrayClass withAll: ctors
 
-    "Modified: / 22-08-2012 / 11:37:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getDeclaredFields:publicOnly
@@ -431,10 +440,10 @@
         fields add: (self createFieldFor: field)
     ].
 
-    ^ (JavaVM classForName:'java.lang.reflect.Field') javaArrayClass 
+    ^ (JavaVM classForName:'java.lang.reflect.Field' definedBy: nil) javaArrayClass 
         withAll:fields
 
-    "Modified: / 22-08-2012 / 12:19:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getDeclaredMethods:publicOnly 
@@ -449,17 +458,17 @@
             methods add: (self getDeclaredMethodFor: mthd).
         ].
     ].
-    ^(JavaVM classForName:'java.lang.reflect.Method') javaArrayClass withAll: methods
+    ^(JavaVM classForName:'java.lang.reflect.Method' definedBy: nil) javaArrayClass withAll: methods
 
-    "Modified: / 22-08-2012 / 11:36:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getInterfaces
     "Return a list if interfaces"
 
-    ^ Array with: (JavaVM classForName: 'java.lang.Cloneable')
+    ^ Array with: (JavaVM classForName: 'java.lang.Cloneable'  definedBy: nil)
 
-    "Modified: / 22-08-2012 / 11:06:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getModifiers
@@ -586,37 +595,37 @@
     "Returns an java.lang.reflect.Constructor[] with all constructors 
      declared by this class"
 
-    ^ (JavaVM classForName:'java.lang.reflect.Constructor') javaArrayClass new:0.
+    ^ (JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil) javaArrayClass new:0.
 
-    "Modified: / 31-07-2012 / 18:41:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getDeclaredFields:publicOnly
     "Returns an java.lang.reflect.Field[] with all constructors 
      declared by this class."
 
-    ^(JavaVM classForName:'java.lang.reflect.Field') javaArrayClass new:0.
+    ^(JavaVM classForName:'java.lang.reflect.Field' definedBy: nil) javaArrayClass new:0.
 
-    "Modified: / 22-08-2012 / 12:03:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getDeclaredMethods:publicOnly 
     "Returns an java.lang.reflect.Method[] with all methods 
      declared by this class"
     
-    ^ (JavaVM classForName:'java.lang.reflect.Method') javaArrayClass new:0.
+    ^ (JavaVM classForName:'java.lang.reflect.Method' definedBy: nil) javaArrayClass new:0.
 
-    "Modified: / 01-08-2012 / 11:08:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getInterfaces
     "Return a list if interfaces"
 
     ^ Array 
-        with: (JavaVM classForName: 'java.lang.Cloneable')
-        with: (JavaVM classForName: 'java.io.Serializable')
+        with: (JavaVM classForName: 'java.lang.Cloneable' definedBy: nil)
+        with: (JavaVM classForName: 'java.io.Serializable' definedBy: nil)
 
-    "Modified: / 22-08-2012 / 11:06:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getModifiers
@@ -667,9 +676,9 @@
             ctors add: (self getDeclaredConstructorFor: mthd).
         ].
     ].
-    ^(JavaVM classForName:'java.lang.reflect.Constructor') javaArrayClass withAll: ctors
+    ^(JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil) javaArrayClass withAll: ctors
 
-    "Modified: / 01-08-2012 / 11:04:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:56:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getDeclaredFields:publicOnly
@@ -683,10 +692,10 @@
     JavaClassReader classLoaderQuerySignal answer: klass classLoader do:[
         fields := fields collect:[:f | self createFieldFor:f ].
     ].
-    ^ (JavaVM classForName:'java.lang.reflect.Field') javaArrayClass 
+    ^ (JavaVM classForName:'java.lang.reflect.Field' definedBy: nil) javaArrayClass 
         withAll:fields
 
-    "Modified: / 22-08-2012 / 12:10:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getDeclaredMethods:publicOnly
@@ -705,9 +714,9 @@
             ]
         ].
     ].
-    ^(JavaVM classForName:'java.lang.reflect.Method') javaArrayClass withAll: methods
+    ^(JavaVM classForName:'java.lang.reflect.Method' definedBy: nil) javaArrayClass withAll: methods
 
-    "Modified: / 19-09-2012 / 16:26:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getGenericSignature
@@ -793,27 +802,27 @@
     "Returns an java.lang.reflect.Constructor[] with all constructors 
      declared by this class"
 
-    ^ (JavaVM classForName:'java.lang.reflect.Constructor') javaArrayClass new:0.
+    ^ (JavaVM classForName:'java.lang.reflect.Constructor' definedBy: nil) javaArrayClass new:0.
 
-    "Modified: / 31-07-2012 / 18:41:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:57:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getDeclaredFields:publicOnly
     "Returns an java.lang.reflect.Field[] with all constructors 
      declared by this class."
 
-    ^(JavaVM classForName:'java.lang.reflect.Field') javaArrayClass new:0.
+    ^(JavaVM classForName:'java.lang.reflect.Field' definedBy: nil) javaArrayClass new:0.
 
-    "Modified: / 22-08-2012 / 12:03:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:58:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getDeclaredMethods:publicOnly 
     "Returns an java.lang.reflect.Method[] with all methods 
      declared by this class"
     
-    ^ (JavaVM classForName:'java.lang.reflect.Method') javaArrayClass new:0.
+    ^ (JavaVM classForName:'java.lang.reflect.Method' definedBy: nil) javaArrayClass new:0.
 
-    "Modified: / 01-08-2012 / 11:08:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-05-2013 / 10:58:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 getInterfaces