Repository: groovy
Updated Branches:
  refs/heads/master d05ecc9a0 -> 1d6862712


GROOVY-8033: spread property calls on non-list collections fail STC in static 
methods (closes #476)


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

Branch: refs/heads/master
Commit: 1d68627120b15bed726f666912c784a30843e10c
Parents: d05ecc9
Author: Shil Sinha <[email protected]>
Authored: Wed Jan 4 12:26:37 2017 -0500
Committer: Shil Sinha <[email protected]>
Committed: Mon Jan 9 18:58:02 2017 -0500

----------------------------------------------------------------------
 .../transform/stc/StaticTypeCheckingVisitor.java      |  1 +
 .../transform/stc/ArraysAndCollectionsSTCTest.groovy  | 14 ++++++++++++++
 2 files changed, 15 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/1d686271/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
----------------------------------------------------------------------
diff --git 
a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java 
b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index f675526..bac9d7c 100644
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -1373,6 +1373,7 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
     private ClassNode getTypeForSpreadExpression(ClassNode testClass, 
ClassNode objectExpressionType, PropertyExpression pexp) {
         if (!pexp.isSpreadSafe()) return null;
         MethodCallExpression mce = new MethodCallExpression(new 
VariableExpression("_", testClass), "iterator", 
ArgumentListExpression.EMPTY_ARGUMENTS);
+        mce.setImplicitThis(false);
         mce.visit(this);
         ClassNode callType = getType(mce);
         if (!implementsInterfaceOrIsSubclassOf(callType, Iterator_TYPE)) 
return null;

http://git-wip-us.apache.org/repos/asf/groovy/blob/1d686271/src/test/groovy/transform/stc/ArraysAndCollectionsSTCTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/transform/stc/ArraysAndCollectionsSTCTest.groovy 
b/src/test/groovy/transform/stc/ArraysAndCollectionsSTCTest.groovy
index a019f35..badff32 100644
--- a/src/test/groovy/transform/stc/ArraysAndCollectionsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/ArraysAndCollectionsSTCTest.groovy
@@ -557,5 +557,19 @@ class ArraysAndCollectionsSTCTest extends 
StaticTypeCheckingTestCase {
             countIt([1,2,3])==3
         '''
     }
+
+    // GROOVY-8033
+    void testSetSpreadPropertyInStaticContext() {
+        assertScript '''
+            class Foo {
+                String name
+            }
+            static List<String> meth() {
+                Set<Foo> foos = [new Foo(name: 'pls'), new Foo(name: 
'bar')].toSet()
+                foos*.name
+            }
+            assert meth().toSet() == ['pls', 'bar'].toSet()            
+        '''
+    }
 }
 

Reply via email to