JavaArray.st
changeset 2353 fa7400d022a0
parent 2296 d8932033cb01
child 2380 9195eccdcbd9
child 2396 fadc6d7a2f5b
--- a/JavaArray.st	Sat Feb 02 01:23:18 2013 +0100
+++ b/JavaArray.st	Sat Feb 16 19:08:45 2013 +0100
@@ -1,7 +1,10 @@
 "
  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 (*)
+                            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
@@ -10,8 +13,10 @@
  other person.  No title to or ownership of the software is
  hereby transferred.
 
- (*) extensions, changes and fixes for java1.1 compatibility.
-     For a list of changes, see a list of diffs against the last stable version before 2011-08.
+ [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' }"
 
@@ -34,8 +39,11 @@
 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 (*)
+                            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
@@ -44,14 +52,30 @@
  other person.  No title to or ownership of the software is
  hereby transferred.
 
- (*) extensions, changes and fixes for java1.1 compatibility.
-     For a list of changes, see a list of diffs against the last stable version before 2011-08.
+ [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.
 
@@ -60,6 +84,13 @@
 
 !JavaArray class methodsFor:'accessing'!
 
+classLoader
+
+    ^self javaComponentClass classLoader
+
+    "Created: / 31-08-2011 / 22:22:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 javaClass
     ^ self
 
@@ -73,6 +104,11 @@
 !
 
 javaName
+
+    componentClass isJavaArrayClass ifTrue:[
+        ^'[' , componentClass javaName.
+    ].
+
     ^'[L' , componentClass javaName, ';'
 
     "Created: / 25-02-2011 / 19:29:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -94,6 +130,62 @@
     "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
@@ -103,31 +195,30 @@
     "Created: / 11-06-2011 / 23:35:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-javaArrayClassFor: aJavaClass
-
-    | meta cls |
+javaArrayClassFor: aJavaClass 
+    | meta  cls |
 
-    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: (Java classForName: 'java.lang.Object') methodDictionary.
-
-    ^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: / 01-03-2011 / 14:55:55 / 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'!
@@ -225,14 +316,16 @@
 
 !JavaArray class methodsFor:'documentation'!
 
-version
-    ^ '$Header: /cvs/stx/stx/libjava/JavaArray.st,v 1.3 2011-11-24 11:54:36 cg Exp $'
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libjava/JavaArray.st,v 1.4 2013-02-16 18:08:32 vrany Exp $'
 !
 
-version_CVS
-    ^ '$Header: /cvs/stx/stx/libjava/JavaArray.st,v 1.3 2011-11-24 11:54:36 cg Exp $'
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
 !
 
 version_SVN
-    ^ '§Id: JavaArray.st,v 1.1 2011/08/18 19:06:53 vrany Exp §'
+    ^ '§Id§'
 ! !
+