move logic from generated classes to base class - xgetArray method

git-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1881776 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
index 6013da6..d2c658b 100644
--- a/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
+++ b/src/main/java/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
@@ -2033,17 +2033,7 @@
                 printJavaDoc("Gets (as xml) array of all " + propdesc + "s");
                 emit("public " + xtype + "[] xget" + arrayName + "() {");
                 startBlock();
-                emitImplementationPreamble();
-                if (_useJava15) {
-                    emit("java.util.List<" + xtype + "> targetList = new java.util.ArrayList<" + xtype + ">();");
-                } else {
-                    emit("java.util.List targetList = new java.util.ArrayList();");
-                }
-                emit("get_store().find_all_element_users(" + setIdentifier + ", targetList);");
-                emit(xtype + "[] result = new " + xtype + "[targetList.size()];");
-                emit("targetList.toArray(result);");
-                emit("return result;");
-                emitImplementationPostamble();
+                emit("return xgetArray(" + setIdentifier + ", " + xtype + "[]::new);");
                 endBlock();
 
                 // Value xgetProp(int i)
diff --git a/src/main/java/org/apache/xmlbeans/impl/values/XmlObjectBase.java b/src/main/java/org/apache/xmlbeans/impl/values/XmlObjectBase.java
index a8104e5..5b23ff9 100644
--- a/src/main/java/org/apache/xmlbeans/impl/values/XmlObjectBase.java
+++ b/src/main/java/org/apache/xmlbeans/impl/values/XmlObjectBase.java
@@ -3643,4 +3643,21 @@
         }
     }
 
+    protected <T extends XmlObject> T[] xgetArray(QName elementName, IntFunction<T[]> arrayCon) {
+        synchronized (monitor()) {
+            check_orphaned();
+            java.util.List<T> targetList = new java.util.ArrayList<>();
+            get_store().find_all_element_users(elementName, targetList);
+            return targetList.stream().toArray(arrayCon);
+        }
+    }
+
+    protected <T extends XmlObject> T[] xgetArray(QNameSet elementSet, IntFunction<T[]> arrayCon) {
+        synchronized (monitor()) {
+            check_orphaned();
+            java.util.List<T> targetList = new java.util.ArrayList<>();
+            get_store().find_all_element_users(elementSet, targetList);
+            return targetList.stream().toArray(arrayCon);
+        }
+    }
 }