src/JavaVM.st
branchjk_new_structure
changeset 957 84a9553aa486
parent 952 7afd3529b9fa
child 959 1f3342b2e728
--- a/src/JavaVM.st	Wed Aug 31 21:06:09 2011 +0000
+++ b/src/JavaVM.st	Wed Aug 31 21:26:59 2011 +0000
@@ -1742,6 +1742,7 @@
     ].
     props at:'java.class.version' put:'1'.
     props at:'java.class.path'    put:(self defaultCLASSPATH).
+    props at:'java.ext.dirs'      put:(self defaultExtDirs).
     props at:'os.name'            put:os.
     props at:'os.arch'            put:cpu.
     props at:'os.version'         put:'1'.
@@ -1790,7 +1791,7 @@
 
     "Created: / 03-01-1998 / 14:26:39 / cg"
     "Modified: / 27-01-2000 / 02:20:18 / cg"
-    "Modified: / 12-08-2011 / 19:51:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-08-2011 / 20:03:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 initializeVM
@@ -2267,6 +2268,25 @@
     "Modified: / 22-11-2010 / 13:44:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+defaultExtDirs
+
+    ^String streamContents:[:s|
+        Java release javaExtDirs do:[:dir|
+            s nextPutAll: dir pathName.
+            s nextPut: OperatingSystem pathSeparator.
+        ].
+        s nextPutAll:
+            ((Smalltalk packageDirectoryForPackageId: 'stx:libjava') asFilename
+                / 'java' / 'libs') pathName.        
+    ]
+
+    "
+    JavaVM defaultExtDirs
+    "
+
+    "Created: / 31-08-2011 / 20:03:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 defaultHotJavaHome
     ^ '/usr/local/java/hotjava'.
 
@@ -4734,7 +4754,7 @@
             ifTrue:[b readStream]
             ifFalse:[(b copyFrom: off + 1 to: off + len) readStream].
     [
-        cls := JavaClassReader readStream: bs.
+        cls := JavaClassReader readStream: bs loader: nativeContext receiver.
     ] on: JavaClassReader invalidClassFormatSignal do:[
         self throwClassFormatError.
         ^self.
@@ -4744,7 +4764,7 @@
 
     ^self reflection javaClassObjectForClass: cls.
 
-    "Modified: / 08-08-2011 / 17:57:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-08-2011 / 21:18:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_ClassLoader_findBootstrapClass: nativeContext
@@ -4950,6 +4970,7 @@
     class := self reflection classForJavaClassObject:(aJavaContext receiver).
     publicOnly := (aJavaContext argAt:1) == 1.
     constructors := OrderedCollection new.
+    JavaClassReader classLoaderQuerySignal answer: class classLoader do:[
     class selectorsAndMethodsDo:
             [:selector :method | 
             (method isJavaMethod and:
@@ -4958,12 +4979,13 @@
                                 and:[ publicOnly not or:[ method isPublic ] ] ] ]) 
                 ifTrue:
                     [ constructors add:(self reflection javaConstructorObjectForMethod:method) ] ].
+    ].
     ^ (self classForName:'java.lang.reflect.Constructor') javaArrayClass 
         withAll:constructors
 
     "Created: / 24-11-2010 / 09:25:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 09-02-2011 / 01:24:03 / Marcel Hlopko <hlopik@gmail.com>"
-    "Modified: / 11-02-2011 / 08:55:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-08-2011 / 22:20:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Class_getDeclaredFields0:aJavaContext 
@@ -4979,14 +5001,16 @@
     publicOnly := (aJavaContext argAt:1) == 1.
     fields := class fields , class staticFields.
     publicOnly ifTrue:[ fields := fields select:[:f | f isPublic ] ].
+    JavaClassReader classLoaderQuerySignal answer: class classLoader do:[
     fields := fields 
                 collect:[:f | self javaFieldObjectForField:f in:javaClassObject ].
+    ].
     ^ (self classForName:'java.lang.reflect.Field') javaArrayClass 
         withAll:fields
 
     "Created: / 10-11-2010 / 16:22:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 28-01-2011 / 15:19:06 / Marcel Hlopko <hlopik@gmail.com>"
-    "Modified: / 17-08-2011 / 09:06:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-08-2011 / 22:21:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Class_getDeclaredMethods0:aJavaContext 
@@ -4996,6 +5020,7 @@
     class := self reflection classForJavaClassObject:(aJavaContext receiver).
     publicOnly := (aJavaContext argAt:1) == 1.
     methods := OrderedCollection new.
+    JavaClassReader classLoaderQuerySignal answer: class classLoader do:[
     class selectorsAndMethodsDo:
             [:selector :method | 
             (method isJavaMethod and:
@@ -5003,13 +5028,14 @@
                             [ (selector startsWith:'<init>(') not 
                                 and:[ publicOnly not or:[ method isPublic ] ] ] ]) 
                 ifTrue:[ methods add:(self javaMethodObjectForMethod:method) ] ].
+    ].
     ^ (self classForName:'java.lang.reflect.Method') javaArrayClass 
         withAll:methods asArray
 
     "Created: / 21-12-2010 / 22:39:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 28-01-2011 / 15:19:09 / Marcel Hlopko <hlopik@gmail.com>"
-    "Modified: / 11-02-2011 / 08:35:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 04-06-2011 / 17:07:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 31-08-2011 / 22:05:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Class_getDeclaringClass: nativeContext
@@ -6707,11 +6733,14 @@
     lastModTime := nativeContext at: 3.
     result := path asFilename.
     result ifNil: [ JavaVM throwZipException ].
-    ^ ZipCache 
-        indexOf: ( ZipCache add: (ZipArchive readingFrom: result readStream) ).
+    ^[ 
+        ZipCache indexOf: ( ZipCache add: (ZipArchive readingFrom: result readStream) ) 
+    ] on: Error do:[:ex|
+        self throwIOExceptionWithMessage: 'Cannot open zip file: ', ex description
+    ]
 
     "Modified: / 01-04-2011 / 15:35:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 01-05-2011 / 13:29:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-08-2011 / 20:56:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_util_zip_ZipFile_read: aJavaContext