From 15c1e60a0f5ffd33b0e4f9e94a804ff78243664a Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Fri, 19 Sep 2025 14:09:24 +1200 Subject: [PATCH] Upgrade ASM to 9.8 --- .../main/java/io/ebean/enhance/asm/ClassReader.java | 2 +- .../main/java/io/ebean/enhance/asm/MethodVisitor.java | 2 +- .../src/main/java/io/ebean/enhance/asm/Opcodes.java | 1 + .../io/ebean/enhance/asm/commons/AdviceAdapter.java | 8 ++------ .../io/ebean/enhance/asm/commons/GeneratorAdapter.java | 9 ++------- .../ebean/enhance/asm/commons/InstructionAdapter.java | 7 +------ .../enhance/asm/commons/LocalVariablesSorter.java | 7 +------ .../main/java/io/ebean/enhance/asm/commons/Method.java | 3 ++- .../enhance/asm/commons/ModuleHashesAttribute.java | 5 ++--- .../enhance/asm/commons/ModuleResolutionAttribute.java | 1 - .../enhance/asm/commons/ModuleTargetAttribute.java | 1 - .../enhance/asm/commons/SerialVersionUIDAdder.java | 9 +++++---- .../src/main/java/io/ebean/enhance/asm/package.html | 10 +++++----- 13 files changed, 23 insertions(+), 42 deletions(-) diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/ClassReader.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/ClassReader.java index 0588440d..faec57ac 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/ClassReader.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/ClassReader.java @@ -195,7 +195,7 @@ public ClassReader( this.b = classFileBuffer; // Check the class' major_version. This field is after the magic and minor_version fields, which // use 4 and 2 bytes respectively. - if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V24) { + if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V25) { throw new IllegalArgumentException( "Unsupported class file major version " + readShort(classFileOffset + 6)); } diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/MethodVisitor.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/MethodVisitor.java index 926957df..60012193 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/MethodVisitor.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/MethodVisitor.java @@ -596,7 +596,7 @@ public void visitTableSwitchInsn( * Visits a LOOKUPSWITCH instruction. * * @param dflt beginning of the default handler block. - * @param keys the values of the keys. + * @param keys the values of the keys. Keys must be sorted in increasing order. * @param labels beginnings of the handler blocks. {@code labels[i]} is the beginning of the * handler block for the {@code keys[i]} key. */ diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/Opcodes.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/Opcodes.java index 0f2ac3d6..19724ef7 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/Opcodes.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/Opcodes.java @@ -290,6 +290,7 @@ public interface Opcodes { int V22 = 0 << 16 | 66; int V23 = 0 << 16 | 67; int V24 = 0 << 16 | 68; + int V25 = 0 << 16 | 69; /** * Version flag indicating that the class is using 'preview' features. diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/AdviceAdapter.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/AdviceAdapter.java index f04a0ad5..79506e67 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/AdviceAdapter.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/AdviceAdapter.java @@ -27,16 +27,12 @@ // THE POSSIBILITY OF SUCH DAMAGE. package io.ebean.enhance.asm.commons; +import io.ebean.enhance.asm.*; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import io.ebean.enhance.asm.ConstantDynamic; -import io.ebean.enhance.asm.Handle; -import io.ebean.enhance.asm.Label; -import io.ebean.enhance.asm.MethodVisitor; -import io.ebean.enhance.asm.Opcodes; -import io.ebean.enhance.asm.Type; /** * A {@link MethodVisitor} to insert before, after and around advices in methods and constructors. diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/GeneratorAdapter.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/GeneratorAdapter.java index 48c2589c..b0739091 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/GeneratorAdapter.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/GeneratorAdapter.java @@ -27,16 +27,11 @@ // THE POSSIBILITY OF SUCH DAMAGE. package io.ebean.enhance.asm.commons; +import io.ebean.enhance.asm.*; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import io.ebean.enhance.asm.ClassVisitor; -import io.ebean.enhance.asm.ConstantDynamic; -import io.ebean.enhance.asm.Handle; -import io.ebean.enhance.asm.Label; -import io.ebean.enhance.asm.MethodVisitor; -import io.ebean.enhance.asm.Opcodes; -import io.ebean.enhance.asm.Type; /** * A {@link MethodVisitor} with convenient methods to generate code. For example, using this diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/InstructionAdapter.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/InstructionAdapter.java index f1804019..c792df52 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/InstructionAdapter.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/InstructionAdapter.java @@ -28,12 +28,7 @@ package io.ebean.enhance.asm.commons; -import io.ebean.enhance.asm.ConstantDynamic; -import io.ebean.enhance.asm.Handle; -import io.ebean.enhance.asm.Label; -import io.ebean.enhance.asm.MethodVisitor; -import io.ebean.enhance.asm.Opcodes; -import io.ebean.enhance.asm.Type; +import io.ebean.enhance.asm.*; /** * A {@link MethodVisitor} providing a more detailed API to generate and transform instructions. diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/LocalVariablesSorter.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/LocalVariablesSorter.java index 920d75aa..29728d8b 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/LocalVariablesSorter.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/LocalVariablesSorter.java @@ -27,12 +27,7 @@ // THE POSSIBILITY OF SUCH DAMAGE. package io.ebean.enhance.asm.commons; -import io.ebean.enhance.asm.AnnotationVisitor; -import io.ebean.enhance.asm.Label; -import io.ebean.enhance.asm.MethodVisitor; -import io.ebean.enhance.asm.Opcodes; -import io.ebean.enhance.asm.Type; -import io.ebean.enhance.asm.TypePath; +import io.ebean.enhance.asm.*; /** * A {@link MethodVisitor} that renumbers local variables in their order of appearance. This adapter diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/Method.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/Method.java index 41e83f06..b031b8a0 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/Method.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/Method.java @@ -27,9 +27,10 @@ // THE POSSIBILITY OF SUCH DAMAGE. package io.ebean.enhance.asm.commons; +import io.ebean.enhance.asm.Type; + import java.util.HashMap; import java.util.Map; -import io.ebean.enhance.asm.Type; /** * A named method descriptor. diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleHashesAttribute.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleHashesAttribute.java index aa146021..738ce328 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleHashesAttribute.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleHashesAttribute.java @@ -28,12 +28,11 @@ package io.ebean.enhance.asm.commons; +import io.ebean.enhance.asm.*; + import java.util.ArrayList; import java.util.List; -import io.ebean.enhance.asm.*; -import io.ebean.enhance.asm.ByteVector; - /** * A ModuleHashes attribute. This attribute is specific to the OpenJDK and may change in the future. * diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleResolutionAttribute.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleResolutionAttribute.java index 476c2103..420127c1 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleResolutionAttribute.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleResolutionAttribute.java @@ -29,7 +29,6 @@ package io.ebean.enhance.asm.commons; import io.ebean.enhance.asm.*; -import io.ebean.enhance.asm.ByteVector; /** * A ModuleResolution attribute. This attribute is specific to the OpenJDK and may change in the diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleTargetAttribute.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleTargetAttribute.java index f63cd09c..9284a7aa 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleTargetAttribute.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/ModuleTargetAttribute.java @@ -29,7 +29,6 @@ package io.ebean.enhance.asm.commons; import io.ebean.enhance.asm.*; -import io.ebean.enhance.asm.ByteVector; /** * A ModuleTarget attribute. This attribute is specific to the OpenJDK and may change in the future. diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/SerialVersionUIDAdder.java b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/SerialVersionUIDAdder.java index f39bc614..148f854d 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/SerialVersionUIDAdder.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/commons/SerialVersionUIDAdder.java @@ -27,6 +27,11 @@ // THE POSSIBILITY OF SUCH DAMAGE. package io.ebean.enhance.asm.commons; +import io.ebean.enhance.asm.ClassVisitor; +import io.ebean.enhance.asm.FieldVisitor; +import io.ebean.enhance.asm.MethodVisitor; +import io.ebean.enhance.asm.Opcodes; + import java.io.ByteArrayOutputStream; import java.io.DataOutput; import java.io.DataOutputStream; @@ -36,10 +41,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import io.ebean.enhance.asm.ClassVisitor; -import io.ebean.enhance.asm.FieldVisitor; -import io.ebean.enhance.asm.MethodVisitor; -import io.ebean.enhance.asm.Opcodes; /** * A {@link ClassVisitor} that adds a serial version unique identifier to a class if missing. A diff --git a/ebean-agent/src/main/java/io/ebean/enhance/asm/package.html b/ebean-agent/src/main/java/io/ebean/enhance/asm/package.html index 7014554e..93f87b13 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/asm/package.html +++ b/ebean-agent/src/main/java/io/ebean/enhance/asm/package.html @@ -37,10 +37,10 @@

The ASM framework is organized -around the {@link io.ebean.enhance.asm.ClassVisitor ClassVisitor}, -{@link io.ebean.enhance.asm.FieldVisitor FieldVisitor}, -{@link io.ebean.enhance.asm.MethodVisitor MethodVisitor} and -{@link io.ebean.enhance.asm.AnnotationVisitor AnnotationVisitor} abstract classes, +around the {@link org.objectweb.asm.ClassVisitor ClassVisitor}, +{@link org.objectweb.asm.FieldVisitor FieldVisitor}, +{@link org.objectweb.asm.MethodVisitor MethodVisitor} and +{@link org.objectweb.asm.AnnotationVisitor AnnotationVisitor} abstract classes, which allow one to visit the fields, methods and annotations of a class, including the bytecode instructions of each method. @@ -53,7 +53,7 @@

In order to generate a class from scratch, only the {@link -io.ebean.enhance.asm.ClassWriter ClassWriter} class is necessary. Indeed, +org.objectweb.asm.ClassWriter ClassWriter} class is necessary. Indeed, in order to generate a class, one must just call its visitXxx methods with the appropriate arguments to generate the desired fields and methods.