JavaObject.st
changeset 44 331e16746ad6
parent 43 2c4ca2eb8d07
child 48 1e12f315ed97
--- a/JavaObject.st	Fri May 03 18:56:04 1996 +0000
+++ b/JavaObject.st	Fri May 03 21:14:34 1996 +0000
@@ -45,6 +45,10 @@
         ^ val
     ].
 
+    retValSignature = 'String' ifTrue:[
+        ^ self stringFromJavaString:val
+    ].
+
     'no conversion for: ' print. val class name print. ' to: ' print. retValSignature printNL.
     ^ val.
 
@@ -61,6 +65,15 @@
     s instVarNamed:'offset' put: 0.
     s instVarNamed:'count'  put: aString size.
     ^ s
+!
+
+stringFromJavaString:aJavaString
+    "hard-coding internas of java.lang.String here is bad ..."
+
+    (aJavaString instVarNamed:'offset') ~~ 0 ifTrue:[self halt].
+
+    ^ ((aJavaString instVarNamed:'value') 
+        copyTo:(aJavaString instVarNamed:'count')) asString
 ! !
 
 !JavaObject methodsFor:'initialization'!
@@ -99,6 +112,18 @@
     ^ self doesNotUnderstand:(Message selector:selector)
 !
 
+invokeJava:selector with:arg1 with:arg2
+    "send javaSelector (name+sig) message, with 2 arguments"
+
+    |method|
+
+    method := self class lookupMethodFor:selector.
+    method notNil ifTrue:[
+        ^ self invokeJavaMethod:method with:arg1 with:arg2
+    ].
+    ^ self doesNotUnderstand:(Message selector:selector)
+!
+
 invokeJavaMethod:aJavaMethod
     "invoke java method, without arguments"
 
@@ -138,6 +163,29 @@
 
     ^ JavaObject convertJavaObject:val signature:(aJavaMethod retValSignature)
 
+!
+
+invokeJavaMethod:aJavaMethod with:arg1 with:arg2
+    "invoke java method, with two arguments"
+
+    |i val|
+
+    aJavaMethod numArgs ~~ 2 ifTrue:[
+        self halt:'argument count'
+    ].
+    aJavaMethod isStatic ifTrue:[
+        self halt:'static function'
+    ].
+
+    i := JavaInterpreter new.
+    i push:self.
+    i push:arg1.
+    i push:arg2.
+
+    val := i interpret:aJavaMethod sender:thisContext sender.
+
+    ^ JavaObject convertJavaObject:val signature:(aJavaMethod retValSignature)
+
 ! !
 
 !JavaObject methodsFor:'printing & storing'!
@@ -251,5 +299,5 @@
 !JavaObject class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaObject.st,v 1.8 1996/05/03 18:56:04 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaObject.st,v 1.9 1996/05/03 21:14:34 cg Exp $'
 ! !