Skip to content

IllegalArgumentException in a switch statement without the default case #457

@mkouba

Description

@mkouba

Issue description

The default case in a switch statement should not be mandatory.

The output of the SwitchTest#testStringSwitchWithoutDefaultCase() fails with:

java.lang.IllegalArgumentException: Setting label target for already-set label
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.DirectCodeBuilder.setLabelTarget(DirectCodeBuilder.java:779)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.DirectCodeBuilder.setLabelTarget(DirectCodeBuilder.java:771)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.LabelImpl.writeTo(LabelImpl.java:76)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.DirectCodeBuilder.with(DirectCodeBuilder.java:125)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.DirectCodeBuilder.with(DirectCodeBuilder.java:47)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.BlockCodeBuilderImpl.with(BlockCodeBuilderImpl.java:87)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.BlockCodeBuilderImpl.with(BlockCodeBuilderImpl.java:37)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.CodeBuilder.labelBinding(CodeBuilder.java:784)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.HashSwitchCreatorImpl.writeCode(HashSwitchCreatorImpl.java:112)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.StringSwitchCreatorImpl.writeCode(StringSwitchCreatorImpl.java:1)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.BlockCreatorImpl.lambda$48(BlockCreatorImpl.java:1305)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.CodeBuilder.block(CodeBuilder.java:210)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.BlockCreatorImpl.writeCode(BlockCreatorImpl.java:1301)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.ExecutableCreatorImpl.doCode(ExecutableCreatorImpl.java:287)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.ExecutableCreatorImpl.lambda$9(ExecutableCreatorImpl.java:220)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.DirectCodeBuilder.build(DirectCodeBuilder.java:92)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.DirectMethodBuilder.withCode(DirectMethodBuilder.java:118)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.DirectMethodBuilder.withCode(DirectMethodBuilder.java:125)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.ExecutableCreatorImpl.doBody(ExecutableCreatorImpl.java:219)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.ExecutableCreatorImpl.lambda$16(ExecutableCreatorImpl.java:316)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.DirectMethodBuilder.run(DirectMethodBuilder.java:139)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.DirectClassBuilder.withMethod(DirectClassBuilder.java:117)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.ClassBuilder.withMethod(ClassBuilder.java:313)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.ExecutableCreatorImpl.body(ExecutableCreatorImpl.java:315)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.StaticMethodCreatorImpl.body(StaticMethodCreatorImpl.java:19)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.SwitchTest.lambda$49(SwitchTest.java:176)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.StaticMethodCreatorImpl.accept(StaticMethodCreatorImpl.java:27)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.TypeCreatorImpl.staticMethod(TypeCreatorImpl.java:252)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.SwitchTest.lambda$48(SwitchTest.java:173)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.GizmoImpl.lambda$1(GizmoImpl.java:83)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:145)
	at io.github.dmlloyd.classfile@24.0/io.github.dmlloyd.classfile.ClassFile.build(ClassFile.java:558)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.impl.GizmoImpl.class_(GizmoImpl.java:80)
	at io.quarkus.gizmo2/io.quarkus.gizmo2.SwitchTest.testStringSwitchWithoutDefaultCase(SwitchTest.java:172)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

Metadata

Metadata

Assignees

Labels

2.xIssue applies to Gizmo 2.x

Type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions