JavaVM.st
branchdevelopment
changeset 2875 d8458cc3aabe
parent 2868 90724c4fa7f8
child 2908 064418faa2e3
equal deleted inserted replaced
2874:e62187297585 2875:d8458cc3aabe
  2683     "Modified: / 23-10-2011 / 12:01:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  2683     "Modified: / 23-10-2011 / 12:01:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  2684     "Modified: / 01-11-2011 / 15:36:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
  2684     "Modified: / 01-11-2011 / 15:36:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
  2685 !
  2685 !
  2686 
  2686 
  2687 loadClassesIn: directory
  2687 loadClassesIn: directory
  2688 "load all classes (.class files, strictly speaking) found in given directory.
  2688     "Load all classes (.class files, strictly speaking) found in given directory or .jar file.
  2689 The argument is string containing the name of the directory.
  2689 
  2690 
  2690     Returns a set of loaded classes."
  2691 Returns a set of loaded classes."
  2691 
  2692 
  2692     ^ self loadClassesIn: directory matching: '*'.
  2693 ^ self loadClassesIn: directory matching: '*'.
       
  2694 
  2693 
  2695     "Modified: / 11-06-2011 / 13:35:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  2694     "Modified: / 11-06-2011 / 13:35:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  2696     "Created: / 21-10-2011 / 12:40:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
  2695     "Created: / 21-10-2011 / 12:40:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
  2696     "Modified (comment): / 19-10-2013 / 17:32:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  2697 !
  2697 !
  2698 
  2698 
  2699 loadClassesIn: directory matching: pattern
  2699 loadClassesIn: directory matching: pattern
  2700     "load all classes (.class files, strictly speaking) found in given directory.
  2700     "Load all classes (.class files, strictly speaking) found in given directory or .jar file.
  2701      The arguments are a string containing the name of the directory
  2701      The arguments are a string containing the name of the directory or .jar file
  2702      and a class name pattern. Only classes matching the pattern are loaded.
  2702      and a class name pattern. Only classes matching the pattern are loaded.
  2703      class names are matched using String>>matches:.
  2703      class names are matched using String>>matches:.
  2704      ALL CLASSES ARE INSTALLED!!
  2704      ALL CLASSES ARE INSTALLED!!
  2705      Returns a set of loaded classes."
  2705      Returns a set of loaded classes."
  2706 
  2706 
  2707     | dir  dirString  className  loadedClasses |
  2707     | dir  dirString  className  loadedClasses |
  2708     dir := directory asFilename asAbsoluteFilename.
  2708     dir := directory asFilename asAbsoluteFilename.
  2709     loadedClasses := Set new.
  2709     loadedClasses := Set new.
  2710     Java addToClassPath: dir pathName.
  2710     Java addToClassPath: dir pathName.
  2711     JavaClassReader classLoaderQuerySignal answer: SystemClassLoader do:[
  2711     JavaClassReader classLoaderQuerySignal answer: SystemClassLoader do:[
  2712 
  2712         dir isDirectory ifTrue:[
  2713     dir
  2713             dir recursiveDirectoryContentsAsFilenamesDo: [
  2714         recursiveDirectoryContentsAsFilenamesDo: [
  2714                 :filename |
  2715             :filename |
  2715                 (filename isRegularFile and: [ filename suffix = #class ]) ifTrue: [
  2716             (filename isRegularFile and: [ filename suffix = #class ]) ifTrue: [
  2716                     dirString := dir pathName.
  2717                 dirString := dir pathName.
  2717                     className := filename withoutSuffix pathName.
  2718                 className := filename withoutSuffix pathName.
  2718                     className := className subString: dirString size + 2 to: className size.
  2719                 className := className subString: dirString size + 2 to: className size.
  2719                     className := className copyReplaceAll: (Filename separator) with: $..
  2720                 className := className copyReplaceAll: (Filename separator) with: $..
  2720                     (className matches: pattern) ifTrue: [
  2721                 (className matches: pattern) ifTrue: [
  2721                         (self classNamed: className) isNil ifTrue:[
  2722                     (self classNamed: className) isNil ifTrue:[
  2722                             loadedClasses add: (self classForName:className).
  2723                         loadedClasses add: (self classForName:className).
  2723                         ].
  2724                     ].
  2724                     ]
       
  2725                 ]
       
  2726             ].
       
  2727         ] ifFalse:[
       
  2728             | zar |
       
  2729 
       
  2730             zar := ZipArchive oldFileNamed: dir pathName.
       
  2731             zar entries do:[:entry|
       
  2732             (entry endsWith:'.class') ifTrue:[
       
  2733                 | nm |
       
  2734 
       
  2735                 nm := entry copyTo: entry size - 6.
       
  2736                 className := nm copyReplaceAll: (Filename separator) with: $.. 
       
  2737                     (className matches: pattern) ifTrue: [
       
  2738                         (self classNamed: className) isNil ifTrue:[
       
  2739                             loadedClasses add: (self classForName:className).
       
  2740                         ].
       
  2741                     ]
  2725                 ]
  2742                 ]
  2726             ]
  2743             ]
  2727         ].
  2744         ].
  2728     ].
  2745     ].
  2729     ^ loadedClasses.
  2746     ^ loadedClasses.
  2730 
  2747 
  2731     "Modified: / 21-10-2011 / 12:52:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
  2748     "Modified: / 21-10-2011 / 12:52:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
  2732     "Modified: / 30-10-2011 / 14:02:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  2749     "Modified (comment): / 19-10-2013 / 17:32:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  2733 ! !
  2750 ! !
  2734 
  2751 
  2735 !JavaVM class methodsFor:'class loading/unloading'!
  2752 !JavaVM class methodsFor:'class loading/unloading'!
  2736 
  2753 
  2737 loadClassNamed: className usingClassLoader: classLoader
  2754 loadClassNamed: className usingClassLoader: classLoader