diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileImpl.java b/src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileImpl.java index 8de62e7a12b..1fd4c5cb1a0 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileImpl.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -83,17 +83,28 @@ public record ClassFileImpl(StackMapsOption stackMapsOption, var chro = classHierarchyResolverOption; var amo = attributeMapperOption; for (var o : options) { - switch (o) { - case StackMapsOption oo -> smo = oo; - case DebugElementsOption oo -> deo = oo; - case LineNumbersOption oo -> lno = oo; - case AttributesProcessingOption oo -> apo = oo; - case ConstantPoolSharingOption oo -> cpso = oo; - case ShortJumpsOption oo -> sjo = oo; - case DeadCodeOption oo -> dco = oo; - case DeadLabelsOption oo -> dlo = oo; - case ClassHierarchyResolverOption oo -> chro = oo; - case AttributeMapperOption oo -> amo = oo; + if (o instanceof StackMapsOption oo) { + smo = oo; + } else if (o instanceof DebugElementsOption oo) { + deo = oo; + } else if (o instanceof LineNumbersOption oo) { + lno = oo; + } else if (o instanceof AttributesProcessingOption oo) { + apo = oo; + } else if (o instanceof ConstantPoolSharingOption oo) { + cpso = oo; + } else if (o instanceof ShortJumpsOption oo) { + sjo = oo; + } else if (o instanceof DeadCodeOption oo) { + dco = oo; + } else if (o instanceof DeadLabelsOption oo) { + dlo = oo; + } else if (o instanceof ClassHierarchyResolverOption oo) { + chro = oo; + } else if (o instanceof AttributeMapperOption oo) { + amo = oo; + } else { // null or unknown Option type + throw new IllegalArgumentException("Invalid option: " + o); } } return new ClassFileImpl(smo, deo, lno, apo, cpso, sjo, dco, dlo, chro, amo); diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapDecoder.java b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapDecoder.java index d0bf91171ac..609333048d0 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapDecoder.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapDecoder.java @@ -161,13 +161,14 @@ public class StackMapDecoder { private static void writeTypeInfo(BufWriterImpl bw, VerificationTypeInfo vti) { bw.writeU1(vti.tag()); - switch (vti) { - case SimpleVerificationTypeInfo svti -> + switch (vti.tag()) { + case VT_TOP, VT_INTEGER, VT_FLOAT, VT_DOUBLE, VT_LONG, VT_NULL, VT_UNINITIALIZED_THIS -> {} - case ObjectVerificationTypeInfo ovti -> - bw.writeIndex(ovti.className()); - case UninitializedVerificationTypeInfo uvti -> - bw.writeU2(bw.labelContext().labelToBci(uvti.newTarget())); + case VT_OBJECT -> + bw.writeIndex(((ObjectVerificationTypeInfo)vti).className()); + case VT_UNINITIALIZED -> + bw.writeU2(bw.labelContext().labelToBci(((UninitializedVerificationTypeInfo)vti).newTarget())); + default -> throw new IllegalArgumentException("Invalid verification type tag: " + vti.tag()); } }