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/11 16:24:59 UTC
[groovy] 02/02: GROOVY-8974: STC: `missesGenericsTypes(ClassNode)` for unresolved `<>`
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 6259547ee9ca4dfc3a37d3cab80ba4456d773d3f
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Sep 11 11:05:43 2022 -0500
GROOVY-8974: STC: `missesGenericsTypes(ClassNode)` for unresolved `<>`
2_5_X backport
---
.../groovy/transform/stc/StaticTypeCheckingSupport.java | 14 ++++----------
src/test/groovy/transform/stc/GenericsSTCTest.groovy | 11 +++++++++++
2 files changed, 15 insertions(+), 10 deletions(-)
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 10121386a6..13508252a1 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -2244,16 +2244,10 @@ public abstract class StaticTypeCheckingSupport {
}
public static boolean missesGenericsTypes(ClassNode cn) {
- if (cn.isArray()) return missesGenericsTypes(cn.getComponentType());
- GenericsType[] cnTypes = cn.getGenericsTypes();
- GenericsType[] rnTypes = cn.redirect().getGenericsTypes();
- if (rnTypes != null && cnTypes == null) return true;
- if (cnTypes != null) {
- for (GenericsType genericsType : cnTypes) {
- if (genericsType.isPlaceholder()) return true;
- }
- }
- return false;
+ while (cn.isArray()) cn = cn.getComponentType();
+ GenericsType[] cnGenerics = cn.getGenericsTypes();
+ GenericsType[] rnGenerics = cn.redirect().getGenericsTypes();
+ return cnGenerics == null || cnGenerics.length == 0 ? rnGenerics != null : GenericsUtils.hasUnresolvedGenerics(cn);
}
/**
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index 165ca7fd41..8ad3ffe3cc 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -285,6 +285,17 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
'''
}
+ // GROOVY-8974
+ void testReturnTypeInferenceWithMethodGenerics12() {
+ assertScript '''
+ def <T> T identity(T t) { t }
+ List<String> list = identity(new ArrayList<>())
+ list.add('foo')
+ def foo = list[0]
+ assert foo.toUpperCase() == 'FOO'
+ '''
+ }
+
// GROOVY-7316, GROOVY-10256
void testReturnTypeInferenceWithMethodGenerics16() {
shouldFailWithMessages '''