src/ProxyMethodJavaMethodInvocationNode.st
branchjk_new_structure
changeset 1385 3426388640da
parent 1356 0dd28400803e
child 1388 71a9ff13de80
--- a/src/ProxyMethodJavaMethodInvocationNode.st	Fri Feb 24 17:57:26 2012 +0000
+++ b/src/ProxyMethodJavaMethodInvocationNode.st	Fri Feb 24 21:57:32 2012 +0000
@@ -83,6 +83,30 @@
     ].
 
     "Created: / 16-12-2011 / 00:26:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+unwrappedArg: arg atIndex: index
+    | argJClass |
+
+    argJClass := (descriptor parameters at: index) javaClass.
+    ^MessageNode 
+            receiver: (ConstantNode value: argJClass)
+            selector: #javaUnwrap:
+            arg: arg .
+
+    "Created: / 24-02-2012 / 20:39:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+unwrappedArgs: args
+    | unwrappedArgs |
+
+    unwrappedArgs := OrderedCollection new.
+    args withIndexDo:[:arg :idx|
+        unwrappedArgs add: (self unwrappedArg: arg atIndex: idx).    
+    ].
+    ^unwrappedArgs
+
+    "Created: / 24-02-2012 / 20:41:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ProxyMethodJavaMethodInvocationNode methodsFor:'evaluation'!
@@ -148,7 +172,10 @@
             MessageNode
                 receiver: (ConstantNode value: descriptor return javaClass)
                 selector: #javaWrap:
-                arg: (super generate: compiler). 
+                arg: (MessageNode
+                        receiver: SelfNode new
+                        selector: method selector
+                        args: (self unwrappedArgs: compiler args)). 
         ^invocation
     ].
     ^self error:'Unknown programming language'.
@@ -171,7 +198,7 @@
 
     "Created: / 22-12-2011 / 09:27:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 30-12-2011 / 15:20:08 / kursjan <kursjan@fit.cvut.cz>"
-    "Modified (comment): / 03-01-2012 / 21:18:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 24-02-2012 / 20:41:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ProxyMethodJavaMethodInvocationNode methodsFor:'testing'!