Per Nyfelt created GROOVY-11749:
-----------------------------------
Summary: CompileStatic issues in Groovy 5
Key: GROOVY-11749
URL: https://issues.apache.org/jira/browse/GROOVY-11749
Project: Groovy
Issue Type: Bug
Environment: Groovy 5.0.0, Gradle 8.14.3, JVM: 21.0.6
Reporter: Per Nyfelt
When working on getting the Matrix project to work with Groovy 5 i encountered
the following differences compared to 4.0.28 for static compilation:
f is a csv commons formatter. The setHeader method has the following signature:
f.setHeader(String... headers)
In 4.0.28 i used to be able to just cast a List<String> to a String[] like this:
if (val instanceof List) {
f.setHeader({*}val as String[]{*})
But in Groovy 5 this gives me the following error:
java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class
[Ljava.lang.String; (java.util.ArrayList and [Ljava.lang.String; are in module
java.base of loader 'bootstrap')
A workaround is to use the Java way i.e:
if (val instanceof List) {
f.setHeader(val.toArray({*}new String[0]) as String[{*}])
Another thing i hade to change was
static String asColumnName(int number) {
StringBuilder sb = new StringBuilder()
while (number-- > 0) {
sb.append(('A' as char + (number % 26)) as char)
*number /= 26*
}
return sb.reverse().toString()
}
Which no longer compiles:
.../SpreadsheetUtil.groovy: 45: [Static type checking] - Cannot assign value of
type java.math.BigDecimal to variable of type int
but had to be changed to
static String asColumnName(int number) {
StringBuilder sb = new StringBuilder()
while (number-- > 0) {
sb.append(('A' as char + (number % 26)) as char)
*number = (int) (number / 26)*
}
return sb.reverse().toString()
}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)