Make JavaVM>>#loadClassesIn: to work with .jar files as well.
--- a/JavaVM.st Fri Oct 18 16:55:19 2013 +0100
+++ b/JavaVM.st Sat Oct 19 17:38:22 2013 +0100
@@ -2685,20 +2685,20 @@
!
loadClassesIn: directory
-"load all classes (.class files, strictly speaking) found in given directory.
-The argument is string containing the name of the directory.
-
-Returns a set of loaded classes."
-
-^ self loadClassesIn: directory matching: '*'.
+ "Load all classes (.class files, strictly speaking) found in given directory or .jar file.
+
+ Returns a set of loaded classes."
+
+ ^ self loadClassesIn: directory matching: '*'.
"Modified: / 11-06-2011 / 13:35:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Created: / 21-10-2011 / 12:40:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified (comment): / 19-10-2013 / 17:32:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
loadClassesIn: directory matching: pattern
- "load all classes (.class files, strictly speaking) found in given directory.
- The arguments are a string containing the name of the directory
+ "Load all classes (.class files, strictly speaking) found in given directory or .jar file.
+ The arguments are a string containing the name of the directory or .jar file
and a class name pattern. Only classes matching the pattern are loaded.
class names are matched using String>>matches:.
ALL CLASSES ARE INSTALLED!!
@@ -2709,19 +2709,36 @@
loadedClasses := Set new.
Java addToClassPath: dir pathName.
JavaClassReader classLoaderQuerySignal answer: SystemClassLoader do:[
-
- dir
- recursiveDirectoryContentsAsFilenamesDo: [
- :filename |
- (filename isRegularFile and: [ filename suffix = #class ]) ifTrue: [
- dirString := dir pathName.
- className := filename withoutSuffix pathName.
- className := className subString: dirString size + 2 to: className size.
- className := className copyReplaceAll: (Filename separator) with: $..
- (className matches: pattern) ifTrue: [
- (self classNamed: className) isNil ifTrue:[
- loadedClasses add: (self classForName:className).
- ].
+ dir isDirectory ifTrue:[
+ dir recursiveDirectoryContentsAsFilenamesDo: [
+ :filename |
+ (filename isRegularFile and: [ filename suffix = #class ]) ifTrue: [
+ dirString := dir pathName.
+ className := filename withoutSuffix pathName.
+ className := className subString: dirString size + 2 to: className size.
+ className := className copyReplaceAll: (Filename separator) with: $..
+ (className matches: pattern) ifTrue: [
+ (self classNamed: className) isNil ifTrue:[
+ loadedClasses add: (self classForName:className).
+ ].
+ ]
+ ]
+ ].
+ ] ifFalse:[
+ | zar |
+
+ zar := ZipArchive oldFileNamed: dir pathName.
+ zar entries do:[:entry|
+ (entry endsWith:'.class') ifTrue:[
+ | nm |
+
+ nm := entry copyTo: entry size - 6.
+ className := nm copyReplaceAll: (Filename separator) with: $..
+ (className matches: pattern) ifTrue: [
+ (self classNamed: className) isNil ifTrue:[
+ loadedClasses add: (self classForName:className).
+ ].
+ ]
]
]
].
@@ -2729,7 +2746,7 @@
^ loadedClasses.
"Modified: / 21-10-2011 / 12:52:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 30-10-2011 / 14:02:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (comment): / 19-10-2013 / 17:32:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!JavaVM class methodsFor:'class loading/unloading'!