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


The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
     new bef1fda155 GROOVY-11581: despread array without converting inner array 
to list
bef1fda155 is described below

commit bef1fda1555310f23567f42962309dc79477c989
Author: Eric Milles <[email protected]>
AuthorDate: Wed Mar 12 21:14:18 2025 -0500

    GROOVY-11581: despread array without converting inner array to list
---
 .../groovy/runtime/ScriptBytecodeAdapter.java      |  3 +-
 src/test/gls/innerClass/InnerClassTest.groovy      | 46 ++++++++++++++++++----
 2 files changed, 40 insertions(+), 9 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java 
b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
index 99e0ef3bb7..d038df09f6 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
@@ -40,6 +40,7 @@ import org.codehaus.groovy.runtime.wrappers.PojoWrapper;
 import org.codehaus.groovy.runtime.wrappers.Wrapper;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -809,7 +810,7 @@ public class ScriptBytecodeAdapter {
             } else if (value instanceof List) {
                 ret.addAll((List) value);
             } else if (value.getClass().isArray()) {
-                
ret.addAll(DefaultTypeTransformation.primitiveArrayToList(value));
+                Collections.addAll(ret, 
DefaultTypeTransformation.primitiveArrayBox(value));
             } else {
                 String error = "Cannot spread the type " + 
value.getClass().getName() + " with value " + value;
                 if (value instanceof Map) {
diff --git a/src/test/gls/innerClass/InnerClassTest.groovy 
b/src/test/gls/innerClass/InnerClassTest.groovy
index a3c209a0e0..74dbf5c20b 100644
--- a/src/test/gls/innerClass/InnerClassTest.groovy
+++ b/src/test/gls/innerClass/InnerClassTest.groovy
@@ -955,22 +955,52 @@ final class InnerClassTest {
     void testUsageOfOuterMethod7() {
         assertScript '''
             class Super {
-              protected final String s
-              Super(String s) { this.s = s }
+                protected final String s
+                Super(String s) { this.s = s }
             }
             class Outer {
-              static String initValue() { 'ok' }
-              static class Inner extends Super {
-                Inner() {
-                  super(initValue()) // here
+                static String initValue() { 'ok' }
+                static class Inner extends Super {
+                    Inner() {
+                        super(initValue()) // here
+                    }
                 }
-              }
-              String test() { new Inner().s }
+                String test() { new Inner().s }
             }
+
             assert new Outer().test() == 'ok'
         '''
     }
 
+    // GROOVY-11581
+    @Test
+    void testUsageOfOuterMethod8() {
+        assertScript '''
+            class Outer {
+                void foo() {
+                    def byteArr = "FOO".bytes
+                    new Inner().checkClass(byteArr)
+                }
+                static bar(xxx, yyy) {
+                    assert xxx instanceof byte[]
+                    assert yyy instanceof String
+                }
+                static baz(zzz) {
+                    assert zzz instanceof byte[]
+                }
+                static class Inner {
+                    def checkClass(val) {
+                        assert val instanceof byte[]
+                        bar(val, "")
+                        baz(val)
+                    }
+                }
+            }
+
+            new Outer().foo()
+        '''
+    }
+
     @Test
     void testUsageOfOuterMethodOverridden() {
         assertScript '''

Reply via email to