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 2020/12/24 06:06:48 UTC
[groovy] branch GROOVY_3_0_X updated: GROOVY-9860: makeRawType
should reduce generic placeholder to bound type
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
new 8d27bf2 GROOVY-9860: makeRawType should reduce generic placeholder to bound type
8d27bf2 is described below
commit 8d27bf2ffb884f1d56a4729200ecc08021485ace
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Dec 20 22:16:04 2020 -0600
GROOVY-9860: makeRawType should reduce generic placeholder to bound type
Tuple2 constructor parameters are placeholders and should reduce to
Object for argument matching
---
.../groovy/transform/stc/StaticTypeCheckingSupport.java | 2 +-
src/test/groovy/transform/stc/GenericsSTCTest.groovy | 13 +++++++++++++
2 files changed, 14 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 4e3dedf..583fda6 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -1130,7 +1130,7 @@ public abstract class StaticTypeCheckingSupport {
String name = param.getType().getUnresolvedName();
Optional<GenericsType> value = genericsPlaceholderAndTypeMap.entrySet().stream()
.filter(e -> e.getKey().getName().equals(name)).findFirst().map(Map.Entry::getValue);
- ClassNode type = value.map(GenericsType::getType).orElseGet(() -> makeRawType(param.getType()));
+ ClassNode type = value.map(gt -> !gt.isPlaceholder() ? gt.getType() : makeRawType(gt.getType())).orElseGet(() -> makeRawType(param.getType()));
return new Parameter(type, param.getName());
}).toArray(Parameter[]::new);
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index 68f6b78..504e9d6 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -325,6 +325,19 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
'''
}
+ // GROOVY-9860
+ void testGenericTypeArgumentInCtorCall() {
+ assertScript '''
+ def <T> void test() {
+ def bind = { T a, T b ->
+ new Tuple2<T, T>(a, b)
+ }
+ assert bind('foo', 'bar').toString() == '[foo, bar]'
+ }
+ test()
+ '''
+ }
+
void testReturnAnntationClass() {
assertScript '''
import java.lang.annotation.Documented