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 <[email protected]>
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