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
commit ecc279debc985c50166d2f7edd298ca642610997 Author: Eric Milles <[email protected]> AuthorDate: Sat Sep 10 17:17:19 2022 -0500 GROOVY-10256: STC: "Type x = m()" given "def <T extends NotType> T m();" --- .../org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java | 4 ++-- src/test/groovy/transform/stc/GenericsSTCTest.groovy | 4 ++-- 2 files changed, 4 insertions(+), 4 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 55848f4403..c8cdebe597 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java @@ -731,8 +731,8 @@ public abstract class StaticTypeCheckingSupport { } } - // GROOVY-7316: It is an apparently legal thing to allow this. It's not type safe, but it is allowed... - return right.isGenericsPlaceHolder(); + // GROOVY-7316, GROOVY-10256: "Type x = m()" given "def <T> T m()"; T adapts to target + return right.isGenericsPlaceHolder() && right.asGenericsType().isCompatibleWith(left); } private static boolean isGroovyConstructorCompatible(final Expression rightExpression) { diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy index d0e91fd8d4..a750099d26 100644 --- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy +++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy @@ -498,7 +498,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase { ''' } - @NotYetImplemented // GROOVY-7316, GROOVY-10256 + // GROOVY-7316, GROOVY-10256 void testReturnTypeInferenceWithMethodGenerics16() { shouldFailWithMessages ''' def <T extends CharSequence> T chars() { @@ -507,7 +507,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase { chars() } ''', - 'Cannot return value of type #T for method returning java.util.List' + 'Cannot return value of type T on method returning type java.util.List' } // GROOVY-10098
