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 2021/05/08 23:47:37 UTC
[groovy] branch master updated: GROOVY-8409,
GROOVY-9915: compare generics of same type only
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 e2b7ba1 GROOVY-8409, GROOVY-9915: compare generics of same type only
e2b7ba1 is described below
commit e2b7ba15fdf1390a580d433cca6b8b43897d924d
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sat May 8 18:30:50 2021 -0500
GROOVY-8409, GROOVY-9915: compare generics of same type only
def m(Iterable<String> strings) { /*...*/ }
m(Collections.emptyList())
// List<#> --> Iterable<#>
// versus Iterable<String>
---
.../codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java | 6 ++++++
src/test/groovy/transform/stc/GenericsSTCTest.groovy | 8 ++++++++
2 files changed, 14 insertions(+)
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 4d4447e..3e910c2 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -5342,6 +5342,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
Parameter p = inferredMethod.getParameters()[Math.min(i, np - 1)];
ClassNode at = actuals[i], pt = p.getOriginType();
+ if (!isUsingGenericsOrIsArrayUsingGenerics(pt)) continue;
if (i >= (np - 1) && pt.isArray() && !at.isArray()) pt = pt.getComponentType();
if (a instanceof ListExpression) {
@@ -5359,6 +5360,11 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
// and unknown generics
if (!GenericsUtils.hasUnresolvedGenerics(at)) continue;
+ while (!at.equals(pt) && !at.equals(OBJECT_TYPE)) {
+ ClassNode sc = GenericsUtils.getSuperClass(at, pt);
+ at = applyGenericsContext(GenericsUtils.extractPlaceholders(at), sc);
+ }
+
// try to resolve placeholder(s) in argument type using parameter type
Map<GenericsTypeName, GenericsType> linked = new HashMap<>();
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index 395a5f3..3bc13a7 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -1367,6 +1367,14 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
}
test()
"""
+ assertScript """
+ $mods void m(Iterable<String> strings) {
+ }
+ void test() {
+ m(Collections.emptyList())
+ }
+ test()
+ """
}
}