Author: fanningpj
Date: Thu Jul 17 13:04:34 2025
New Revision: 1927290

URL: http://svn.apache.org/viewvc?rev=1927290&view=rev
Log:
[XMLBeans-438] revert changes as the changes seem to make things worse

Modified:
    xmlbeans/trunk/build.xml
    xmlbeans/trunk/gradle.properties
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cur.java
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Xobj.java
    xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/TypeStore.java
    
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/XmlComplexContentImpl.java
    xmlbeans/trunk/src/test/java/common/Common.java
    xmlbeans/trunk/src/test/java/compile/scomp/detailed/SchemaCompilerTests.java

Modified: xmlbeans/trunk/build.xml
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/build.xml?rev=1927290&r1=1927289&r2=1927290&view=diff
==============================================================================
--- xmlbeans/trunk/build.xml (original)
+++ xmlbeans/trunk/build.xml Thu Jul 17 13:04:34 2025
@@ -21,7 +21,7 @@
     <property name="jdk.version.class" value="1.8" description="JDK version of 
generated class files"/>
     <property name="compile.debug" value="true"/>
 
-    <property name="version.base" value="5.4.0-SNAPSHOT"/>
+    <property name="version.base" value="5.3.1-SNAPSHOT"/>
     <property name="version.rc" value=""/>
 
     <property name="cases.location" location="src/test/resources"/>

Modified: xmlbeans/trunk/gradle.properties
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/gradle.properties?rev=1927290&r1=1927289&r2=1927290&view=diff
==============================================================================
--- xmlbeans/trunk/gradle.properties (original)
+++ xmlbeans/trunk/gradle.properties Thu Jul 17 13:04:34 2025
@@ -14,8 +14,8 @@
 
 
 # comment-out, because of naming problems with the distribution plugin
