This is an automated email from the ASF dual-hosted git repository. paulk 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 f229a1b80e GROOVY-11680: Java stubs use deprecated constant constructors in some cases f229a1b80e is described below commit f229a1b80e9bebbcd9bfc41865e477d981ca1fdc Author: Paul King <pa...@asert.com.au> AuthorDate: Mon May 26 20:21:20 2025 +1000 GROOVY-11680: Java stubs use deprecated constant constructors in some cases --- .../groovy/tools/javac/JavaStubGenerator.java | 2 +- .../ClassWithPrimitiveFieldsStubTest.groovy | 63 ++++++++++++++++++++++ .../groovy/tools/stubgenerator/Groovy10902.groovy | 8 ++- .../groovy/tools/stubgenerator/Groovy11019.groovy | 2 +- 4 files changed, 72 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java index c0a1cdd0bc..f5352d9aa0 100644 --- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java +++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java @@ -476,7 +476,7 @@ public class JavaStubGenerator { // GROOVY-5150, GROOVY-10902, GROOVY-10928, GROOVY-11019: dummy value that prevents inlining if (isPrimitiveType(type) || isStringType(type)) { - out.print("new " + getWrapper(type) + "("); + out.print(getWrapper(type) + ".valueOf("); printValue(out, type, defaultValueX(type)); out.print(')'); } else { diff --git a/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/ClassWithPrimitiveFieldsStubTest.groovy b/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/ClassWithPrimitiveFieldsStubTest.groovy new file mode 100644 index 0000000000..c3902c0c84 --- /dev/null +++ b/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/ClassWithPrimitiveFieldsStubTest.groovy @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.codehaus.groovy.tools.stubgenerator + +/** + * Checks the stub generator defines initialization expressions for primitive fields. + */ +final class ClassWithPrimitiveFieldsStubTest extends StringSourcesStubTestCase { + + Map<String, String> provideSources() { + [ + 'Dummy.java': ''' + public class Dummy { + } + ''', + + 'SomeClass.groovy': ''' + class SomeClass { + public static final String s + public static final Integer foo + public static final double d + public static final long l + public static final int bar + public static final short baz + public static final char c + public static final byte b + public static final boolean flag + public static final Boolean flag2 + } + ''' + ] + } + + void verifyStubs() { + def stubSource = stubJavaSourceFor('SomeClass') + assert stubSource.contains('java.lang.String s = java.lang.String.valueOf((java.lang.String)null)') + assert stubSource.contains('java.lang.Integer foo = null') + assert stubSource.contains('double d = java.lang.Double.valueOf(0.0d)') + assert stubSource.contains('final long l = java.lang.Long.valueOf(0L)') + assert stubSource.contains('int bar = java.lang.Integer.valueOf(0)') + assert stubSource.contains('short baz = java.lang.Short.valueOf(') + assert stubSource.contains("char c = java.lang.Character.valueOf('\0')") + assert stubSource.contains('byte b = java.lang.Byte.valueOf((byte)0)') + assert stubSource.contains('boolean flag = java.lang.Boolean.valueOf(false)') + assert stubSource.contains('java.lang.Boolean flag2 = null') + } +} diff --git a/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/Groovy10902.groovy b/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/Groovy10902.groovy index 94d0851510..8831cfc4f1 100644 --- a/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/Groovy10902.groovy +++ b/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/Groovy10902.groovy @@ -26,6 +26,7 @@ final class Groovy10902 extends StringSourcesStubTestCase { 'G.groovy': ''' class G { public static final int DYNAMIC_CONSTANT = (9.9).intValue() + public static final String DYNAMIC_STRING = "a" + "b".toUpperCase() } ''', 'J.java': ''' @@ -33,6 +34,9 @@ final class Groovy10902 extends StringSourcesStubTestCase { int m() { return G.DYNAMIC_CONSTANT; } + String n() { + return G.DYNAMIC_STRING; + } } ''', ] @@ -41,9 +45,11 @@ final class Groovy10902 extends StringSourcesStubTestCase { @Override void verifyStubs() { String stub = stubJavaSourceFor('G') - assert stub.contains("public static final int DYNAMIC_CONSTANT = new java.lang.Integer(0);") + assert stub.contains("public static final int DYNAMIC_CONSTANT = java.lang.Integer.valueOf(0);") + assert stub.contains("public static final java.lang.String DYNAMIC_STRING = java.lang.String.valueOf((java.lang.String)null);") Object pojo = loader.loadClass('J').getDeclaredConstructor().newInstance() assert pojo.m() == 9 + assert pojo.n() == 'aB' } } diff --git a/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/Groovy11019.groovy b/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/Groovy11019.groovy index fa46bda55b..5cef743ce8 100644 --- a/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/Groovy11019.groovy +++ b/src/test/groovy/org/codehaus/groovy/tools/stubgenerator/Groovy11019.groovy @@ -44,7 +44,7 @@ final class Groovy11019 extends StringSourcesStubTestCase { @Override void verifyStubs() { String stub = stubJavaSourceFor('G') - assert stub.contains("public static final java.lang.String STATIC_STRING = new java.lang.String((java.lang.String)null);") + assert stub.contains("public static final java.lang.String STATIC_STRING = java.lang.String.valueOf((java.lang.String)null);") Object pojo = loader.loadClass('J').getDeclaredConstructor().newInstance() assert pojo.m() == 'hello world'