Anton Panikov created GROOVY-12020:
--------------------------------------
Summary: EnumSet .plus() regression in Groovy 4
Key: GROOVY-12020
URL: https://issues.apache.org/jira/browse/GROOVY-12020
Project: Groovy
Issue Type: Bug
Affects Versions: 4.0.32
Reporter: Anton Panikov
EnumSet.plus() method stopped working after upgrading to Groovy 4, but it is
working in Groovy 5. All tests done using JDK 25, although I tried 11 with the
same result.
It is a runtime exception and the code need to access newly created EnumSet:
{code:groovy}
package test
import groovy.transform.CompileStatic
enum EnumTest {
ONE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE
public static final EnumSet<EnumTest> firstSet = EnumSet.of(ONE, TWO,
THREE, FOUR, FIVE)
public static final EnumSet<EnumTest> secondSet = firstSet + SIX
}
@CompileStatic
class Application {
static void main(String[] args) {
println EnumTest.secondSet
println 'ok'
}
}
{code}
It is working fine in Groovy 3.0.25 and 5.0.6. But in Groovy 4.0.32, it is
throwing an exception:
{code:groovy}
Exception in thread "main" java.lang.ExceptionInInitializerError
at test.Application.main(Application.groovy:27)
Caused by: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot
cast object '[ONE, TWO, THREE, FOUR, FIVE, SIX]' with class
'java.util.LinkedHashSet' to class 'java.util.EnumSet' due to:
groovy.lang.GroovyRuntimeException: Could not find matching constructor for:
java.util.EnumSet(test.EnumTest, test.EnumTest, test.EnumTest, test.EnumTest,
test.EnumTest, test.EnumTest)
at
org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:413)
at
org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:326)
at
org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnCollection(DefaultTypeTransformation.java:284)
at
org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:231)
at
org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321)
at test.EnumTest.<clinit>(Application.groovy:19)
... 1 more
Suppressed: groovy.lang.GroovyRuntimeException: Could not find matching
constructor for: java.util.EnumSet(LinkedHashSet)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1915)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1684)
at
org.codehaus.groovy.runtime.InvokerHelper.invokeConstructorOf(InvokerHelper.java:676)
at
org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:389)
... 6 more
{code}
OS: Red Hat Enterprise Linux 8.9 (Ootpa)
JDK: OpenJDK Runtime Environment Temurin-25.0.3+9 (build 25.0.3+9-LTS)
and 11.0.20
--
This message was sent by Atlassian Jira
(v8.20.10#820010)