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

Reply via email to