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'

Reply via email to