-#project.version=5.4.0-SNAPSHOT
-XMLBeansVersion=5.4.0-SNAPSHOT
+#project.version=5.3.1-SNAPSHOT
+XMLBeansVersion=5.3.1-SNAPSHOT
 
 # Specifies the JVM arguments used for the daemon process.
 # The setting is particularly useful for tweaking memory settings.

Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cur.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cur.java?rev=1927290&r1=1927289&r2=1927290&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cur.java 
(original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Cur.java Thu 
Jul 17 13:04:34 2025
@@ -343,7 +343,7 @@ public final class Cur {
     private void createHelper(Xobj x) {
         assert x._locale == _locale;
 
-        // insert the new Xobj into an existing tree.
+        // insert the new Xobj into an exisiting tree.
 
         if (isPositioned()) {
             Cur from = tempCur(x, 0);
@@ -3425,4 +3425,4 @@ public final class Cur {
     public Locale getLocale() {
         return _locale;
     }
-}
+}
\ No newline at end of file

Modified: xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Xobj.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Xobj.java?rev=1927290&r1=1927289&r2=1927290&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Xobj.java 
(original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/store/Xobj.java Thu 
Jul 17 13:04:34 2025
@@ -1994,19 +1994,6 @@ abstract class Xobj implements TypeStore
 
     @SuppressWarnings("unchecked")
     @Override
-    public <T extends XmlObject> void find_multiple_element_users(final QName 
name, final List<T> fillMeUp,
-                                                                  final int 
maxCount) {
-        int count = 0;
-        for (Xobj x = _firstChild; x != null && count < maxCount; x = 
x._nextSibling) {
-            if (x.isElem() && x._name.equals(name)) {
-                fillMeUp.add((T) x.getUser());
-                count++;
-            }
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
     public <T extends XmlObject> void find_all_element_users(QNameSet names, 
List<T> fillMeUp) {
         for (Xobj x = _firstChild; x != null; x = x._nextSibling) {
             if (x.isElem() && names.contains(x._name)) {
@@ -2015,19 +2002,6 @@ abstract class Xobj implements TypeStore
         }
     }
 
-    @SuppressWarnings("unchecked")
-    @Override
-    public <T extends XmlObject> void find_multiple_element_users(final 
QNameSet names, final List<T> fillMeUp,
-                                                                  final int 
maxCount) {
-        int count = 0;
-        for (Xobj x = _firstChild; x != null && count < maxCount; x = 
x._nextSibling) {
-            if (x.isElem() && names.contains(x._name)) {
-                fillMeUp.add((T) x.getUser());
-                count++;
-            }
-        }
-    }
-
     private static TypeStoreUser insertElement(QName name, Xobj x, int pos) {
         x._locale.enter();
 
@@ -2043,26 +2017,6 @@ abstract class Xobj implements TypeStore
         }
     }
 
-    private static TypeStoreUser[] insertElements(final QName name, final Xobj 
x,
-                                                  final int pos, final int 
count) {
-        x._locale.enter();
-
-        TypeStoreUser[] users = new TypeStoreUser[count];
-        try {
-            Cur c = x._locale.tempCur();
-            c.moveTo(x, pos);
-            for (int i = count - 1; i >= 0; i--) {
-                c.createElement(name);
-                users[i] = c.getUser();
-            }
-            c.release();
-        } finally {
-            x._locale.exit();
-        }
-        return users;
-    }
-
-    @Override
     public TypeStoreUser insert_element_user(QName name, int i) {
         if (i < 0) {
             throw new IndexOutOfBoundsException();
@@ -2085,35 +2039,6 @@ abstract class Xobj implements TypeStore
         return insertElement(name, x, 0);
     }
 
-    @Override
-    public TypeStoreUser[] insert_elements_users(final QName name, final int i,
-                                                 final int count) {
-        if (i < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-
-        if (!isContainer()) {
-            throw new IllegalStateException();
-        }
-
-        if (count <= 0) {
-            return new TypeStoreUser[0];
-        }
-
-        Xobj x = _locale.findNthChildElem(this, name, null, i);
-
-        if (x == null) {
-            if (i > _locale.count(this, name, null) + 1) {
-                throw new IndexOutOfBoundsException();
-            }
-
-            return add_elements_users(name, count);
-        }
-
-        return insertElements(name, x, 0, count);
-    }
-
-    @Override
     public TypeStoreUser insert_element_user(QNameSet names, QName name, int 
i) {
         if (i < 0) {
             throw new IndexOutOfBoundsException();
@@ -2136,35 +2061,6 @@ abstract class Xobj implements TypeStore
         return insertElement(name, x, 0);
     }
 
-    @Override
-    public TypeStoreUser[] insert_elements_users(final QNameSet names, final 
QName name,
-                                                 final int i, final int count) 
{
-        if (i < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-
-        if (!isContainer()) {
-            throw new IllegalStateException();
-        }
-
-        if (count <= 0) {
-            return new TypeStoreUser[0];
-        }
-
-        Xobj x = _locale.findNthChildElem(this, null, names, i);
-
-        if (x == null) {
-            if (i > _locale.count(this, null, names) + 1) {
-                throw new IndexOutOfBoundsException();
-            }
-
-            return add_elements_users(name, count);
-        }
-
-        return insertElements(name, x, 0, count);
-    }
-
-    @Override
     public TypeStoreUser add_element_user(QName name) {
         if (!isContainer()) {
             throw new IllegalStateException();
@@ -2198,51 +2094,6 @@ abstract class Xobj implements TypeStore
                 : insertElement(name, candidate, 0);
     }
 
-    @Override
-    public TypeStoreUser[] add_elements_users(final QName name, final int 
count) {
-        if (!isContainer()) {
-            throw new IllegalStateException();
-        }
-
-        if (count <= 0) {
-            return new TypeStoreUser[0];
-        }
-
-        QNameSet endSet = null;
-        boolean gotEndSet = false;
-
-        Xobj candidate = null;
-
-        for (Xobj x = _lastChild; x != null; x = x._prevSibling) {
-            if (x.isContainer()) {
-                if (x._name.equals(name)) {
-                    break;
-                }
-
-                if (!gotEndSet) {
-                    endSet = _user.get_element_ending_delimiters(name);
-                    gotEndSet = true;
-                }
-
-                if (endSet == null || endSet.contains(x._name)) {
-                    candidate = x;
-                }
-            }
-        }
-
-        final TypeStoreUser[] users;
-        if (candidate == null) {
-            // If there is no candidate, then I need to insert at the end of 
this container
-            // and create a new element for each of the count
-            users = insertElements(name, this, END_POS, count);
-        } else {
-            // If I have a candidate, then I need to insert at the candidate 
and create
-            // a new element for each of the count
-            users = insertElements(name, candidate, 0, count);
-        }
-        return users;
-    }
-
     private static void removeElement(Xobj x) {
         if (x == null) {
             throw new IndexOutOfBoundsException();
@@ -2259,7 +2110,6 @@ abstract class Xobj implements TypeStore
         }
     }
 
-    @Override
     public void remove_element(QName name, int i) {
         if (i < 0) {
             throw new IndexOutOfBoundsException();
@@ -2280,63 +2130,6 @@ abstract class Xobj implements TypeStore
         removeElement(x);
     }
 
-    @Override
-    public void remove_elements_after(QName name, int i) {
-        if (i < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-
-        if (!isContainer()) {
-            throw new IllegalStateException();
-        }
-
-        ArrayList<Xobj> toRemove = new ArrayList<>();
-        Xobj x;
-        for (x = _firstChild; x != null; x = x._nextSibling) {
-            if (x.isElem() && x._name.equals(name) && --i < 0) {
-                toRemove.add(x);
-            }
-        }
-        final int size = toRemove.size();
-        for (int j = size - 1; j >= 0; j--) {
-            removeElement(toRemove.get(j));
-        }
-    }
-
-    @Override
-    public void remove_elements_between(final QName name, final int m, final 
int n) {
-        if (m < 0 || n < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-
-        if (!isContainer()) {
-            throw new IllegalStateException();
-        }
-
-        if (m >= n) {
-            return;
-        }
-
-        ArrayList<Xobj> toRemove = new ArrayList<>();
-        Xobj x;
-        int i = m;
-        int count = 0;
-        for (x = _firstChild; x != null; x = x._nextSibling) {
-            if (x.isElem() && x._name.equals(name) && --i < 0) {
-                toRemove.add(x);
-                count++;
-                if (count >= n - m) {
-                    break; // no need to continue if we've removed enough
-                }
-            }
-        }
-        final int size = toRemove.size();
-        for (int j = size - 1; j >= 0; j--) {
-            removeElement(toRemove.get(j));
-        }
-    }
-
-    @Override
     public void remove_element(QNameSet names, int i) {
         if (i < 0) {
             throw new IndexOutOfBoundsException();
@@ -2357,58 +2150,6 @@ abstract class Xobj implements TypeStore
         removeElement(x);
     }
 
-    @Override
-    public void remove_elements_after(QNameSet names, int i) {
-        if (i < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-
-        if (!isContainer()) {
-            throw new IllegalStateException();
-        }
-
-        Xobj x;
-
-        for (x = _firstChild; x != null; x = x._nextSibling) {
-            if (x.isElem() && names.contains(x._name) && --i < 0) {
-                removeElement(x);
-            }
-        }
-    }
-
-    @Override
-    public void remove_elements_between(final QNameSet names, final int m, 
final int n) {
-        if (m < 0 || n < 0) {
-            throw new IndexOutOfBoundsException();
-        }
-
-        if (!isContainer()) {
-            throw new IllegalStateException();
-        }
-
-        if (m >= n) {
-            return;
-        }
-
-        ArrayList<Xobj> toRemove = new ArrayList<>();
-        Xobj x;
-        int i = m;
-        int count = 0;
-        for (x = _firstChild; x != null; x = x._nextSibling) {
-            if (x.isElem() && names.contains(x._name) && --i < 0) {
-                toRemove.add(x);
-                count++;
-                if (count >= n - m) {
-                    break; // no need to continue if we've removed enough
-                }
-            }
-        }
-        final int size = toRemove.size();
-        for (int j = size - 1; j >= 0; j--) {
-            removeElement(toRemove.get(j));
-        }
-    }
-
     public TypeStoreUser find_attribute_user(QName name) {
         Xobj a = getAttr(name);
 
@@ -2553,7 +2294,7 @@ abstract class Xobj implements TypeStore
         try {
             // TODO - this is the quick and dirty implementation, make this 
faster
 
-            final int m = sources.length;
+            int m = sources.length;
 
             List<Xobj> copies = new ArrayList<>();
             List<SchemaType> types = new ArrayList<>();
@@ -2585,14 +2326,18 @@ abstract class Xobj implements TypeStore
                 }
             }
 
-            final int n = count_elements(elementName);
+            int n = count_elements(elementName);
+
+            for (; n > m; n--) {
+                remove_element(elementName, m);
+            }
 
-            if (n > m) {
-                remove_elements_after(elementName, m);
-            } else if (n < m) {
-                add_elements_users(elementName, m - n);
+            for (; m > n; n++) {
+                add_element_user(elementName);
             }
 
+            assert m == n;
+
             List<XmlObject> elementsUser = new ArrayList<>();
 
             find_all_element_users(elementName, elementsUser);
@@ -2603,6 +2348,8 @@ abstract class Xobj implements TypeStore
                 .map(x -> (Xobj) x)
                 .collect(Collectors.toList());
 
+            assert elements.size() == n;
+
             Cur c = tempCur();
 
             for (int i = 0; i < n; i++) {

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/TypeStore.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/TypeStore.java?rev=1927290&r1=1927289&r2=1927290&view=diff
==============================================================================
--- xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/TypeStore.java 
(original)
+++ xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/TypeStore.java 
Thu Jul 17 13:04:34 2025
@@ -183,19 +183,7 @@ public interface TypeStore extends Names
      * Returns all TypeStoreUsers corresponding to elements with one
      * of the names is the QNameSet.
      */
-    <T extends XmlObject> void find_all_element_users(QNameSet names, List<T> 
fillMeUp);
-
-    /**
-     * @since 5.4.0
-     */
-    <T extends XmlObject> void find_multiple_element_users(QName name, List<T> 
fillMeUp,
-                                                           int maxCount);
-
-    /**
-     * @since 5.4.0
-     */
-    <T extends XmlObject> void find_multiple_element_users(QNameSet names, 
List<T> fillMeUp,
-                                                           int maxCount);
+    <T extends XmlObject> void find_all_element_users(QNameSet name, List<T> 
fillMeUp);
 
     /**
      * Inserts a new element at the position that will make it
@@ -214,36 +202,12 @@ public interface TypeStore extends Names
     TypeStoreUser insert_element_user(QName name, int i);
 
     /**
-     * Inserts new elements at the position that will make the first one
-     * the ith element with the given name owned by this textstore,
-     * and returns a TypeStoreUser array with all new elements.
-     *
-     * Note that if there are no existing elements of the given
-     * name, you may need to call back to discover the proper
-     * ordering to use to insert the first one. Otherwise,
-     * it should be inserted adjacent to existing elements with
-     * the same name.
-     *
-     * Should throw an IndexOutOfBoundsException if i &lt; 0
-     * or if i &gt; # of elts
-     * @since 5.4.0
-     */
-    TypeStoreUser[] insert_elements_users(QName name, int i, int count);
-
-    /**
-     * Like the {@link #insert_element_user(QName, int)} method, except that 
it inserts an element named
+     * Like the above method, except that it inserts an element named
      * name, after the ith member of set.
      */
     TypeStoreUser insert_element_user(QNameSet set, QName name, int i);
 
     /**
-     * Like the {@link #insert_elements_users(QName, int, int)} method, except 
that it inserts elements named
-     * name, after the ith member of set.
-     * @since 5.4.0
-     */
-    TypeStoreUser[] insert_elements_users(QNameSet set, QName name, int i, int 
count);
-
-    /**
      * Adds a new element at the last position adjacent to existing
      * elements of the same name.
      *
@@ -253,16 +217,6 @@ public interface TypeStore extends Names
     TypeStoreUser add_element_user(QName name);
 
     /**
-     * Adds elements at the last position adjacent to existing
-     * elements of the same name.
-     *
-     * Note that if there are no existing elements of the given
-     * name, the same comment applies as with insert_element_user.
-     * @since 5.4.0
-     */
-    TypeStoreUser[] add_elements_users(QName name, int count);
-
-    /**
      * Removes the ith element with the given name.
      *
      * Should throw an IndexOutOfBoundsException if i &lt; 0
@@ -275,31 +229,6 @@ public interface TypeStore extends Names
      */
     void remove_element(QNameSet names, int i);
 
-    /**
-     * Removes all elements from the i-th element with the given name.
-     * @since 5.4.0
-     */
-    void remove_elements_after(QName name, int i);
-
-    /**
-     * Removes all elements from the i-th element with the given names.
-     * @since 5.4.0
-     */
-    void remove_elements_after(QNameSet names, int i);
-
-    /**
-     * Removes all elements from the m-th element with the given name up to 
the n-th
-     * element with the given name but not including the n-th element.
-     * @since 5.4.0
-     */
-    void remove_elements_between(QName name, int m, int n);
-
-    /**
-     * Removes all elements from the m-th element with the given name up to 
the n-th
-     * element with the given name but not including the n-th element.
-     * @since 5.4.0
-     */
-    void remove_elements_between(QNameSet names, int m, int n);
 
     /**
      * Returns the TypeStoreUser underneath the attribute with the given

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/XmlComplexContentImpl.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/XmlComplexContentImpl.java?rev=1927290&r1=1927289&r2=1927290&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/XmlComplexContentImpl.java
 (original)
+++ 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/values/XmlComplexContentImpl.java
 Thu Jul 17 13:04:34 2025
@@ -22,7 +22,6 @@ import org.apache.xmlbeans.impl.schema.S
 import javax.xml.namespace.QName;
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
@@ -316,10 +315,13 @@ public class XmlComplexContentImpl exten
         TypeStore store = get_store();
 
         if (sources == null || sources.length == 0) {
-            if (set == null) {
-                store.remove_elements_after(elemName, 0);
-            } else {
-                store.remove_elements_after(set, 0);
+            int m = (set == null) ? store.count_elements(elemName) : 
store.count_elements(set);
+            for (; m > 0; m--) {
+                if (set == null) {
+                    store.remove_element(elemName, 0);
+                } else {
+                    store.remove_element(set, 0);
+                }
             }
             return;
         }
@@ -396,168 +398,28 @@ public class XmlComplexContentImpl exten
         // ... then come back and insert the elements starting with startSource
         // up to i from the sources array into the current array, starting with
         // startDest
-        final int n = i;
-        final int startPos = n - startSrc + startDest;
-        if (m > startPos) {
+        int n = i;
+        for (; m > n - startSrc + startDest; m--) {
             if (set == null) {
-                store.remove_elements_between(elemName, startPos, m);
+                store.remove_element(elemName, m - 1);
             } else {
-                store.remove_elements_between(set, startPos, m);
-            }
-            m = startPos;
-        }
-
-        final int size = Math.min(m - startDest, sources.length - startSrc);
-        ArrayList<XmlObjectBase> users = new ArrayList<>(size);
-        if (set == null) {
-            store.find_multiple_element_users(elemName, users, size);
-        } else {
-            store.find_multiple_element_users(set, users, size);
-        }
-        i = startSrc;
-        for (XmlObjectBase user : users) {
-            user.set(sources[i++]);
-        }
-
-        for (TypeStoreUser u : store.add_elements_users(elemName, n - i)) {
-            ((XmlObjectBase) u).set(sources[i++]);
-        }
-
-        // We can't just delegate to array_setter because we need
-        // synchronization on the sources (potentially each element
-        // in the array on a different lock)
-        // get_store().array_setter( sources, elemName );
-    }
-
-    protected void arraySetterHelper2(XmlObject[] sources, QName elemName, 
QNameSet set) {
-        TypeStore store = get_store();
-
-        if (sources == null || sources.length == 0) {
-            if (set == null) {
-                store.remove_elements_after(elemName, 0);
-            } else {
-                store.remove_elements_after(set, 0);
-            }
-            return;
-        }
-
-        // Verify if the sources contain children of this node
-        int i;
-        // how many elements in the original array
-        int m = (set == null) ? store.count_elements(elemName) : 
store.count_elements(set);
-        int startSrc = 0, startDest = 0;
-        for (i = 0; i < sources.length; i++) {
-            if (sources[i].isImmutable()) {
-                continue;
-            }
-            try (XmlCursor c = sources[i].newCursor()) {
-                if (c.toParent() && c.getObject() == this) {
-                    break;
-                }
-            }
-        }
-        if (i < sources.length) {
-            TypeStoreUser current = (set == null) ? 
store.find_element_user(elemName, 0) : store.find_element_user(set, 0);
-            if (current == sources[i]) {
-                // The new object matches what already exists in the array
-                // Heuristic: we optimize for the case where the new elements
-                // in the array are the same as the existing elements with
-                // potentially new elements inserted
-
-                // First insert the new element in the array at position 0
-                int j = 0;
-                if (i > 0) {
-                    TypeStoreUser[] users;
-                    if (set == null) {
-                        users = store.insert_elements_users(elemName, 0, i);
-                    } else {
-                        users = store.insert_elements_users(set, elemName, 0, 
i);
-                    }
-                    for (TypeStoreUser user : users) {
-                        ((XmlObjectBase) user).set(sources[j++]);
-                    }
-                }
-                final ArrayList<XmlObjectBase> users = new 
ArrayList<>(sources.length);
-                if (set == null) {
-                    store.find_all_element_users(elemName, users);
-                } else {
-                    store.find_all_element_users(set, users);
-                }
-                final int usersLen = users.size();
-                int inserted = 0;
-                for (i++, j++; i < sources.length; i++, j++) {
-                    // Cursor is implicitly closed
-                    XmlCursor c = sources[i].isImmutable() ? null : 
sources[i].newCursor();
-                    if (c != null && c.toParent() && c.getObject() == this) {
-                        c.close();
-                        final int pos = j + inserted;
-                        current = pos < usersLen ? users.get(pos) : null;
-                        if (current != sources[i]) {
-                            // Fall back to the general case
-                            break;
-                        }
-                    } else {
-                        if (c != null) {
-                            c.close();
-                        }
-                        // Insert before the current element
-                        TypeStoreUser user = (set == null) ? 
store.insert_element_user(elemName, j) : store.insert_element_user(set, 
elemName, j);
-                        ((XmlObjectBase) user).set(sources[i]);
-                        inserted++;
-                    }
-                }
-                startDest = j;
-                startSrc = i;
-                m = store.count_elements(elemName);
+                store.remove_element(set, m - 1);
             }
-            // Fall through
-        } else {
-            // All of the elements in the existing array are to
-            // be deleted and replaced with elements from the
-            // sources array
         }
 
-        // The general case: we assume that some of the elements
-        // in the new array already exist, but at different indexes
-
-        // Starting with position i in the sources array, copy the remaining 
elements
-        // to the end of the original array...
-        if (i < sources.length) {
-            TypeStoreUser[] users = store.add_elements_users(elemName, 
sources.length - i);
-            int j = i;
-            for (TypeStoreUser user : users) {
-                ((XmlObjectBase) user).set(sources[j++]);
-            }
-        }
+        int j;
+        for (i = startSrc, j = startDest; i < n; i++, j++) {
+            TypeStoreUser user;
 
-        // ... then come back and insert the elements starting with startSource
-        // up to i from the sources array into the current array, starting with
-        // startDest
-        final int n = i;
-        final int startPos = n - startSrc + startDest;
-        if (m > startPos) {
-            if (set == null) {
-                store.remove_elements_between(elemName, startPos, m);
+            if (j >= m) {
+                user = store.add_element_user(elemName);
+            } else if (set == null) {
+                user = store.find_element_user(elemName, j);
             } else {
-                store.remove_elements_between(set, startPos, m);
+                user = store.find_element_user(set, j);
             }
-            m = startPos;
-        }
-
-        final int size = Math.min(m - startDest, sources.length - startSrc);
-        ArrayList<XmlObjectBase> users = new ArrayList<>(size);
-        if (set == null) {
-            store.find_multiple_element_users(elemName, users, size);
-        } else {
-            store.find_multiple_element_users(set, users, size);
-        }
-        i = startSrc;
-        for (XmlObjectBase user : users) {
-            user.set(sources[i++]);
-        }
 
-        for (TypeStoreUser u : store.add_elements_users(elemName, n - i)) {
-            ((XmlObjectBase) u).set(sources[i++]);
+            ((XmlObjectBase) user).set(sources[i]);
         }
 
         // We can't just delegate to array_setter because we need
@@ -566,6 +428,7 @@ public class XmlComplexContentImpl exten
         // get_store().array_setter( sources, elemName );
     }
 
+
     private <T> void commonSetterHelper(QName elemName, QNameSet set, T[] 
sources, BiConsumer<XmlObjectBase, Integer> fun) {
         commonSetterHelper(elemName, set, (sources == null) ? 0 : 
sources.length, fun);
     }
@@ -575,68 +438,54 @@ public class XmlComplexContentImpl exten
 
         int m = (set == null) ? store.count_elements(elemName) : 
store.count_elements(set);
 
-        if (m > n) {
+        for (; m > n; m--) {
             if (set == null) {
-                store.remove_elements_after(elemName, n);
+                store.remove_element(elemName, m - 1);
             } else {
-                store.remove_elements_after(set, n);
+                store.remove_element(set, m - 1);
             }
-            m = n;
         }
 
-        ArrayList<XmlObjectBase> users = new ArrayList<>(m);
-        if (set == null) {
-            store.find_all_element_users(elemName, users);
-        } else {
-            store.find_all_element_users(set, users);
-        }
-        int i = 0;
-        for (XmlObjectBase user : users) {
-            fun.accept(user, i++);
-        }
+        for (int i = 0; i < n; i++) {
+            TypeStoreUser user;
 
-        for (TypeStoreUser u : store.add_elements_users(elemName, n - m)) {
-            fun.accept((XmlObjectBase) u, i++);
+            if (i >= m) {
+                user = store.add_element_user(elemName);
+            } else if (set == null) {
+                user = store.find_element_user(elemName, i);
+            } else {
+                user = store.find_element_user(set, i);
+            }
+            fun.accept((XmlObjectBase) user, i);
         }
     }
 
     private <T> void commonSetterHelper2(QName elemName, QNameSet set, T[] 
sources, BiConsumer<XmlObjectBase, T> c) {
-        final int n = (sources == null) ? 0 : sources.length;
+        int n = (sources == null) ? 0 : sources.length;
 
         TypeStore store = get_store();
 
         int m = (set == null) ? store.count_elements(elemName) : 
store.count_elements(set);
 
-        if (m > n) {
-            // If the existing array is longer than the new one, we need to 
remove
-            // the extra elements
+        for (; m > n; m--) {
             if (set == null) {
-                store.remove_elements_after(elemName, n);
+                store.remove_element(elemName, m - 1);
             } else {
-                store.remove_elements_after(set, n);
+                store.remove_element(set, m - 1);
             }
-            m = n;
         }
 
-        ArrayList<XmlObjectBase> users = new ArrayList<>(m);
-        if (set == null) {
-            store.find_all_element_users(elemName, users);
-        } else {
-            store.find_all_element_users(set, users);
-        }
-        int i = 0;
-        for (XmlObjectBase user : users) {
-            if (i >= n) {
-                break;
-            }
-            c.accept(user, sources[i++]);
-        }
+        for (int i = 0; i < n; i++) {
+            TypeStoreUser user;
 
-        for (TypeStoreUser u : store.add_elements_users(elemName, n - m)) {
-            if (i >= n) {
-                break;
+            if (i >= m) {
+                user = store.add_element_user(elemName);
+            } else if (set == null) {
+                user = store.find_element_user(elemName, i);
+            } else {
+                user = store.find_element_user(set, i);
             }
-            c.accept((XmlObjectBase) u, sources[i++]);
+            c.accept((XmlObjectBase) user, sources[i]);
         }
     }
 }

Modified: xmlbeans/trunk/src/test/java/common/Common.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/test/java/common/Common.java?rev=1927290&r1=1927289&r2=1927290&view=diff
==============================================================================
--- xmlbeans/trunk/src/test/java/common/Common.java (original)
+++ xmlbeans/trunk/src/test/java/common/Common.java Thu Jul 17 13:04:34 2025
@@ -119,22 +119,6 @@ public class Common {
         return errFound;
     }
 
-    public static String collateSevereErrors(List<XmlError> errors) {
-        boolean errFound = errors.stream().anyMatch(e -> e.getSeverity() == 
XmlError.SEVERITY_ERROR);
-        String errorTxt = "";
-        if (errFound) {
-            StringBuilder errorBuilder = new StringBuilder("Errors found:\n");
-            for (XmlError xmlError : errors) {
-                if (xmlError.getSeverity() == XmlError.SEVERITY_ERROR) {
-                    errorBuilder.append(xmlError).append("\n");
-                }
-            }
-            errorTxt = errorBuilder.toString();
-        }
-        errors.clear();
-        return errorTxt;
-    }
-
     /**
      * Validate schemas to instance based on the docType
      */

Modified: 
xmlbeans/trunk/src/test/java/compile/scomp/detailed/SchemaCompilerTests.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/test/java/compile/scomp/detailed/SchemaCompilerTests.java?rev=1927290&r1=1927289&r2=1927290&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/test/java/compile/scomp/detailed/SchemaCompilerTests.java 
(original)
+++ 
xmlbeans/trunk/src/test/java/compile/scomp/detailed/SchemaCompilerTests.java 
Thu Jul 17 13:04:34 2025
@@ -24,7 +24,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import static common.Common.*;
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 
 /**
@@ -145,7 +144,7 @@ public class SchemaCompilerTests {
         params.setNoExt(true);
 
         SchemaCompiler.compile(params);
-        assertEquals("", collateSevereErrors(errors));
+        assertFalse(hasSevereError(errors), "testNoExt(): failure when 
executing scomp");
     }
 
     @Test



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to