This is an automated email from the ASF dual-hosted git repository. sunlan pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push: new a54050ae0c GROOVY-11664: STC: combine generics of same-type witnesses (#2230) a54050ae0c is described below commit a54050ae0c6f91769aa93e53df550f51a81f4b1c Author: Eric Milles <eric.mil...@thomsonreuters.com> AuthorDate: Sun May 25 05:58:05 2025 -0500 GROOVY-11664: STC: combine generics of same-type witnesses (#2230) --- .../groovy/transform/stc/StaticTypeCheckingSupport.java | 8 ++++++++ src/test/groovy/groovy/transform/stc/GenericsSTCTest.groovy | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java index 2a57b95f6e..7d8a8edca0 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java @@ -1537,6 +1537,14 @@ public abstract class StaticTypeCheckingSupport { } return true; // incompatible } + if (!fixedPlaceHolders.contains(entry.getKey()) + && !resolved.isPlaceholder() && !resolved.isWildcard() + && !candidate.isPlaceholder() && !candidate.isWildcard()) { + // resolved "T=Object" and candidate "T=Object" or "T=String"; or + // GROOVY-11664: resolved "T=Class<A>" and candidate "T=Class<B>" + ClassNode oldT = resolved.getType(), newT = candidate.getType(); + resolvedMethodGenerics.put(entry.getKey(), new GenericsType(lowestUpperBound(oldT, newT))); + } } connections.keySet().removeAll(fixedPlaceHolders); // GROOVY-10337 diff --git a/src/test/groovy/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/groovy/transform/stc/GenericsSTCTest.groovy index 332490a0cb..4e7ebc3833 100644 --- a/src/test/groovy/groovy/transform/stc/GenericsSTCTest.groovy +++ b/src/test/groovy/groovy/transform/stc/GenericsSTCTest.groovy @@ -263,6 +263,19 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase { def list = Arrays.asList(new A(), new B(), new C()) assert list.size() == 3 ''' + + // GROOVY-11664: + assertScript ''' + class A {} + class B extends A {} + class C extends B {} + @ASTTest(phase=INSTRUCTION_SELECTION, value={ + def type = node.getNodeMetaData(INFERRED_TYPE) + assert type.toString(false) == 'java.util.List<java.lang.Class<? extends A>>' + }) + def list = Arrays.asList(A.class, B.class, C.class) + assert list.size() == 3 + ''' } // GROOVY-10062