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 '''
