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() + ''' + } }
