[ https://issues.apache.org/jira/browse/GROOVY-11182?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steve Eady updated GROOVY-11182: -------------------------------- Description: Groovy is not parsing primitive arrays sent into a varargs parameter the same way it is being parsed in Java 17.0.7 If the input value is a byte array of the string "test"... Groovy is slicing it up into a 2d array of dimensions of [4][1] an array of size 4 each containing an array of size 1 In java, the value is being slide up into a 2d array of dimensions [1][4] an array of size 1 containing an array of size 4. This was detected when trying to pass in a byte[] value into a varargs of (byte[]... args) in a Spring library. Here are the test cases for Groovy vs Java {{class VarArgsTestGroovy {}} {{ static void main(String[] args) {}} {{ byte[] bytes = "test".bytes}} {{ test(bytes)}} } {{ static test(byte[]... byteArrays){}} {{ assert byteArrays.length == 4}} {{ (0..3).each {}} assert byteArrays[it].length == 1 } } {{}}} {{public class VarArgsTestJava {}} {{ public static void main(String[] args) {}} {{ byte[] bytes = "test".getBytes();}} {{ test(bytes);}} } {{ static void test(byte[]... byteArrays){}} {{ assert byteArrays.length == 1;}} {{ assert byteArrays[0].length == 4;}} } {{}}} My current workaround is to pre-create a 2 dimensional array of size[1][value] and pass that into the varargs method instead of the original byte array was: Groovy is not parsing primitive arrays sent into a varargs parameter the same way it is being parsed in Java 17.0.7 If the input value is a byte array of the string "test"... Groovy is slicing it up into a 2d array of dimensions of [4][1] an array of size 4 each containing an array of size 1 In java, the value is being slide up into a 2d array of dimensions [1][4] an array of size 1 containing an array of size 4. This was detected when trying to pass in a byte[] value into a varargs of (byte[]... args) in a Spring library. Here are the test cases for Groovy vs Java {{class VarArgsTestGroovy {}}{{ }} {{ static void main(String[] args) {}}{{ }} {{ byte[] bytes = "test".bytes}}{{ }} {{ test(bytes)}}{{ }} {{ }}}{{ }} {{ static test(byte[]... byteArrays){}}{{ }} {{ assert byteArrays.length == 4}}{{ }} {{ (0..3).each {}}{{ assert byteArrays[it].length == 1}}{{ }}}{{ }} {{ }}} {{}}} {{public class VarArgsTestJava {}} {{ public static void main(String[] args) {}} {{ byte[] bytes = "test".getBytes();}} {{ test(bytes);}} {{ }}} {{ static void test(byte[]... byteArrays){}} {{ assert byteArrays.length == 1;}} {{ assert byteArrays[0].length == 4;}} {{ }}} {{}}} My current workaround is to pre-create a 2 dimensional array of size[1][value] and pass that into the varargs method instead of the original byte array > Primitive array Varargs Java incompatibility > -------------------------------------------- > > Key: GROOVY-11182 > URL: https://issues.apache.org/jira/browse/GROOVY-11182 > Project: Groovy > Issue Type: Bug > Affects Versions: 4.0.15 > Reporter: Steve Eady > Priority: Major > > Groovy is not parsing primitive arrays sent into a varargs parameter the same > way it is being parsed in Java 17.0.7 > If the input value is a byte array of the string "test"... > Groovy is slicing it up into a 2d array of dimensions of [4][1] > an array of size 4 each containing an array of size 1 > In java, the value is being slide up into a 2d array of dimensions [1][4] > an array of size 1 containing an array of size 4. > This was detected when trying to pass in a byte[] value into a varargs of > (byte[]... args) > in a Spring library. > Here are the test cases for Groovy vs Java > > {{class VarArgsTestGroovy {}} > {{ static void main(String[] args) {}} > {{ byte[] bytes = "test".bytes}} > {{ test(bytes)}} > } > {{ static test(byte[]... byteArrays){}} > {{ assert byteArrays.length == 4}} > {{ (0..3).each {}} assert byteArrays[it].length == 1 } > } > {{}}} > {{public class VarArgsTestJava {}} > {{ public static void main(String[] args) {}} > {{ byte[] bytes = "test".getBytes();}} > {{ test(bytes);}} > } > {{ static void test(byte[]... byteArrays){}} > {{ assert byteArrays.length == 1;}} > {{ assert byteArrays[0].length == 4;}} > } > {{}}} > My current workaround is to pre-create a 2 dimensional array of size[1][value] > and pass that into the varargs method instead of the original byte array -- This message was sent by Atlassian Jira (v8.20.10#820010)