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 5d781bd6dce4d7b2db0e7a85b7eb91aeb2a0e023
Author: Mark Struberg <strub...@apache.org>
AuthorDate: Thu Jun 22 09:56:40 2023 +0200

    OPENJPA-2911 addNoOpApplicationIdentityMethods in ASM
---
 .../org/apache/openjpa/enhance/PCEnhancer.java     | 114 ++++++++++++---------
 1 file changed, 64 insertions(+), 50 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 05e0cf42b..192087a44 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
@@ -1370,15 +1370,13 @@ public class PCEnhancer {
             addStockMethods();
             addGetVersionMethod();
             addReplaceStateManagerMethod();
-            AsmHelper.readIntoBCClass(pc, _pc);
 
             if (_meta.getIdentityType() != ClassMetaData.ID_APPLICATION) {
                 addNoOpApplicationIdentityMethods();
             }
         }
-        else { //X TODO remove whole else
-            AsmHelper.readIntoBCClass(pc, _pc);
-        }
+
+        AsmHelper.readIntoBCClass(pc, _pc);
 
         // add the app id methods to each subclass rather
         // than just the superclass, since it is possible to have
@@ -2176,53 +2174,69 @@ public class PCEnhancer {
      * identity and gives them no-op implementations.
      */
     private void addNoOpApplicationIdentityMethods() {
-        // public void pcCopyKeyFieldsToObjectId (ObjectIdFieldSupplier fs,
-        //     Object oid)
-        BCMethod method = _pc.declareMethod(PRE + "CopyKeyFieldsToObjectId",
-                                            void.class, new Class[]{OIDFSTYPE, 
Object.class});
-        Code code = method.getCode(true);
-        code.vreturn();
-        code.calculateMaxLocals();
-
-        // public void pcCopyKeyFieldsToObjectId (Object oid)
-        method = _pc.declareMethod(PRE + "CopyKeyFieldsToObjectId",
-                                   void.class, new Class[]{Object.class});
-        code = method.getCode(true);
-        code.vreturn();
-        code.calculateMaxLocals();
-
-        // public void pcCopyKeyFieldsFromObjectId (ObjectIdFieldConsumer fc,
-        //    Object oid)
-        method = _pc.declareMethod(PRE + "CopyKeyFieldsFromObjectId",
-                                   void.class, new Class[]{OIDFCTYPE, 
Object.class});
-        code = method.getCode(true);
-        code.vreturn();
-        code.calculateMaxLocals();
-
-        // public void pcCopyKeyFieldsFromObjectId (Object oid)
-        method = _pc.declareMethod(PRE + "CopyKeyFieldsFromObjectId",
-                                   void.class, new Class[]{Object.class});
-        code = method.getCode(true);
-        code.vreturn();
-        code.calculateMaxLocals();
-
-        // public Object pcNewObjectIdInstance ()
-        method = _pc.declareMethod(PRE + "NewObjectIdInstance",
-                                   Object.class, null);
-        code = method.getCode(true);
-        code.constant().setNull();
-        code.areturn();
-        code.calculateMaxStack();
-        code.calculateMaxLocals();
+        ClassNode classNode = pc.getClassNode();
+        {
+            // public void pcCopyKeyFieldsToObjectId (ObjectIdFieldSupplier 
fs, Object oid)
+            MethodNode copyKeyMeth = new MethodNode(Opcodes.ACC_PUBLIC,
+                                                    PRE + 
"CopyKeyFieldsToObjectId",
+                                                    
Type.getMethodDescriptor(Type.VOID_TYPE, Type.getType(OIDFSTYPE), TYPE_OBJECT),
+                                                    null, null);
+            classNode.methods.add(copyKeyMeth);
+            copyKeyMeth.instructions.add(new InsnNode(Opcodes.RETURN));
+        }
+
+        {
+            // public void pcCopyKeyFieldsToObjectId (Object oid)
+            MethodNode copyKeyMeth = new MethodNode(Opcodes.ACC_PUBLIC,
+                                                     PRE + 
"CopyKeyFieldsToObjectId",
+                                                     
Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_OBJECT),
+                                                     null, null);
+            classNode.methods.add(copyKeyMeth);
+            copyKeyMeth.instructions.add(new InsnNode(Opcodes.RETURN));
+        }
+
+        {
+            // public void pcCopyKeyFieldsFromObjectId (ObjectIdFieldConsumer 
fc, Object oid)
+            MethodNode copyKeyMeth = new MethodNode(Opcodes.ACC_PUBLIC,
+                                                    PRE + 
"CopyKeyFieldsFromObjectId",
+                                                    
Type.getMethodDescriptor(Type.VOID_TYPE, Type.getType(OIDFCTYPE), TYPE_OBJECT),
+                                                    null, null);
+            classNode.methods.add(copyKeyMeth);
+            copyKeyMeth.instructions.add(new InsnNode(Opcodes.RETURN));
+        }
+
+        {
+            // public void pcCopyKeyFieldsFromObjectId (Object oid)
+            MethodNode copyKeyMeth = new MethodNode(Opcodes.ACC_PUBLIC,
+                                                    PRE + 
"CopyKeyFieldsFromObjectId",
+                                                    
Type.getMethodDescriptor(Type.VOID_TYPE, TYPE_OBJECT),
+                                                    null, null);
+            classNode.methods.add(copyKeyMeth);
+            copyKeyMeth.instructions.add(new InsnNode(Opcodes.RETURN));
+        }
+
+        {
+            // public Object pcNewObjectIdInstance ()
+            MethodNode copyKeyMeth = new MethodNode(Opcodes.ACC_PUBLIC,
+                                                    PRE + 
"NewObjectIdInstance",
+                                                    
Type.getMethodDescriptor(TYPE_OBJECT),
+                                                    null, null);
+            classNode.methods.add(copyKeyMeth);
+            copyKeyMeth.instructions.add(new InsnNode(Opcodes.ACONST_NULL));
+            copyKeyMeth.instructions.add(new InsnNode(Opcodes.ARETURN));
+        }
+
+        {
+            // public Object pcNewObjectIdInstance (Object obj)
+            MethodNode copyKeyMeth = new MethodNode(Opcodes.ACC_PUBLIC,
+                                                    PRE + 
"NewObjectIdInstance",
+                                                    
Type.getMethodDescriptor(TYPE_OBJECT, TYPE_OBJECT),
+                                                    null, null);
+            classNode.methods.add(copyKeyMeth);
+            copyKeyMeth.instructions.add(new InsnNode(Opcodes.ACONST_NULL));
+            copyKeyMeth.instructions.add(new InsnNode(Opcodes.ARETURN));
 
-        // public Object pcNewObjectIdInstance (Object obj)
-        method = _pc.declareMethod(PRE + "NewObjectIdInstance",
-                                   Object.class, new Class[]{Object.class});
-        code = method.getCode(true);
-        code.constant().setNull();
-        code.areturn();
-        code.calculateMaxStack();
-        code.calculateMaxLocals();
+        }
     }
 
     /**

Reply via email to