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/10 22:45:11 UTC

[groovy] 02/02: GROOVY-10256: STC: "Type x = m()" given "def T m();"

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 <er...@thomsonreuters.com>
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