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 b1dd5b39e26620d8894c7ba786f5699c0ec30d34
Author: Eric Milles <[email protected]>
AuthorDate: Tue May 11 18:16:04 2021 -0500

    GROOVY-10079: STC: Character can be implicitly unboxed to char at return
---
 .../transform/stc/StaticTypeCheckingSupport.java   |  5 +++--
 .../groovy/transform/stc/ReturnsSTCTest.groovy     | 24 ++++++++++++++++++++++
 2 files changed, 27 insertions(+), 2 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 ba2de6b..a934833 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -678,8 +678,9 @@ public abstract class StaticTypeCheckingSupport {
         if (isWildcardLeftHandSide(leftRedirect) && 
!(boolean_TYPE.equals(left) && rightExpressionIsNull)) return true;
 
         // char as left expression
-        if (leftRedirect == char_TYPE && rightRedirect == STRING_TYPE) {
-            if (rightExpression instanceof ConstantExpression) {
+        if (leftRedirect == char_TYPE) {
+            if (rightRedirect == Character_TYPE) return true;
+            if (rightRedirect == STRING_TYPE && rightExpression instanceof 
ConstantExpression) {
                 String value = rightExpression.getText();
                 return value.length() == 1;
             }
diff --git a/src/test/groovy/transform/stc/ReturnsSTCTest.groovy 
b/src/test/groovy/transform/stc/ReturnsSTCTest.groovy
index 5e2a870..f4cd334 100644
--- a/src/test/groovy/transform/stc/ReturnsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/ReturnsSTCTest.groovy
@@ -199,6 +199,30 @@ class ReturnsSTCTest extends StaticTypeCheckingTestCase {
         ''', 'No such property: years for class: java.lang.String'
     }
 
+    // GROOVY-10079
+    void testImplicitReturnToPrimitive() {
+        assertScript '''
+            int foo() {
+                Integer.valueOf(42)
+            }
+            assert foo() == 42
+        '''
+
+        assertScript '''
+            long foo() {
+                Long.valueOf(1234L)
+            }
+            assert foo() == 1234L
+        '''
+
+        assertScript '''
+            char foo() {
+                Character.valueOf((char)'x')
+            }
+            assert foo() == 'x'
+        '''
+    }
+
     // GROOVY-5835
     void testReturnInClosureShouldNotBeConsideredAsReturnOfEnclosingMethod() {
         assertScript '''

Reply via email to