refactored registry..
--- a/src/Java.st Fri Oct 21 09:37:44 2011 +0000
+++ b/src/Java.st Fri Oct 21 12:49:05 2011 +0000
@@ -165,12 +165,12 @@
java_lang_String
Java_lang_String isNil ifTrue: [
- Java_lang_String := JavaVM at: 'java/lang/String'.
+ Java_lang_String := JavaVM classNamed: 'java/lang/String'.
].
^ Java_lang_String.
- "Created: 26.3.1997 / 13:43:17 / cg"
- "Modified: 26.3.1997 / 13:50:21 / cg"
+ "Created: / 26-03-1997 / 13:43:17 / cg"
+ "Modified: / 21-10-2011 / 13:41:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
prettyPrintStyle
--- a/src/JavaClassReader.st Fri Oct 21 09:37:44 2011 +0000
+++ b/src/JavaClassReader.st Fri Oct 21 12:49:05 2011 +0000
@@ -224,25 +224,11 @@
!
readClass: className ignoring: classesBeingLoadedOrNil
- "reads a class, and returns it.
- <clinit> is called, class is not installed
-
- className expected format:
- foo.bar.Baz - normal class
- foo/bar/Baz - alternative format
- [[Lfoo/bar/Baz; - array
- [[I - primitive array"
+ "searches classspath for a class, loads it and returns.
+ <clinit> is not called, class is not installed as global"
- | rslt clsName cls classesBeingLoaded |
-
- (JavaDescriptor isJavaPrimitiveArrayName: className) ifTrue: [
- ^ (JavaDescriptor fromString: className) javaClass.
- ].
- clsName := className asSTXInternalJavaClassName.
- (cls := JavaVM at: clsName) ifNotNil: [ ^ cls. ].
- (classesBeingLoadedOrNil notNil
- and: [ classesBeingLoadedOrNil includes: clsName ])
- ifTrue: [ self halt: 'recursive load - should not happen'. ].
+ | rslt clsName classesBeingLoaded |
+ clsName := className asInternalJavaClassName.
classesBeingLoadedOrNil isNil ifTrue: [
classesBeingLoaded := Set with: clsName
] ifFalse: [
@@ -253,7 +239,6 @@
Java effectiveClassPath do: [
:path |
| nm p zar entry zipFile read |
-
p := path.
p asFilename isDirectory ifTrue: [
(p endsWith: Filename separator) ifFalse: [
@@ -301,10 +286,12 @@
]
]
].
+ self halt.
"Created: / 15-04-1996 / 14:58:53 / cg"
"Modified: / 20-10-1998 / 17:24:54 / cg"
"Modified: / 08-09-2011 / 08:10:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 21-10-2011 / 13:39:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
readFile: aFilename ignoring: classesBeingLoaded
@@ -361,29 +348,6 @@
"Modified: / 14-09-2011 / 22:21:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
-!JavaClassReader class methodsFor:'helpers'!
-
-getCleanClassNameFrom: className
- | cleanClassName |
-
- cleanClassName := className utf8Encoded.
- (cleanClassName matches: '*\[*') ifTrue: [
- cleanClassName := cleanClassName
- copyFrom: (cleanClassName lastIndexOf: $[) + 1
- to: cleanClassName size.
- ].
- (cleanClassName startsWith:$L) ifTrue: [cleanClassName := cleanClassName copyFrom:2 to: cleanClassName size - 1].
- (cleanClassName endsWith: '[]') ifTrue: [
- ('oops - loading of ' , className , ' not supported') infoPrintCR.
- self halt: 'should not happen'.
- ^ nil
- ].
- (cleanClassName includes: $.) ifTrue: [
- cleanClassName := cleanClassName asString copyReplaceAll: $. with: $/
- ].
- ^ cleanClassName.
-! !
-
!JavaClassReader class methodsFor:'obsolete'!
resolveClass: aJavaClass
--- a/src/JavaClassReaderTests.st Fri Oct 21 09:37:44 2011 +0000
+++ b/src/JavaClassReaderTests.st Fri Oct 21 12:49:05 2011 +0000
@@ -98,11 +98,14 @@
!JavaClassReaderTests class methodsFor:'resources'!
resources
- ^ Array with: JavaInitializedResource with: JavaTestsResource with: JavaLibrariesResource.
+ ^ Array
+ with: JavaInitializedResource
+ with: JavaTestsResource
+ with: JavaLibrariesResource.
"Created: / 15-03-2011 / 15:48:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 16-03-2011 / 14:45:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 04-06-2011 / 18:06:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 21-10-2011 / 13:09:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaClassReaderTests methodsFor:'setUp'!
@@ -120,7 +123,7 @@
!JavaClassReaderTests methodsFor:'testing'!
testLoadClassesInGivenRootDir
- JavaClassReader
+ JavaVM
loadClassesIn: ((UserPreferences current javaTestsDirectory) asFilename
/ 'libjava' / 'bin').
self
@@ -128,7 +131,7 @@
"Created: / 16-03-2011 / 21:31:28 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 07-04-2011 / 23:16:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 04-06-2011 / 18:07:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 21-10-2011 / 13:05:42 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaClassReaderTests class methodsFor:'documentation'!
--- a/src/JavaClassRegistry.st Fri Oct 21 09:37:44 2011 +0000
+++ b/src/JavaClassRegistry.st Fri Oct 21 12:49:05 2011 +0000
@@ -143,31 +143,6 @@
!JavaClassRegistry methodsFor:'class loading'!
-loadClassNamed: className
- | result |
-self assert: (className includes: $[) not.
- result := JavaClassReader readClass: className asSTXInternalJavaClassName.
- "java class or primitive array can be in result"
- result isJavaClass ifTrue: [
- self addClass: result definedBy: result classLoader.
- ].
- ^ result.
-!
-
-loadClassNamed: className using: classLoader
- | classObject result |
-
- self assert: (className includes: $[) not.
- self assert: classLoader isNil not.
- classObject := classLoader
- perform: #'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
- with: (Java as_String: (className asNiceJavaClassName)).
- result := JavaVM classForJavaClassObject: classObject.
- result isJavaClass ifFalse: [ self breakPoint: #mh. ].
- self addClass: result definedBy: result classLoader.
- ^ result.
-!
-
loadFile: aFilename
"reads a class from aFilename, installs and returns it."
@@ -211,32 +186,6 @@
^ javaClass
! !
-!JavaClassRegistry methodsFor:'classes'!
-
-addClass: aJavaClass definedBy: classLoader
- | classesDefinedByClassLoader |
-
- classesDefinedByClassLoader := classLoadersAndClasses at: classLoader
- ifAbsentPut: [ Dictionary new ].
- classesDefinedByClassLoader at: aJavaClass name put: aJavaClass.
-!
-
-getPrimitiveType: className
- ^ (JavaDescriptor fromString: className) javaClass.
-!
-
-makeArrayOf: loadedJavaClass asDescribedBy: className
- | arrayClass dimensions |
-
- arrayClass := loadedJavaClass.
- dimensions := className occurrencesOf:$[.
- arrayClass isJavaArrayClass ifTrue: [
- "is already array (primitive arrays case, like ByteArray etc)"
- dimensions := dimensions - 1.].
- dimensions timesRepeat: [ arrayClass := arrayClass javaArrayClass. ].
- ^ arrayClass.
-! !
-
!JavaClassRegistry methodsFor:'initialization'!
flush
@@ -252,6 +201,14 @@
!JavaClassRegistry methodsFor:'public api'!
+addClass: aJavaClass definedBy: classLoader
+ | classesDefinedByClassLoader |
+
+ classesDefinedByClassLoader := classLoadersAndClasses at: classLoader
+ ifAbsentPut: [ Dictionary new ].
+ classesDefinedByClassLoader at: aJavaClass name put: aJavaClass.
+!
+
at: className
^ self at: nil at: className ifAbsent: nil.
!
@@ -262,91 +219,24 @@
at: classLoader at: className ifAbsent: aBlock
"get class loaded by classLoader from registry. Don't load if not found in registry"
- className asJavaComponentClassName isJavaPrimitiveTypeDescriptor ifTrue: [
- ^ self getPrimitiveType: className
- ].
+
^ (classLoadersAndClasses at: classLoader
ifAbsent: [ self halt: 'cannot find given classLoader in registry' ])
at: className
ifAbsent: aBlock.
-!
-classForName: className
- "you should be damn sure you don't have class loader"
- ^ self classForName: className definedBy:nil.
-!
-
-classForName: className definedBy: aJavaClassLoader
- "get class from registry, if not present, load it from classPath. Use given classLoader, if nil, it will use native one"
-
- | result cleanClassName |
-
- cleanClassName := className asSTXInternalJavaClassName.
- cleanClassName isJavaPrimitiveTypeDescriptor ifTrue: [
- ^ self getPrimitiveType: className
- ].
- result := self
- at: aJavaClassLoader
- at: cleanClassName
- ifAbsent: [
- aJavaClassLoader
- ifNil: [ self loadClassNamed: cleanClassName ]
- ifNotNil: [ self loadClassNamed: cleanClassName using: aJavaClassLoader ]
- ].
- (result isJavaClass and: [ result isInitialized not ]) ifTrue: [
- self breakPoint: #mh
- ].
- (className isJavaArrayDescriptor) ifTrue: [
- ^ self makeArrayOf: result asDescribedBy: className.
- ] ifFalse: [ ^ result ].
+ "Modified: / 21-10-2011 / 12:39:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
-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: '*'.
-
-"Modified: / 11-06-2011 / 13:35:08 / 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
- and a class name pattern. Only classes matching the pattern are loaded.
- class names are matched using String>>matches:.
- ALL CLASSES ARE INSTALLED!!
- Returns a set of loaded classes."
+at: classLoader at: className ifAbsentPut: aBlock
+ "get class loaded by classLoader from registry. if absent, aBlock should return class to be added"
- | dir dirString className loadedClasses |
+ ^ (classLoadersAndClasses at: classLoader
+ ifAbsent: [ self halt: 'cannot find given classLoader in registry' ])
+ at: className
+ ifAbsentPut: aBlock.
- dir := directory asFilename asAbsoluteFilename.
- loadedClasses := Set new.
- Java addToClassPath: dir pathName.
- 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: [
- | loadedClass |
-
- loadedClass := self loadClassNamed: className.
- self addClass: loadedClass definedBy: nil.
- loadedClasses add: loadedClass.
- ]
- ]
- ].
- ^ loadedClasses.
-
- "Modified: / 29-04-2011 / 17:43:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Created: / 11-06-2011 / 13:34:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 11-06-2011 / 16:19:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Created: / 21-10-2011 / 12:00:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaClassRegistry class methodsFor:'documentation'!
--- a/src/JavaDecompiler.st Fri Oct 21 09:37:44 2011 +0000
+++ b/src/JavaDecompiler.st Fri Oct 21 12:49:05 2011 +0000
@@ -477,7 +477,7 @@
space.
superClass := aJavaClass superclass.
- (superClass ~~ (JavaVM at:'java/lang/Object')
+ (superClass ~~ (JavaVM classNamed:'java/lang/Object')
and:[superClass isJavaClass]) ifTrue:[
s nextPutAll:'extends '.
s emphasis:classNameStyle.
@@ -671,8 +671,9 @@
s nextPutAll:'}'; cr.
- "Created: / 22.3.1997 / 14:29:37 / cg"
- "Modified: / 5.12.1998 / 15:58:37 / cg"
+ "Created: / 22-03-1997 / 14:29:37 / cg"
+ "Modified: / 05-12-1998 / 15:58:37 / cg"
+ "Modified: / 21-10-2011 / 13:40:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
methodDefinitionOf: m inPackage: pckgName on: s
--- a/src/JavaResolver.st Fri Oct 21 09:37:44 2011 +0000
+++ b/src/JavaResolver.st Fri Oct 21 12:49:05 2011 +0000
@@ -254,10 +254,10 @@
!
lookupClassIfAlreadyResolved: javaClassName
- ^ JavaVM at: javaClassName
+ ^ JavaVM classNamed: javaClassName
- "Modified: / 13-04-2011 / 14:05:25 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 06-08-2011 / 16:44:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 21-10-2011 / 13:40:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
validateClassRef: aJavaClassRef
--- a/src/JavaVM.st Fri Oct 21 09:37:44 2011 +0000
+++ b/src/JavaVM.st Fri Oct 21 12:49:05 2011 +0000
@@ -1892,12 +1892,6 @@
"Modified: / 24.12.1999 / 02:18:25 / cg"
!
-loadClassesIn:dir matching:pattern
- ^ ClassRegistry loadClassesIn:dir matching:pattern.
-
- "Modified (format): / 21-10-2011 / 11:08:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
reinitializeVM
|classesToInit|
@@ -2188,24 +2182,6 @@
"Created: / 24-11-2010 / 09:02:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-at:aString
- ^ ClassRegistry at:self classLoaderQuerySignal query at:aString.
-!
-
-at:aString put:aJavaClass
- ^ ClassRegistry addClass:aJavaClass
- definedBy:self classLoaderQuerySignal query.
-!
-
-classForName:aString
- ^ ClassRegistry classForName:aString
- definedBy:self classLoaderQuerySignal query.
-!
-
-classNamed:aString
- ^ ClassRegistry at:self classLoaderQuerySignal query at:aString.
-!
-
classRegistry
^ ClassRegistry.
@@ -2256,6 +2232,137 @@
"Created: / 23-02-2011 / 12:59:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!JavaVM class methodsFor:'class access'!
+
+at: aString
+ self breakPoint: #mh.
+ "dont use me anymore"
+ ^ ClassRegistry at: self classLoaderQuerySignal query at: aString.
+
+ "Modified (comment): / 21-10-2011 / 12:14:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+at: aString put: aJavaClass
+ self breakPoint: #mh.
+ "dont use me anymore"
+ ^ ClassRegistry addClass: aJavaClass
+ definedBy: self classLoaderQuerySignal query.
+
+ "Modified (comment): / 21-10-2011 / 12:14:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+classForName: className
+ "load class from registry - load using classLoader from query or JavaClassReader if absent"
+
+ ^self classForName: className definedBy: self classLoaderQuerySignal query.
+
+ "Modified: / 21-10-2011 / 12:08:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+classForName: className definedBy: classLoader
+ "load class from registry - load using given classLoader if not nil"
+
+ ^ self
+ classForName: className
+ definedBy: classLoader
+ ifAbsentPut: [
+ classLoader
+ ifNil: [ JavaClassReader readClass: className asInternalJavaClassName. ]
+ ifNotNil: [
+ | classObject |
+ classObject := classLoader
+ perform: #'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
+ with: (Java as_String: (className asJavaishClassName)).
+ self classForJavaClassObject: classObject.
+ ]
+ ].
+
+ "Created: / 21-10-2011 / 12:01:16 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+classForName: className definedBy: classLoader ifAbsentPut: aBlock
+ "load class from registry - if absent evaluate given block to get loaded class"
+
+ | result |
+ className asJavaComponentClassName isJavaPrimitiveTypeDescriptor ifTrue: [
+ ^ (JavaDescriptor fromString: className) javaClass.
+ ].
+ result := ClassRegistry
+ at: classLoader
+ at: className asInternalJavaClassName
+ ifAbsentPut: aBlock.
+ ^ self makeArrayOf: result asDescribedBy: className.
+
+ "Created: / 21-10-2011 / 12:13:08 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+classNamed: className
+ "Return class with given name loaded by current classloader or nil if class is not yet loaded"
+
+ ^ self classNamed: className definedBy: self classLoaderQuerySignal query.
+
+ "Modified: / 21-10-2011 / 12:09:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified (comment): / 21-10-2011 / 13:34:46 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+classNamed: className definedBy: classLoader
+ "Return class with given name loaded by given classloader or nil if class is not yet loaded"
+
+ | result |
+ className asJavaComponentClassName isJavaPrimitiveTypeDescriptor ifTrue: [
+ ^ (JavaDescriptor fromString: className) javaClass.
+ ].
+ result := ClassRegistry at: classLoader
+ at: className asInternalJavaClassName.
+ result ifNil: [ ^ nil ].
+ ^ self makeArrayOf: result asDescribedBy: className.
+
+ "Created: / 21-10-2011 / 11:58:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+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: '*'.
+
+ "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>"
+!
+
+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
+ and a class name pattern. Only classes matching the pattern are loaded.
+ class names are matched using String>>matches:.
+ ALL CLASSES ARE INSTALLED!!
+ Returns a set of loaded classes."
+
+ | dir dirString className loadedClasses |
+ dir := directory asFilename asAbsoluteFilename.
+ loadedClasses := Set new.
+ Java addToClassPath: dir pathName.
+ 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: [
+ loadedClasses add: (self classForName:className).
+ ]
+ ]
+ ].
+ ^ loadedClasses.
+
+ "Modified (format): / 21-10-2011 / 11:08:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 21-10-2011 / 12:52:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+
!JavaVM class methodsFor:'debugging support'!
exceptionDebug
@@ -2537,8 +2644,7 @@
| sc tc |
-
- "Not specified in JVM spec, sigh"
+ "Not specified in JVM spec, sigh"
s isJavaPrimitiveType ifTrue: [
"FIXME"
^ s == t
@@ -2557,7 +2663,7 @@
- If T is an interface type, then S must implement interface T.
"
(s isJavaArrayClass not and: [ s isInterface not ]) ifTrue: [
- ^(s includesBehavior: t).
+ ^ (s includesBehavior: t).
].
"
- If S is an interface type, then:
@@ -2579,7 +2685,7 @@
"
- If T is a class type, then T must be Object.
"
- t isJavaClassType ifTrue: [ ^ t == (self classForName: 'java.lang.Object') ].
+ t isJavaClassType ifTrue: [ ^ (sc == t) or: [t == (self classForName: 'java.lang.Object') ]].
"
- If T is an array type TC[], that is, an array of components of type TC ,
then one of the following must be true:
@@ -2604,6 +2710,7 @@
"Modified: / 09-01-1999 / 00:45:21 / cg"
"Created: / 11-02-2011 / 08:21:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 14-08-2011 / 23:14:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 21-10-2011 / 13:50:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
javaArrayClassFor:aClass
@@ -2644,6 +2751,21 @@
"Created: / 3.1.1998 / 01:53:41 / cg"
!
+makeArrayOf: loadedJavaClass asDescribedBy: className
+| arrayClass dimensions |
+
+arrayClass := loadedJavaClass.
+dimensions := className occurrencesOf: $[.
+arrayClass isJavaArrayClass ifTrue: [
+"is already array (primitive arrays case, like ByteArray etc)"
+dimensions := dimensions - 1.
+].
+dimensions timesRepeat: [ arrayClass := arrayClass javaArrayClass. ].
+ ^ arrayClass.
+
+ "Created: / 21-10-2011 / 12:18:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
newThread: name
| thread threadClass i |
@@ -6448,7 +6570,7 @@
"/ debugging only
"/
- (exceptionObject isKindOf: (JavaVM at: 'java/lang/Throwable')) ifFalse: [
+ (exceptionObject isKindOf: (JavaVM classNamed: 'java/lang/Throwable')) ifFalse: [
self halt
].
con := thisContext sender.
@@ -6477,8 +6599,9 @@
exceptionObject instVarNamed: 'backtrace' put: (list asArray).
^ nil.
- "Created: / 4.1.1998 / 14:27:40 / cg"
- "Modified: / 8.5.1998 / 21:29:53 / cg"
+ "Created: / 04-01-1998 / 14:27:40 / cg"
+ "Modified: / 08-05-1998 / 21:29:53 / cg"
+ "Modified: / 21-10-2011 / 13:41:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
_java_lang_Throwable_getStackTraceDepth: nativeContext
@@ -16446,7 +16569,7 @@
(by sending #javaClassObjectForClass:)"
(javaClasses at: aJavaClassObject ifAbsent: [ 123 ])
- == (JavaVM at: 'stx/libjava/tests/junir/JUnit3Tests')
+ == (JavaVM classNamed: 'stx/libjava/tests/junir/JUnit3Tests')
ifTrue: [ self breakPoint: #jv ].
^ javaClasses at: aJavaClassObject
ifAbsent: [
@@ -16459,6 +16582,7 @@
"Created: / 28-01-2011 / 15:22:39 / Marcel Hlopko <hlopik@gmail.com>"
"Modified: / 05-02-2011 / 20:26:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 21-10-2011 / 13:41:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
javaArrayClassObjectForClass:aClass
--- a/src/extensions.st Fri Oct 21 09:37:44 2011 +0000
+++ b/src/extensions.st Fri Oct 21 12:49:05 2011 +0000
@@ -12,6 +12,22 @@
! !
!CharacterArray methodsFor:'java conversions'!
+asInternalJavaClassName
+ "removes square brackets and adds slashes"
+ | internalName |
+ internalName := self asJavaComponentClassName.
+ (internalName startsWith: $L) ifTrue: [
+ internalName := internalName copyFrom: 2 to: internalName size - 1
+ ].
+ (internalName includes: $.) ifTrue: [
+ internalName := internalName asString copyReplaceAll: $. with: $/
+ ].
+ ^ internalName.
+
+ "Created: / 21-10-2011 / 12:31:51 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+!CharacterArray methodsFor:'java conversions'!
+
asJavaComponentClassName
| componentClassName |
@@ -25,6 +41,18 @@
! !
!CharacterArray methodsFor:'java conversions'!
+asJavaishClassName
+ "
+ examples:
+ java.lang.String
+ [[[Ljava/lang/Object; => java.lang.Object
+ "
+ self asJavaComponentClassName asNiceJavaClassName.
+
+ "Created: / 21-10-2011 / 12:33:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+!CharacterArray methodsFor:'java conversions'!
+
asNiceJavaClassName
| niceName |