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;
 

Reply via email to