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 6fc05e14d00c23e3684256e5e6e63d1f71c32ecf
Author: Mark Struberg <strub...@apache.org>
AuthorDate: Tue Apr 25 16:16:46 2023 +0200

    OPENJPA-2908 fix delayed collection proxies
    
    some new methods in base interfaces did not get handled correctly
---
 .../java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java |  8 +++++---
 .../java/org/apache/openjpa/util/DelayedArrayListProxy.java    |  9 +++++++++
 .../main/java/org/apache/openjpa/util/DelayedHashSetProxy.java | 10 ++++++++++
 .../org/apache/openjpa/util/DelayedLinkedHashSetProxy.java     |  9 +++++++++
 .../java/org/apache/openjpa/util/DelayedLinkedListProxy.java   |  9 +++++++++
 .../org/apache/openjpa/util/DelayedPriorityQueueProxy.java     |  9 +++++++++
 .../main/java/org/apache/openjpa/util/DelayedTreeSetProxy.java |  9 +++++++++
 .../main/java/org/apache/openjpa/util/DelayedVectorProxy.java  |  9 +++++++++
 .../java/org/apache/openjpa/lib/conf/ConfigurationImpl.java    |  2 +-
 .../org/apache/openjpa/lib/meta/ClassMetaDataIterator.java     |  1 +
 .../java/org/apache/openjpa/lib/util/TemporaryClassLoader.java |  3 ++-
 11 files changed, 73 insertions(+), 5 deletions(-)

diff --git 
a/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java
 
