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 < 0
- * or if i > # 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 < 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]