This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
new 088357b05e GROOVY-10765: STC: don't connect unresolved placeholder
088357b05e is described below
commit 088357b05ec0948854cf2444a73c784b11fabcf5
Author: Eric Milles <[email protected]>
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 9718f233a9..d935d6f81c 100644
---
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -1787,7 +1787,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 0db423e791..1119c72ffc 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 '''