b/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java
index 8c8f89ca5..6108d7daa 100644
--- 
a/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java
+++ 
b/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java
@@ -350,9 +350,11 @@ public abstract class AbstractMetaDataDefaults
      * user-defined.
      */
     protected static boolean isUserDefined(Class<?> cls) {
-        return cls != null && !cls.getName().startsWith("java.")
-            && !cls.getName().startsWith ("javax.");
-       }
+        return cls != null
+                && !cls.getName().startsWith("java.")
+                && !cls.getName().startsWith ("javax.")
+                && !cls.getName().startsWith ("jakarta.");
+    }
 
     /**
      * Affirms if the given method matches the following signature
diff --git 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedArrayListProxy.java
 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedArrayListProxy.java
index bef35b699..9a8bcc48e 100644
--- 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedArrayListProxy.java
+++ 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedArrayListProxy.java
@@ -25,6 +25,7 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;
+import java.util.function.IntFunction;
 
 import org.apache.openjpa.kernel.AutoDetach;
 import org.apache.openjpa.kernel.Broker;
@@ -406,6 +407,14 @@ public class DelayedArrayListProxy extends ArrayList 
implements ProxyCollection,
         return super.toArray(array);
     }
 
+    @Override
+    public Object[] toArray(IntFunction generator) {
+        if (!_directAccess && isDelayLoad()) {
+            load();
+        }
+        return super.toArray(generator);
+    }
+
     @Override
     public boolean equals(Object paramObject) {
         if (!_directAccess && isDelayLoad()) {
diff --git 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedHashSetProxy.java 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedHashSetProxy.java
index d15fedfbf..cb142f56d 100644
--- 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedHashSetProxy.java
+++ 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedHashSetProxy.java
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.function.IntFunction;
 
 import org.apache.openjpa.kernel.AutoDetach;
 import org.apache.openjpa.kernel.Broker;
@@ -276,6 +277,14 @@ public class DelayedHashSetProxy extends HashSet 
implements DelayedProxy, ProxyC
         return super.toArray(a);
     }
 
+    @Override
+    public Object[] toArray(IntFunction generator) {
+        if (!_directAccess && isDelayLoad()) {
+            load();
+        }
+        return super.toArray(generator);
+    }
+
     @Override
     public boolean containsAll(Collection c) {
         if (!_directAccess && isDelayLoad()) {
@@ -284,6 +293,7 @@ public class DelayedHashSetProxy extends HashSet implements 
DelayedProxy, ProxyC
         return super.containsAll(c);
     }
 
+
     @Override
     public String toString() {
         if (!_directAccess && isDelayLoad()) {
diff --git 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedHashSetProxy.java
 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedHashSetProxy.java
index 15e6b1dac..a15618771 100644
--- 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedHashSetProxy.java
+++ 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedHashSetProxy.java
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
+import java.util.function.IntFunction;
 
 import org.apache.openjpa.kernel.AutoDetach;
 import org.apache.openjpa.kernel.Broker;
@@ -275,6 +276,14 @@ public class DelayedLinkedHashSetProxy extends 
LinkedHashSet implements DelayedP
         return super.toArray(a);
     }
 
+    @Override
+    public Object[] toArray(IntFunction generator) {
+        if (!_directAccess && isDelayLoad()) {
+            load();
+        }
+        return super.toArray(generator);
+    }
+
     @Override
     public boolean containsAll(Collection c) {
         if (!_directAccess && isDelayLoad()) {
diff --git 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedListProxy.java
 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedListProxy.java
index 8df82db6b..77562c628 100644
--- 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedListProxy.java
+++ 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedListProxy.java
@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
+import java.util.function.IntFunction;
 
 import org.apache.openjpa.kernel.AutoDetach;
 import org.apache.openjpa.kernel.Broker;
@@ -568,6 +569,14 @@ public class DelayedLinkedListProxy extends LinkedList 
implements ProxyCollectio
         return super.toArray(array);
     }
 
+    @Override
+    public Object[] toArray(IntFunction generator) {
+        if (!_directAccess && isDelayLoad()) {
+            load();
+        }
+        return super.toArray(generator);
+    }
+
     @Override
     public boolean contains(Object object) {
         if (!_directAccess && isDelayLoad()) {
diff --git 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedPriorityQueueProxy.java
 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedPriorityQueueProxy.java
index 10f07da33..54283b9ec 100644
--- 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedPriorityQueueProxy.java
+++ 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedPriorityQueueProxy.java
@@ -24,6 +24,7 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.PriorityQueue;
 import java.util.SortedSet;
+import java.util.function.IntFunction;
 
 import org.apache.openjpa.kernel.AutoDetach;
 import org.apache.openjpa.kernel.Broker;
@@ -330,6 +331,14 @@ public class DelayedPriorityQueueProxy extends 
PriorityQueue implements ProxyCol
         return super.toArray(array);
     }
 
+    @Override
+    public Object[] toArray(IntFunction generator) {
+        if (!_directAccess && isDelayLoad()) {
+            load();
+        }
+        return super.toArray(generator);
+    }
+
     @Override
     public boolean containsAll(Collection c) {
         if (!_directAccess && isDelayLoad()) {
diff --git 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedTreeSetProxy.java 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedTreeSetProxy.java
index 281bf9aa8..0bdbb4b24 100644
--- 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedTreeSetProxy.java
+++ 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedTreeSetProxy.java
@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.NavigableSet;
 import java.util.SortedSet;
 import java.util.TreeSet;
+import java.util.function.IntFunction;
 
 import org.apache.openjpa.kernel.AutoDetach;
 import org.apache.openjpa.kernel.Broker;
@@ -315,6 +316,14 @@ public class DelayedTreeSetProxy extends TreeSet 
implements ProxyCollection, Del
         return super.toArray(array);
     }
 
+    @Override
+    public Object[] toArray(IntFunction generator) {
+        if (!_directAccess && isDelayLoad()) {
+            load();
+        }
+        return super.toArray(generator);
+    }
+
     @Override
     public Comparator comparator() {
         if (!_directAccess && isDelayLoad()) {
diff --git 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedVectorProxy.java 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedVectorProxy.java
index ee2ea87ea..d71495030 100644
--- 
a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedVectorProxy.java
+++ 
b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedVectorProxy.java
@@ -26,6 +26,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Vector;
+import java.util.function.IntFunction;
 
 import org.apache.openjpa.kernel.AutoDetach;
 import org.apache.openjpa.kernel.Broker;
@@ -525,6 +526,14 @@ public class DelayedVectorProxy extends Vector implements 
ProxyCollection, Delay
         return super.toArray(array);
     }
 
+    @Override
+    public Object[] toArray(IntFunction generator) {
+        if (!_directAccess && isDelayLoad()) {
+            load();
+        }
+        return super.toArray(generator);
+    }
+
     @Override
     public synchronized boolean equals(Object paramObject) {
         if (!_directAccess && isDelayLoad()) {
diff --git 
a/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java 
b/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
index b0acd1399..8c97b3978 100644
--- 
a/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
+++ 
b/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
@@ -769,7 +769,7 @@ public class ConfigurationImpl
     /**
      * Adds a prefix <code>"openjpa."</code> to the given key, if necessary. A 
key is
      * considered without prefix if it starts neither of 
<code>"openjpa."</code>,
-     * <code>"java."</code> and <code>"javax."</code>.
+     * <code>"java."</code>, <code>"javax."</code> and {@code "jakarta."}.
      */
     String fixPrefix(String key) {
         return (key == null || hasKnownPrefix(key)) ? key : "openjpa."+key;
diff --git 
a/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java
 
b/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java
index 246ea3b49..1b104dc75 100644
--- 
a/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java
+++ 
b/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java
@@ -66,6 +66,7 @@ public class ClassMetaDataIterator implements 
MetaDataIterator {
             ClassLoader loader, boolean topDown) {
         // skip classes that can't have metadata
         if (cls != null && (cls.isPrimitive()
+            || cls.getName().startsWith("jakarta.")
             || cls.getName().startsWith("java.")
             || cls.getName().startsWith("javax."))) {
             _loader = null;
diff --git 
a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/TemporaryClassLoader.java
 
b/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/TemporaryClassLoader.java
index f56f2fc46..1c3881790 100644
--- 
a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/TemporaryClassLoader.java
+++ 
b/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/TemporaryClassLoader.java
@@ -55,7 +55,8 @@ public class TemporaryClassLoader extends ClassLoader {
         // "sun." is required for JDK 1.4, which has an access check for
         // sun.reflect.GeneratedSerializationConstructorAccessor1
         if (name.startsWith("java.") || name.startsWith("javax.")
-            || name.startsWith("sun.") || name.startsWith("jdk.")) {
+            || name.startsWith("sun.") || name.startsWith("jdk.")
+            || name.startsWith("jakarta.") ) {
             return Class.forName(name, resolve, getClass().getClassLoader());
         }
 

Reply via email to