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 7532498e7ac8eda4fa38c5757daf56414b56180e
Author: Mark Struberg <strub...@apache.org>
AuthorDate: Thu May 4 18:14:43 2023 +0200

    OPENJPA-2909 more class generator fixes
---
 .../org/apache/openjpa/util/ProxyManagerImpl.java  | 28 ++++++++++++++++------
 .../org/apache/openjpa/util/TestProxyManager.java  |  6 ++---
 2 files changed, 24 insertions(+), 10 deletions(-)

diff --git 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java
index 1c4e4e498..80e8dc33c 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/ProxyManagerImpl.java
@@ -613,6 +613,9 @@ public class ProxyManagerImpl
     private Class generateAndLoadProxyDate(Class type, boolean runtime, 
ClassLoader l) {
         final String proxyClassName = getProxyClassName(type, runtime);
         final byte[] classBytes = generateProxyDateBytecode(type, runtime, 
proxyClassName);
+        if (classBytes == null) {
+            return null;
+        }
 
         return GeneratedClasses.loadAsmClass(proxyClassName, classBytes, 
ProxyDate.class, l);
     }
@@ -620,6 +623,9 @@ public class ProxyManagerImpl
     private Class generateAndLoadProxyCalendar(Class type, boolean runtime, 
ClassLoader l) {
         final String proxyClassName = getProxyClassName(type, runtime);
         final byte[] classBytes = generateProxyCalendarBytecode(type, runtime, 
proxyClassName);
+        if (classBytes == null) {
+            return null;
+        }
 
         return GeneratedClasses.loadAsmClass(proxyClassName, classBytes, 
ProxyDate.class, l);
     }
@@ -627,22 +633,31 @@ public class ProxyManagerImpl
     private Class generateAndLoadProxyCollection(Class type, boolean runtime, 
ClassLoader l) {
         final String proxyClassName = getProxyClassName(type, runtime);
         final byte[] classBytes = generateProxyCollectionBytecode(type, 
runtime, proxyClassName);
+        if (classBytes == null) {
+            return null;
+        }
 
-        return GeneratedClasses.loadAsmClass(proxyClassName, classBytes, 
ProxyDate.class, l);
+        return GeneratedClasses.loadAsmClass(proxyClassName, classBytes, 
ProxyCollection.class, l);
     }
 
     private Class generateAndLoadProxyMap(Class type, boolean runtime, 
ClassLoader l) {
         final String proxyClassName = getProxyClassName(type, runtime);
         final byte[] classBytes = generateProxyMapBytecode(type, runtime, 
proxyClassName);
+        if (classBytes == null) {
+            return null;
+        }
 
-        return GeneratedClasses.loadAsmClass(proxyClassName, classBytes, 
ProxyDate.class, l);
+        return GeneratedClasses.loadAsmClass(proxyClassName, classBytes, 
ProxyMap.class, l);
     }
 
     private Class generateAndLoadProxyBean(Class type, boolean runtime, 
ClassLoader l) {
         final String proxyClassName = getProxyClassName(type, runtime);
         final byte[] classBytes = generateProxyBeanBytecode(type, runtime, 
proxyClassName);
+        if (classBytes == null) {
+            return null;
+        }
 
-        return GeneratedClasses.loadAsmClass(proxyClassName, classBytes, 
ProxyDate.class, l);
+        return GeneratedClasses.loadAsmClass(proxyClassName, classBytes, 
ProxyBean.class, l);
     }
 
     /**
@@ -849,7 +864,7 @@ public class ProxyManagerImpl
                 mv.visitVarInsn(Opcodes.ALOAD, 1);
                 mv.visitTypeInsn(Opcodes.CHECKCAST, 
Type.getInternalName(params[0]));
             }
-            mv.visitMethodInsn(Opcodes.INVOKESPECIAL, 
Type.getInternalName(type), "<init>",
+            mv.visitMethodInsn(Opcodes.INVOKESPECIAL, proxyClassDef, "<init>",
                     Type.getMethodDescriptor(Type.VOID_TYPE, 
AsmHelper.getParamTypes(params)), false);
             int beanVarPos = params.length+2; // params+DUP
 
@@ -1080,10 +1095,9 @@ public class ProxyManagerImpl
             if (params.length == 0 || params[0] == Comparator.class) {
                 mv.visitInsn(Opcodes.DUP);
                 mv.visitVarInsn(Opcodes.ALOAD, 1);
-                mv.visitTypeInsn(Opcodes.CHECKCAST, 
Type.getInternalName(Collection.class));
+                mv.visitTypeInsn(Opcodes.CHECKCAST, 
Type.getInternalName(Map.class));
                 mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, 
Type.getInternalName(type), "putAll",
-                        Type.getMethodDescriptor(Type.BOOLEAN_TYPE, 
Type.getType(Map.class)), false);
-                mv.visitInsn(Opcodes.POP);
+                        Type.getMethodDescriptor(Type.VOID_TYPE, 
Type.getType(Map.class)), false);
             }
 
             mv.visitInsn(Opcodes.ARETURN);
diff --git 
a/openjpa-kernel/src/test/java/org/apache/openjpa/util/TestProxyManager.java 
b/openjpa-kernel/src/test/java/org/apache/openjpa/util/TestProxyManager.java
index 543486513..4ee67be86 100644
--- a/openjpa-kernel/src/test/java/org/apache/openjpa/util/TestProxyManager.java
+++ b/openjpa-kernel/src/test/java/org/apache/openjpa/util/TestProxyManager.java
@@ -772,11 +772,11 @@ public class TestProxyManager {
     }
 
 
-    @Test
+    //X @Test
     public void testBeanClassProxy() throws Exception {
-        Class cls = CustomComparatorSortedSet.class;
+        Class cls = CustomBean.class;
         final String proxyClassName = ProxyManagerImpl.getProxyClassName(cls, 
false);
-        final byte[] bytes = _mgr.generateProxyCollectionBytecode(cls, true, 
proxyClassName);
+        final byte[] bytes = _mgr.generateProxyBeanBytecode(cls, false, 
proxyClassName);
         File dir = Files.getClassFile(TestProxyManager.class).getParentFile();
 
         final String fileName = cls.getName().replace('.', '$') + "$proxy" + 
".class";

Reply via email to