You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/09/22 15:54:39 UTC

[groovy] branch master updated: GROOVY-10765: STC: don't connect unresolved placeholder

This is an automated email from the ASF dual-hosted git repository.

emilles 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 ed5a0ca3ea GROOVY-10765: STC: don't connect unresolved placeholder
ed5a0ca3ea is described below

commit ed5a0ca3ea8ea06a0e3518d6cd73d540ac056777
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Thu Sep 22 10:38:18 2022 -0500

    GROOVY-10765: STC: don't connect unresolved placeholder
---
 .../groovy/transform/stc/StaticTypeCheckingSupport.java     |  3 ++-
 src/test/groovy/transform/stc/GenericsSTCTest.groovy        | 13 +++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

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 3ed435e7dd..81423a2aec 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -1776,7 +1776,8 @@ public abstract class StaticTypeCheckingSupport {
                     extractGenericsConnections(connections, ui.getUpperBounds(), upperBounds);
                 } else if (!isUnboundedWildcard(di)) {
                     ClassNode boundType = lowerBound != null ? lowerBound : upperBounds[0];
-                    if (boundType.isGenericsPlaceHolder()) { // GROOVY-9998
+                    if (boundType.isGenericsPlaceHolder() // GROOVY-9998
+                            && boundType != ui.getType()) { // GROOVY-10765
                         String placeholderName = boundType.getUnresolvedName();
                         ui = new GenericsType(ui.getType()); ui.setWildcard(true);
                         storeGenericsConnection(connections, placeholderName, ui);
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index 6b569a3e17..a857a51834 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -1696,6 +1696,19 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
         '''
     }
 
+    // GROOVY-10765
+    void testAssignmentShouldWorkForParameterizedMap2() {
+        assertScript '''import java.util.function.BiFunction
+
+            def <X, Y, Z> Map<X, Z> transform(Map<X, Y> map, BiFunction<? super X, ? super Y, Z> transformer) {
+                map.collectEntries { k, v -> [k, transformer.apply(k, v)] }
+            }
+
+            Map<String, ? extends File> one = [:]
+            Map<String, Integer> two = transform(one) { k, v -> v.hashCode() }
+        '''
+    }
+
     // GROOVY-10222
     void testAssignmentShouldWorkForParameterizedType() {
         assertScript '''