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