JavaArray.st
branchdirectory_structure_refactoring
changeset 1818 2e5ed72e7dfd
parent 1805 4367809f7516
child 1864 60a8dc26c8c6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/JavaArray.st	Thu Nov 15 22:10:02 2012 +0000
@@ -0,0 +1,321 @@
+"
+ COPYRIGHT (c) 1996-2011 by Claus Gittinger
+
+ New code and modifications done at SWING Research Group [1]:
+
+ COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
+                            SWING Research Group, Czech Technical University in Prague
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+
+ [1] Code written at SWING Research Group contains a signature
+     of one of the above copright owners. For exact set of such code,
+     see the differences between this version and version stx:libjava
+     as of 1.9.2010
+"
+"{ Package: 'stx:libjava' }"
+
+Array variableSubclass:#JavaArray
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Languages-Java-Classes'
+!
+
+JavaArray class instanceVariableNames:'componentClass'
+
+"
+ No other class instance variables are inherited by this class.
+"
+!
+
+!JavaArray class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1996-2011 by Claus Gittinger
+
+ New code and modifications done at SWING Research Group [1]:
+
+ COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
+                            SWING Research Group, Czech Technical University in Prague
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+
+ [1] Code written at SWING Research Group contains a signature
+     of one of the above copright owners. For exact set of such code,
+     see the differences between this version and version stx:libjava
+     as of 1.9.2010
+
+"
+! !
+
+!JavaArray class methodsFor:'initialization'!
+
+classInit
+
+    componentClass isJavaClass ifTrue:[
+        ^componentClass classInit
+    ].
+    componentClass isJavaArrayClass ifTrue:[
+        componentClass javaComponentClass isJavaPrimitiveType ifFalse:[
+            ^componentClass classInit
+        ]
+    ]
+
+    "Created: / 21-10-2011 / 11:03:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+setComponentClass:aClass
+    componentClass := aClass.
+
+    "Created: / 17-12-2010 / 13:25:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaArray class methodsFor:'accessing'!
+
+classLoader
+
+    ^self javaComponentClass classLoader
+
+    "Created: / 31-08-2011 / 22:22:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+javaClass
+    ^ self
+
+    "Created: / 19-12-2010 / 17:09:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+javaComponentClass
+    ^ componentClass
+
+    "Created: / 20-12-2010 / 22:02:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+javaName
+
+    componentClass isJavaArrayClass ifTrue:[
+        ^'[' , componentClass javaName.
+    ].
+
+    ^'[L' , componentClass javaName, ';'
+
+    "Created: / 25-02-2011 / 19:29:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+javaPackage
+
+    ^componentClass javaPackage
+
+    "Created: / 22-05-2011 / 18:07:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+lookupMethodByNameAndType: aJavaNameAndType 
+
+    "Trick, since java arrays should respond to all messages
+     understood by java.lang.object"    
+    ^ (Java at:'java.lang.Object') lookupMethodByNameAndType: aJavaNameAndType
+
+    "Created: / 22-05-2011 / 18:03:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaArray class methodsFor:'accessing - java'!
+
+javaMirrorClass
+    ^self == JavaArray ifTrue:[
+        super javaMirrorClass
+    ] ifFalse:[
+        JavaMirror mirrorClassForJavaArray
+    ]
+
+    "Created: / 31-07-2012 / 18:28:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaArray class methodsFor:'autoboxing support'!
+
+javaUnwrap: anObject
+   "Given a Java array, create a corresponding Smalltalk array.
+    Called by interop proxies"
+
+    | sarray |
+
+    sarray := Array new: anObject size.
+    1 to: sarray size do:[:i|
+        sarray at: i put: (componentClass javaUnwrap: (anObject at: i)).
+    ].
+    ^sarray.
+
+    "Created: / 18-04-2012 / 08:23:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+javaWrap: anObject
+   "Given a Smalltalk array, create a corresponding Java array.
+    Called by interop proxies"
+
+    | jarray |
+
+    self assert: anObject isSequenceable.
+    jarray := self new: anObject size.
+    1 to: jarray size do:[:i|
+        jarray at: i put: (componentClass javaWrap: (anObject at: i)).
+    ].
+    ^jarray.
+
+    "Created: / 18-04-2012 / 08:21:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+javaWrapRequired
+    "Returns true, if a #javaWrap: has to be called
+     prior an instance of Smalltalk object is passed 
+     as an argument to Java method, whoose formal tyoe
+     is the receiver. "
+
+    ^ true
+
+    "Created: / 04-11-2012 / 23:33:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaArray class methodsFor:'class creation'!
+
+javaArrayClass
+
+    ^self javaArrayClassFor: self.
+
+    "Created: / 11-06-2011 / 23:35:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+javaArrayClassFor: aJavaClass 
+    | meta  cls |
+
+    ^JavaVM arrayClassFor: aJavaClass ifAbsentPut:[
+        meta := Metaclass new.
+        meta setSuperclass: JavaArray class.
+        meta instSize: JavaArray class instSize.
+        cls := meta new.
+        cls setSuperclass: JavaArray.
+        cls flags: JavaArray flags.
+        cls instSize: JavaArray instSize.
+        cls setComponentClass: aJavaClass.
+        cls setName: (aJavaClass name , '[]') asSymbol.
+         "Kludge, spec says" "All methods of class Object may be invoked on an array."
+        cls setMethodDictionary: (JavaVM classForName: 'java.lang.Object') 
+                    methodDictionary.
+        cls
+    ]
+    "
+        JavaArray javaArrayClassFor: Object
+    "
+
+    "Created: / 17-12-2010 / 13:45:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 05-07-2012 / 23:23:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaArray class methodsFor:'queries'!
+
+hasInterface:aJavaInterface
+    "return true, if I respond to all methods as
+     aJavaInterface"
+
+    ^false
+
+    "Modified: / 19-12-2010 / 16:45:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isAbstract
+    "return true, if the receiver is abstract
+     (i.e. may not have instances)"
+
+    ^ false
+
+    "Modified: / 19-12-2010 / 16:45:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isFinal
+    "return true, if the receiver is final
+     (i.e. may not be subclassed)"
+
+    ^ false
+
+    "Modified: / 19-12-2010 / 16:45:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isInitialized
+    "return true, if the receiver is initialized"
+
+    ^ true
+
+    "Modified: / 07-05-1998 / 12:23:54 / cg"
+    "Modified: / 19-12-2010 / 16:45:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isInterface
+    "return true, if the receiver is an interface"
+
+    ^ false
+
+    "Modified: / 07-05-1998 / 12:23:39 / cg"
+    "Modified: / 19-12-2010 / 16:45:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isJavaArrayClass
+
+    ^true
+
+    "Created: / 19-12-2010 / 17:05:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isJavaReferenceType
+
+    ^true
+
+    "Created: / 20-12-2010 / 21:58:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isJavaType
+
+    ^true
+
+    "Created: / 20-12-2010 / 21:58:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isObsolete
+    "return true, if the receiver is obsolete
+     Java classes are never."
+
+    ^ false
+
+    "Modified: / 07-08-1997 / 19:04:28 / cg"
+    "Modified: / 19-12-2010 / 16:45:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isPublic
+    "return true, if the receiver is public"
+
+    ^ true
+
+    "Modified: / 19-12-2010 / 16:45:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isUnresolved
+
+    ^false
+
+    "Created: / 21-12-2010 / 12:51:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaArray class methodsFor:'documentation'!
+
+version_SVN
+    ^ '$Id$'
+! !