You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by st...@apache.org on 2020/07/23 12:07:29 UTC
[openjpa] 05/05: OPENJPA-2821 use AsmAdapter for subclassing
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 94a033d83bcab3e8f00c9927533ae9889c3d11ec
Author: Mark Struberg <st...@apache.org>
AuthorDate: Thu Jul 23 14:05:56 2020 +0200
OPENJPA-2821 use AsmAdapter for subclassing
to write proper java8 code
---
.../main/java/org/apache/openjpa/enhance/AsmAdaptor.java | 14 ++++++++++++++
.../org/apache/openjpa/enhance/ManagedClassSubclasser.java | 7 ++++++-
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/AsmAdaptor.java b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/AsmAdaptor.java
index 7bef1ef..6bb26d9 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/AsmAdaptor.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/AsmAdaptor.java
@@ -81,6 +81,20 @@ public final class AsmAdaptor {
}
}
+ public static void write(BCClass bc, OutputStream os) throws IOException {
+ if (bc.getMajorVersion() < Java7_MajorVersion) {
+ bc.write(os);
+ }
+ else {
+ try {
+ writeJava7(bc, os);
+ } finally {
+ os.flush();
+ os.close();
+ }
+ }
+ }
+
public static byte[] toByteArray(BCClass bc, byte[] returnBytes) throws IOException {
if (bc.getMajorVersion() >= Java7_MajorVersion) {
returnBytes = toJava7ByteArray(bc, returnBytes);
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java
index fab02ab..0a7d376 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java
@@ -18,6 +18,7 @@
*/
package org.apache.openjpa.enhance;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -142,6 +143,8 @@ public class ManagedClassSubclasser {
if (redefine) {
enhancer.setRedefine(true);
}
+
+ // we need to create subclasses because class retransform doesn't allow to change the interfaces of a previously loaded class
enhancer.setCreateSubclass(true);
enhancer.setAddDefaultConstructor(true);
@@ -276,7 +279,9 @@ public class ManagedClassSubclasser {
if (enhancer.isAlreadyRedefined())
ints.add(bc.getType());
else {
- map.put(bc.getType(), bc.toByteArray());
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ AsmAdaptor.write(bc, baos);
+ map.put(bc.getType(), baos.toByteArray());
debugBytecodes(bc);
}
} else {