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/10/30 15:14:30 UTC

[groovy] branch master updated: GROOVY-10128, GROOVY-10306: STC: simple covariace of closure's primitive

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 26aa02c  GROOVY-10128, GROOVY-10306: STC: simple covariace of closure's primitive
26aa02c is described below

commit 26aa02c56833cc558cee29658028c817fa992e67
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sat Oct 30 10:06:40 2021 -0500

    GROOVY-10128, GROOVY-10306: STC: simple covariace of closure's primitive
---
 .../transform/stc/StaticTypeCheckingVisitor.java   |  4 ++--
 .../groovy/transform/stc/ClosuresSTCTest.groovy    | 28 ++++++++++++++++++++--
 2 files changed, 28 insertions(+), 4 deletions(-)

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 d485fe8..31ae6d1 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -2211,8 +2211,8 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
                 type = STRING_TYPE; // GROOVY-9971: convert GString to String at point of return
             } else if (inferredReturnType != null
                     && !GenericsUtils.hasUnresolvedGenerics(inferredReturnType)
-                    &&  GenericsUtils.buildWildcardType(inferredReturnType).isCompatibleWith(type)) {
-                type = inferredReturnType; // GROOVY-8310, GROOVY-10082, GROOVY-10091: allow simple covariance
+                    &&  GenericsUtils.buildWildcardType(inferredReturnType).isCompatibleWith(wrapTypeIfNecessary(type))) {
+                type = inferredReturnType; // GROOVY-8310, GROOVY-10082, GROOVY-10091, GROOVY-10128, GROOVY-10306: allow simple covariance
             }
             return type;
         }
diff --git a/src/test/groovy/transform/stc/ClosuresSTCTest.groovy b/src/test/groovy/transform/stc/ClosuresSTCTest.groovy
index 798c291..5730d84 100644
--- a/src/test/groovy/transform/stc/ClosuresSTCTest.groovy
+++ b/src/test/groovy/transform/stc/ClosuresSTCTest.groovy
@@ -193,9 +193,33 @@ class ClosuresSTCTest extends StaticTypeCheckingTestCase {
         'Cannot assign groovy.lang.Closure<X> to: groovy.lang.Closure<A<java.lang.Number>>'
     }
 
-    // GROOVY-8427
+    // GROOVY-10128, GROOVY-10306
     void testClosureReturnTypeInference8() {
         assertScript '''
+            java.util.function.Function<String, Number> x = { s ->
+                long n = 1
+                return n
+            }
+            assert x.apply('') == 1L
+        '''
+        assertScript '''
+            class C {
+                byte p = 1
+                void m() {
+                    byte v = 2
+                    java.util.function.Supplier<Number> one = { -> p }
+                    java.util.function.Supplier<Number> two = { -> v }
+                    assert one.get() == (byte)1
+                    assert two.get() == (byte)2
+                }
+            }
+            new C().m()
+        '''
+    }
+
+    // GROOVY-8427
+    void testClosureReturnTypeInference9() {
+        assertScript '''
             import java.util.function.Consumer
 
             class C {
@@ -216,7 +240,7 @@ class ClosuresSTCTest extends StaticTypeCheckingTestCase {
     }
 
     // GROOVY-8202
-    void testClosureReturnTypeInference9() {
+    void testClosureReturnTypeInference10() {
         assertScript '''
             void proc() {
             }