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)