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 ae4964cc457e5a122206182fa8206eeda7ba8437 Author: Mark Struberg <[email protected]> AuthorDate: Thu Jun 22 12:21:43 2023 +0200 OPENJPA-2911 addGetIDOwningClass in ASM --- .../org/apache/openjpa/enhance/PCEnhancer.java | 23 ++++++++++++---------- 1 file changed, 13 insertions(+), 10 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 192087a44..44779186f 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 @@ -1384,14 +1384,16 @@ public class PCEnhancer { // persistent class inheritance hierarchy if (_meta.getIdentityType() == ClassMetaData.ID_APPLICATION && (_meta.getPCSuperclass() == null || getCreateSubclass() || - _meta.getObjectIdType() != - _meta.getPCSuperclassMetaData().getObjectIdType())) { + _meta.getObjectIdType() != _meta.getPCSuperclassMetaData().getObjectIdType())) { + AsmHelper.readIntoBCClass(pc, _pc); addCopyKeyFieldsToObjectIdMethod(true); addCopyKeyFieldsToObjectIdMethod(false); addCopyKeyFieldsFromObjectIdMethod(true); addCopyKeyFieldsFromObjectIdMethod(false); if (_meta.hasAbstractPKField()) { + pc = AsmHelper.toClassNode(_pc); addGetIDOwningClass(); + AsmHelper.readIntoBCClass(pc, _pc); } if (_meta.isEmbeddable() && _meta.getIdentityType() == ClassMetaData.ID_APPLICATION) { @@ -1402,7 +1404,9 @@ public class PCEnhancer { addNewObjectIdInstanceMethod(false); } else if (_meta.hasPKFieldsFromAbstractClass()) { + pc = AsmHelper.toClassNode(_pc); addGetIDOwningClass(); + AsmHelper.readIntoBCClass(pc, _pc); } } @@ -5683,15 +5687,14 @@ public class PCEnhancer { } private void addGetIDOwningClass() { - BCMethod method = _pc.declareMethod(PRE + "GetIDOwningClass", - Class.class, null); - Code code = method.getCode(true); - - code.classconstant().setClass(getType(_meta)); - code.areturn(); + MethodNode idOCMeth = new MethodNode(Opcodes.ACC_PUBLIC, + PRE + "GetIDOwningClass", + Type.getMethodDescriptor(Type.getType(Class.class)), + null, null); + pc.getClassNode().methods.add(idOCMeth); - code.calculateMaxStack(); - code.calculateMaxLocals(); + idOCMeth.instructions.add(AsmHelper.getLoadConstantInsn(getType(_meta))); + idOCMeth.instructions.add(new InsnNode(Opcodes.ARETURN)); } /**
