Bugfix for Java extension methods.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 01 May 2013 19:04:13 +0200
changeset 3247 09f7b7abf87c
parent 3246 ac9dc57ea097
child 3248 d892aad61780
Bugfix for Java extension methods. Fixes RegressionTests>>ChangeSetTests - test_MethodDefinitionChange_jextension_01a - test_MethodDefinitionChange_jextension_01b
ChangeSet.st
--- a/ChangeSet.st	Wed May 01 10:33:15 2013 +0200
+++ b/ChangeSet.st	Wed May 01 19:04:13 2013 +0200
@@ -2277,23 +2277,33 @@
 classNameOfRememberingNamespace:aReceiver
     "new"
 
-    | nameSpace clsName rr|
-
+    | nameSpace isMeta clsNode clsName |
     nameSpace := Class nameSpaceQuerySignal query.
 
-    (aReceiver isUnaryMessage) ifTrue:[
-        rr := aReceiver receiver.
-        (aReceiver selector == #classSide) ifTrue:[
-            clsName := (rr name) , ' classSide'
-        ] ifFalse:[
-            (aReceiver selector == #class) ifTrue:[
-                clsName := (rr name) , ' class'
-            ] ifFalse:[
-                self error:'unhandled receiver message'.
-            ].
-        ]
+    isMeta := false.
+    classIsJava := false.
+
+
+    (aReceiver isUnaryMessage and:[aReceiver selector == #class]) ifTrue:[
+        isMeta := true.
+        clsNode := aReceiver receiver.
     ] ifFalse:[
-        clsName := aReceiver name.
+        clsNode := aReceiver.
+    ].
+
+    clsNode isMessage ifFalse:[
+        "Normal smalltalk method on Smalltalk class"
+        clsName := clsNode name
+    ] ifTrue:[
+        "Maybe a Java class?"
+        ((clsNode selector == #classForName:) and:[clsNode receiver name = 'Java']) ifTrue:[
+            clsName := '(Java classForName:''%1'')' bindWith: clsNode arguments first value.
+            classIsJava := true.
+        ].
+    ].
+
+    isMeta ifTrue:[
+        clsName := clsName , ' class'.
     ].
 
     (nameSpace ~~ Smalltalk and:[(clsName startsWith: nameSpace name) not])
@@ -2308,7 +2318,7 @@
             ^ clsName
         ].
 
-    "Modified: / 24-01-2012 / 17:07:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 01-05-2013 / 17:57:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 extractMethodsClassAndSelectorFromReceiver
@@ -4468,11 +4478,11 @@
 !ChangeSet class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.225 2013-05-01 08:33:15 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.226 2013-05-01 17:04:13 vrany Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.225 2013-05-01 08:33:15 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/ChangeSet.st,v 1.226 2013-05-01 17:04:13 vrany Exp $'
 !
 
 version_HG