Repository: incubator-groovy
Updated Branches:
  refs/heads/master 02f918286 -> 149534c3d


GROOVY-7381: Setters with non-void return type fail at runtime when statically 
compiled

Closes #17


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/149534c3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/149534c3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/149534c3

Branch: refs/heads/master
Commit: 149534c3ded579e234921268c38142570813e974
Parents: 02f9182
Author: Shil S <shil.si...@gmail.com>
Authored: Sat May 16 11:17:05 2015 -0400
Committer: Cedric Champeau <cchamp...@apache.org>
Committed: Mon May 18 21:37:26 2015 +0200

----------------------------------------------------------------------
 ...ypesBinaryExpressionMultiTypeDispatcher.java |  2 +-
 .../asm/sc/BugsStaticCompileTest.groovy         | 23 ++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/149534c3/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
----------------------------------------------------------------------
diff --git 
a/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
 
b/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
index 60e5966..a1088c4 100644
--- 
a/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
+++ 
b/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
@@ -262,7 +262,7 @@ public class StaticTypesBinaryExpressionMultiTypeDispatcher 
extends BinaryExpres
         }
         if (!isAttribute) {
             String setter = "set" + MetaClassHelper.capitalize(property);
-            MethodNode setterMethod = receiverType.getSetterMethod(setter);
+            MethodNode setterMethod = receiverType.getSetterMethod(setter, 
false);
             ClassNode declaringClass = 
setterMethod!=null?setterMethod.getDeclaringClass():null;
             if (isThisExpression && declaringClass!=null && 
declaringClass.equals(controller.getClassNode())) {
                 // this.x = ... shouldn't use a setter if in the same class

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/149534c3/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
----------------------------------------------------------------------
diff --git 
a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy 
b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
index 518c903..b83ecab 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
@@ -1370,5 +1370,28 @@ println someInt
             assert astTrees['Test$_foo_closure1'][1].contains('INVOKEVIRTUAL 
org/codehaus/groovy/classgen/asm/sc/Groovy6924Support.setFoo 
(Ljava/lang/String;)V')
         }
     }
+
+    // GROOVY-7381
+    void testNonVoidSetterCalls(){
+        assertScript '''
+            class Foo {
+                int num
+                String name
+
+                Foo setNum(int num){
+                    this.num = num
+                    this
+                }
+
+                Foo setName(String name){
+                    this.name = name
+                    this
+                }
+            }
+            Foo foo = new Foo().setNum(1).setName('fluent')
+            assert foo.num == 1
+            assert foo.name == 'fluent'
+        '''
+    }
 }
 

Reply via email to