You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Steve Eady (Jira)" <ji...@apache.org> on 2023/09/27 15:57:00 UTC
[jira] [Updated] (GROOVY-11182) Primitive array Varargs Java incompatibility
[ 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 [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 [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)