This is an automated email from the ASF dual-hosted git repository. struberg pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openjpa.git
commit dfaf8da48e9d01af1911cb6effb5362013e03d14 Author: Mark Struberg <strub...@apache.org> AuthorDate: Tue Jul 18 14:03:04 2023 +0200 OPENJPA-2911 move ASM stuff to one place --- .../java/org/apache/openjpa/enhance/PCEnhancer.java | 2 +- .../openjpa/util/ClassLoaderProxyService.java | 7 ++++++- .../java/org/apache/openjpa/util/asm/AsmHelper.java | 21 ++++++++++++++++++++- .../{enhance => util}/asm/BCClassWriter.java | 2 +- .../asm/EnhancementClassLoader.java | 5 +---- .../{enhance => util}/asm/EnhancementProject.java | 2 +- 6 files changed, 30 insertions(+), 9 deletions(-) diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java index df07eb691..fb52bc3cc 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java @@ -631,7 +631,7 @@ public class PCEnhancer { if (getCreateSubclass()) { PCSubclassValidator val = new PCSubclassValidator(_meta, managedType.getClassNode(), _log, _fail); val.assertCanSubclass(); - + pc = AsmHelper.copyClassNode(managedType, toPCSubclassName(managedType)); _pc = _managedType.getProject().loadClass(toPCSubclassName(managedType)); _pc.setMajorVersion(_managedType.getMajorVersion()); _pc.setMinorVersion(_managedType.getMinorVersion()); diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/ClassLoaderProxyService.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/ClassLoaderProxyService.java index 61627cd29..439046ec6 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/ClassLoaderProxyService.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/ClassLoaderProxyService.java @@ -34,7 +34,12 @@ public class ClassLoaderProxyService public ClassLoaderProxyService(Configuration config, final ClassLoader parentLoader) { - this.loader = new ProxiesClassLoader(parentLoader, false); + if (parentLoader instanceof ProxiesClassLoader) { + this.loader = (ProxiesClassLoader) parentLoader; + } + else { + this.loader = new ProxiesClassLoader(parentLoader, false); + } } protected ClassLoaderProxyService(final ProxiesClassLoader loader) diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/AsmHelper.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/AsmHelper.java index 8bfcd10a0..529ba4888 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/AsmHelper.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/AsmHelper.java @@ -26,7 +26,6 @@ import java.lang.reflect.Method; import java.util.Arrays; import java.util.Optional; -import org.apache.openjpa.enhance.asm.BCClassWriter; import org.apache.xbean.asm9.Attribute; import org.apache.xbean.asm9.ClassReader; import org.apache.xbean.asm9.ClassWriter; @@ -80,6 +79,26 @@ public final class AsmHelper { } } + /** + * Copy the binary information from the ClassNodeTracker to a new one + * @param cntIn the original ASM class representation + * @param newClassName the class name of the new ClassNodeTracker + * @return a new ClassNodeTracker + */ + public static ClassNodeTracker copyClassNode(ClassNodeTracker cntIn, String newClassName) { + final byte[] classBytes = toByteArray(cntIn); + + ClassReader cr = new ClassReader(classBytes); + ClassNode classNode = new ClassNode(Opcodes.ASM9); + cr.accept(classNode, ATTRS, 0); + + if ((classNode.version & 0xffff) < 49) { + classNode.version = 49; + } + + return new ClassNodeTracker(classNode, cntIn.getClassLoader()); + } + /** * Read the binary bytecode from the class with the given name * @param classLoader the ClassLoader to use diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/asm/BCClassWriter.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/BCClassWriter.java similarity index 97% rename from openjpa-kernel/src/main/java/org/apache/openjpa/enhance/asm/BCClassWriter.java rename to openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/BCClassWriter.java index 322cc0f30..94b604401 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/asm/BCClassWriter.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/BCClassWriter.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.openjpa.enhance.asm; +package org.apache.openjpa.util.asm; import org.apache.xbean.asm9.ClassWriter; diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/asm/EnhancementClassLoader.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/EnhancementClassLoader.java similarity index 94% rename from openjpa-kernel/src/main/java/org/apache/openjpa/enhance/asm/EnhancementClassLoader.java rename to openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/EnhancementClassLoader.java index 8fac1c4f6..8c971d513 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/asm/EnhancementClassLoader.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/EnhancementClassLoader.java @@ -14,10 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.openjpa.enhance.asm; - -import org.apache.openjpa.util.asm.AsmHelper; -import org.apache.openjpa.util.asm.ClassNodeTracker; +package org.apache.openjpa.util.asm; /** diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/asm/EnhancementProject.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/EnhancementProject.java similarity index 98% rename from openjpa-kernel/src/main/java/org/apache/openjpa/enhance/asm/EnhancementProject.java rename to openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/EnhancementProject.java index 43edfc21f..451ce039b 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/asm/EnhancementProject.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/EnhancementProject.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.openjpa.enhance.asm; +package org.apache.openjpa.util.asm; import java.util.HashMap;