From cefeecec4170bf80b9343fa235986d0065477248 Mon Sep 17 00:00:00 2001 From: Sam Whittle Date: Wed, 21 Feb 2024 15:50:04 +0100 Subject: [PATCH 1/6] Remove remaining uses of ClassLoadingStrategy.Default.INJECTION --- .../org/apache/beam/sdk/schemas/utils/AutoValueUtils.java | 6 ++++-- .../java/org/apache/beam/sdk/schemas/utils/POJOUtils.java | 5 +++-- .../extensions/avro/schemas/utils/AvroByteBuddyUtils.java | 5 +++-- .../beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java | 8 ++++---- .../apache/beam/sdk/io/aws2/schemas/AwsSchemaUtils.java | 4 ++-- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java index 769b22879418..f410114881fd 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java @@ -17,6 +17,7 @@ */ package org.apache.beam.sdk.schemas.utils; +import static org.apache.beam.sdk.util.ByteBuddyUtils.getClassLoadingStrategy; import static org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.base.Preconditions.checkNotNull; import java.lang.reflect.Constructor; @@ -36,7 +37,6 @@ import net.bytebuddy.description.method.MethodDescription.ForLoadedMethod; import net.bytebuddy.description.type.TypeDescription.ForLoadedType; import net.bytebuddy.dynamic.DynamicType; -import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; import net.bytebuddy.dynamic.scaffold.InstrumentedType; import net.bytebuddy.implementation.Implementation; import net.bytebuddy.implementation.bytecode.ByteCodeAppender; @@ -244,7 +244,9 @@ static SchemaUserTypeCreator createBuilderCreator( return builder .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), ClassLoadingStrategy.Default.INJECTION) + .load( + ReflectHelpers.findClassLoader(), + getClassLoadingStrategy(SchemaUserTypeCreator.class)) .getLoaded() .getDeclaredConstructor() .newInstance(); diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java index 66b0a5910570..c2b0eab81a78 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java @@ -32,7 +32,6 @@ import net.bytebuddy.description.field.FieldDescription.ForLoadedField; import net.bytebuddy.description.type.TypeDescription.ForLoadedType; import net.bytebuddy.dynamic.DynamicType; -import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; import net.bytebuddy.dynamic.scaffold.InstrumentedType; import net.bytebuddy.implementation.FixedValue; import net.bytebuddy.implementation.Implementation; @@ -253,7 +252,9 @@ public static SchemaUserTypeCreator createStaticCreator( return builder .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), ClassLoadingStrategy.Default.INJECTION) + .load( + ReflectHelpers.findClassLoader(), + getClassLoadingStrategy(SchemaUserTypeCreator.class)) .getLoaded() .getDeclaredConstructor() .newInstance(); diff --git a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroByteBuddyUtils.java b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroByteBuddyUtils.java index e07f6ffb4681..0a82663c1771 100644 --- a/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroByteBuddyUtils.java +++ b/sdks/java/extensions/avro/src/main/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroByteBuddyUtils.java @@ -17,6 +17,8 @@ */ package org.apache.beam.sdk.extensions.avro.schemas.utils; +import static org.apache.beam.sdk.util.ByteBuddyUtils.getClassLoadingStrategy; + import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Type; @@ -25,7 +27,6 @@ import net.bytebuddy.asm.AsmVisitorWrapper; import net.bytebuddy.description.type.TypeDescription.ForLoadedType; import net.bytebuddy.dynamic.DynamicType; -import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; import net.bytebuddy.implementation.MethodCall; import net.bytebuddy.implementation.bytecode.StackManipulation; import net.bytebuddy.implementation.bytecode.assign.TypeCasting; @@ -95,7 +96,7 @@ private static SchemaUserTypeCreator createCreator(Class clazz, Schema sc .make() .load( ReflectHelpers.findClassLoader(clazz.getClassLoader()), - ClassLoadingStrategy.Default.INJECTION) + getClassLoadingStrategy(clazz)) .getLoaded() .getDeclaredConstructor() .newInstance(); diff --git a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java index bb2e267bae23..9737b4a30e82 100644 --- a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java +++ b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java @@ -18,6 +18,7 @@ package org.apache.beam.sdk.extensions.protobuf; import static org.apache.beam.sdk.extensions.protobuf.ProtoSchemaTranslator.getFieldNumber; +import static org.apache.beam.sdk.util.ByteBuddyUtils.getClassLoadingStrategy; import com.google.protobuf.BoolValue; import com.google.protobuf.ByteString; @@ -55,7 +56,6 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription.ForLoadedType; import net.bytebuddy.dynamic.DynamicType; -import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; import net.bytebuddy.dynamic.scaffold.InstrumentedType; import net.bytebuddy.implementation.FixedValue; import net.bytebuddy.implementation.Implementation; @@ -538,7 +538,7 @@ static FieldValueGetter createOneOfGetter( return builder .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), ClassLoadingStrategy.Default.INJECTION) + .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(FieldValueGetter.class)) .getLoaded() .getDeclaredConstructor(List.class, OneOfType.class) .newInstance(getters, oneOfType); @@ -589,7 +589,7 @@ FieldValueSetter createOneOfSetter( return builder .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), ClassLoadingStrategy.Default.INJECTION) + .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(FieldValueSetter.class)) .getLoaded() .getDeclaredConstructor(List.class) .newInstance(setters); @@ -1067,7 +1067,7 @@ static SchemaUserTypeCreator createB new AsmVisitorWrapper.ForDeclaredMethods() .writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), ClassLoadingStrategy.Default.INJECTION) + .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(Supplier.class)) .getLoaded() .getDeclaredConstructor() .newInstance(); diff --git a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/schemas/AwsSchemaUtils.java b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/schemas/AwsSchemaUtils.java index 7aa23335b583..d36c197d80a4 100644 --- a/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/schemas/AwsSchemaUtils.java +++ b/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/schemas/AwsSchemaUtils.java @@ -19,6 +19,7 @@ import static net.bytebuddy.matcher.ElementMatchers.isStatic; import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.apache.beam.sdk.util.ByteBuddyUtils.getClassLoadingStrategy; import java.util.function.BiConsumer; import net.bytebuddy.ByteBuddy; @@ -26,7 +27,6 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription.ForLoadedType; import net.bytebuddy.description.type.TypeDescription.Generic; -import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; import net.bytebuddy.implementation.MethodCall; import org.apache.beam.sdk.schemas.FieldValueGetter; import org.apache.beam.sdk.schemas.FieldValueSetter; @@ -65,7 +65,7 @@ AwsBuilderFactory builderFactory(Class clazz) { .method(named("get")) .intercept(MethodCall.invoke(builderMethod)) .make() - .load(ReflectHelpers.findClassLoader(), ClassLoadingStrategy.Default.INJECTION) + .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(clazz)) .getLoaded() .getDeclaredConstructor() .newInstance(); From c58a434b01da5ea1ac32e806c96bd8c48892c61f Mon Sep 17 00:00:00 2001 From: Sam Whittle Date: Fri, 23 Feb 2024 19:17:49 +0100 Subject: [PATCH 2/6] change class in AutoValueUtils --- .../org/apache/beam/sdk/schemas/utils/AutoValueUtils.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java index f410114881fd..b622b766e306 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java @@ -34,6 +34,7 @@ import java.util.stream.Collectors; import net.bytebuddy.ByteBuddy; import net.bytebuddy.asm.AsmVisitorWrapper; +import net.bytebuddy.asm.AsmVisitorWrapper.ForDeclaredMethods; import net.bytebuddy.description.method.MethodDescription.ForLoadedMethod; import net.bytebuddy.description.type.TypeDescription.ForLoadedType; import net.bytebuddy.dynamic.DynamicType; @@ -227,7 +228,7 @@ private static boolean matchConstructor( private static final ByteBuddy BYTE_BUDDY = new ByteBuddy(); - static SchemaUserTypeCreator createBuilderCreator( + private static SchemaUserTypeCreator createBuilderCreator( Class builderClass, List setterMethods, Method buildMethod, @@ -242,11 +243,11 @@ static SchemaUserTypeCreator createBuilderCreator( .intercept( new BuilderCreateInstruction(types, setterMethods, builderClass, buildMethod)); return builder - .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) + .visit(new ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() .load( ReflectHelpers.findClassLoader(), - getClassLoadingStrategy(SchemaUserTypeCreator.class)) + getClassLoadingStrategy(builderClass)) .getLoaded() .getDeclaredConstructor() .newInstance(); From b6e54aed7cdc7df32233b91f69e9951a1e0510ae Mon Sep 17 00:00:00 2001 From: Sam Whittle Date: Mon, 26 Feb 2024 10:53:26 +0100 Subject: [PATCH 3/6] spotless --- .../org/apache/beam/sdk/schemas/utils/AutoValueUtils.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java index b622b766e306..dcbbf70888d3 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AutoValueUtils.java @@ -33,7 +33,6 @@ import java.util.function.Function; import java.util.stream.Collectors; import net.bytebuddy.ByteBuddy; -import net.bytebuddy.asm.AsmVisitorWrapper; import net.bytebuddy.asm.AsmVisitorWrapper.ForDeclaredMethods; import net.bytebuddy.description.method.MethodDescription.ForLoadedMethod; import net.bytebuddy.description.type.TypeDescription.ForLoadedType; @@ -245,9 +244,7 @@ private static SchemaUserTypeCreator createBuilderCreator( return builder .visit(new ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load( - ReflectHelpers.findClassLoader(), - getClassLoadingStrategy(builderClass)) + .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(builderClass)) .getLoaded() .getDeclaredConstructor() .newInstance(); From 83dae074ae0a8604671a06ac9d9cb14eac684ad8 Mon Sep 17 00:00:00 2001 From: Sam Whittle Date: Mon, 26 Feb 2024 11:05:12 +0100 Subject: [PATCH 4/6] switch load to use class that package is taken from --- .../java/org/apache/beam/sdk/schemas/utils/POJOUtils.java | 2 +- .../beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java index c2b0eab81a78..c910aa399fca 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java @@ -254,7 +254,7 @@ public static SchemaUserTypeCreator createStaticCreator( .make() .load( ReflectHelpers.findClassLoader(), - getClassLoadingStrategy(SchemaUserTypeCreator.class)) + getClassLoadingStrategy(clazz)) .getLoaded() .getDeclaredConstructor() .newInstance(); diff --git a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java index 9737b4a30e82..199d00e12d6f 100644 --- a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java +++ b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java @@ -538,7 +538,7 @@ static FieldValueGetter createOneOfGetter( return builder .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(FieldValueGetter.class)) + .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(protoClass)) .getLoaded() .getDeclaredConstructor(List.class, OneOfType.class) .newInstance(getters, oneOfType); @@ -589,7 +589,7 @@ FieldValueSetter createOneOfSetter( return builder .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(FieldValueSetter.class)) + .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(protoBuilderClass)) .getLoaded() .getDeclaredConstructor(List.class) .newInstance(setters); @@ -1067,7 +1067,7 @@ static SchemaUserTypeCreator createB new AsmVisitorWrapper.ForDeclaredMethods() .writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(Supplier.class)) + .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(builderClass)) .getLoaded() .getDeclaredConstructor() .newInstance(); From 68ef98e84b1da81fab09c55e0926bc0af4633662 Mon Sep 17 00:00:00 2001 From: Sam Whittle Date: Mon, 26 Feb 2024 11:07:53 +0100 Subject: [PATCH 5/6] spotless --- .../java/org/apache/beam/sdk/schemas/utils/POJOUtils.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java index c910aa399fca..93875a20707f 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/POJOUtils.java @@ -252,9 +252,7 @@ public static SchemaUserTypeCreator createStaticCreator( return builder .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load( - ReflectHelpers.findClassLoader(), - getClassLoadingStrategy(clazz)) + .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(clazz)) .getLoaded() .getDeclaredConstructor() .newInstance(); From 43d3aeb486a0185408aa9b307b90fd001090d8bf Mon Sep 17 00:00:00 2001 From: Sam Whittle Date: Mon, 26 Feb 2024 20:32:41 +0100 Subject: [PATCH 6/6] rm proto changes --- .../beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java index 199d00e12d6f..bb2e267bae23 100644 --- a/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java +++ b/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java @@ -18,7 +18,6 @@ package org.apache.beam.sdk.extensions.protobuf; import static org.apache.beam.sdk.extensions.protobuf.ProtoSchemaTranslator.getFieldNumber; -import static org.apache.beam.sdk.util.ByteBuddyUtils.getClassLoadingStrategy; import com.google.protobuf.BoolValue; import com.google.protobuf.ByteString; @@ -56,6 +55,7 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription.ForLoadedType; import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; import net.bytebuddy.dynamic.scaffold.InstrumentedType; import net.bytebuddy.implementation.FixedValue; import net.bytebuddy.implementation.Implementation; @@ -538,7 +538,7 @@ static FieldValueGetter createOneOfGetter( return builder .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(protoClass)) + .load(ReflectHelpers.findClassLoader(), ClassLoadingStrategy.Default.INJECTION) .getLoaded() .getDeclaredConstructor(List.class, OneOfType.class) .newInstance(getters, oneOfType); @@ -589,7 +589,7 @@ FieldValueSetter createOneOfSetter( return builder .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(protoBuilderClass)) + .load(ReflectHelpers.findClassLoader(), ClassLoadingStrategy.Default.INJECTION) .getLoaded() .getDeclaredConstructor(List.class) .newInstance(setters); @@ -1067,7 +1067,7 @@ static SchemaUserTypeCreator createB new AsmVisitorWrapper.ForDeclaredMethods() .writerFlags(ClassWriter.COMPUTE_FRAMES)) .make() - .load(ReflectHelpers.findClassLoader(), getClassLoadingStrategy(builderClass)) + .load(ReflectHelpers.findClassLoader(), ClassLoadingStrategy.Default.INJECTION) .getLoaded() .getDeclaredConstructor() .newInstance();