From 04c62e5227f89a20360ee8394f455f9676ad11c1 Mon Sep 17 00:00:00 2001 From: Eric Milles Date: Sat, 20 Aug 2022 10:52:12 -0500 Subject: [PATCH] GROOVY-10725 --- .../core/tests/xform/TypeCheckedTests.java | 18 ++++++++++++++++++ .../stc/StaticTypeCheckingVisitor.java | 5 ++++- .../stc/StaticTypeCheckingVisitor.java | 5 ++++- .../stc/StaticTypeCheckingVisitor.java | 2 +- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/TypeCheckedTests.java b/base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/TypeCheckedTests.java index 18504008ce..cbfcc0c7b3 100644 --- a/base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/TypeCheckedTests.java +++ b/base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/TypeCheckedTests.java @@ -6180,4 +6180,22 @@ public void testTypeChecked10701() { runConformTest(sources, "42.0"); } + + @Test + public void testTypeChecked10725() { + //@formatter:off + String[] sources = { + "Main.groovy", + "@groovy.transform.TypeChecked\n" + + "void test(List strings) {\n" + + " Set> set_of_maps = []\n" + + " set_of_maps.addAll(strings.collectEntries{ [it,it.toUpperCase()] })\n" + + " print set_of_maps\n" + + "}\n" + + "test(['foo','bar'])\n", + }; + //@formatter:on + + runConformTest(sources, "[[foo:FOO, bar:BAR]]"); + } } diff --git a/base/org.codehaus.groovy25/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/base/org.codehaus.groovy25/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java index 560b737618..600fed9872 100644 --- a/base/org.codehaus.groovy25/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/base/org.codehaus.groovy25/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -6331,7 +6331,10 @@ else if (a instanceof ListExpression) { // and unknown generics if (!GenericsUtils.hasUnresolvedGenerics(at)) continue; - while (!at.equals(pt) && !at.equals(OBJECT_TYPE)) { + while (!at.equals(pt) + && !at.equals(OBJECT_TYPE) + && !isGenericsPlaceHolderOrArrayOf(at) + && !isGenericsPlaceHolderOrArrayOf(pt)) { ClassNode sc = GenericsUtils.getSuperClass(at, pt); at = applyGenericsContext(GenericsUtils.extractPlaceholders(at), sc); } diff --git a/base/org.codehaus.groovy30/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/base/org.codehaus.groovy30/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java index 6ee0c59b68..deb633ec0f 100644 --- a/base/org.codehaus.groovy30/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/base/org.codehaus.groovy30/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -6028,7 +6028,10 @@ else if (a instanceof ListExpression) { // and unknown generics if (!GenericsUtils.hasUnresolvedGenerics(at)) continue; - while (!at.equals(pt) && !at.equals(OBJECT_TYPE)) { + while (!at.equals(pt) + && !at.equals(OBJECT_TYPE) + && !isGenericsPlaceHolderOrArrayOf(at) + && !isGenericsPlaceHolderOrArrayOf(pt)) { ClassNode sc = GenericsUtils.getSuperClass(at, pt); at = applyGenericsContext(GenericsUtils.extractPlaceholders(at), sc); } diff --git a/base/org.codehaus.groovy40/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/base/org.codehaus.groovy40/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java index 410109b865..afb5e40ec1 100644 --- a/base/org.codehaus.groovy40/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/base/org.codehaus.groovy40/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -5512,7 +5512,7 @@ private void resolvePlaceholdersFromImplicitTypeHints(final ClassNode[] actuals, // and unknown generics if (!GenericsUtils.hasUnresolvedGenerics(at)) continue; - while (!at.equals(pt) && !isObjectType(at) && !isGenericsPlaceHolderOrArrayOf(at)) { + while (!at.equals(pt) && !isObjectType(at) && !isGenericsPlaceHolderOrArrayOf(at) && !isGenericsPlaceHolderOrArrayOf(pt)) { at = applyGenericsContext(GenericsUtils.extractPlaceholders(at), getNextSuperClass(at, pt)); }