This is an automated email from the ASF dual-hosted git repository.

emilles 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 0359be36eb GROOVY-11581: despread array without converting inner array 
to list
0359be36eb is described below

commit 0359be36eb61a211ff3a18fbb177ddf4f7171970
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 8c63826005..8d9b83679d 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
@@ -41,6 +41,7 @@ import org.codehaus.groovy.runtime.wrappers.Wrapper;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -949,7 +950,7 @@ public class ScriptBytecodeAdapter {
             } else if (value instanceof BaseStream) {
                 ((BaseStream<?,?>) 
value).iterator().forEachRemaining(ret::add);
             } 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 5b316281c1..e36c5f42d7 100644
--- a/src/test/gls/innerClass/InnerClassTest.groovy
+++ b/src/test/gls/innerClass/InnerClassTest.groovy
@@ -1153,22 +1153,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