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 <[email protected]> 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 '''
