Skip to content

Commit 00a070a

Browse files
committed
[XMLBeans-483] further perf optimisation in array setter
1 parent ce44a8a commit 00a070a

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

src/main/java/org/apache/xmlbeans/impl/values/XmlComplexContentImpl.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -407,19 +407,20 @@ protected void arraySetterHelper(XmlObject[] sources, QName elemName, QNameSet s
407407
m = startPos;
408408
}
409409

410-
int j;
411-
for (i = startSrc, j = startDest; i < n; i++, j++) {
412-
TypeStoreUser user;
413-
414-
if (j >= m) {
415-
user = store.add_element_user(elemName);
416-
} else if (set == null) {
417-
user = store.find_element_user(elemName, j);
418-
} else {
419-
user = store.find_element_user(set, j);
420-
}
410+
final int size = Math.min(m - startDest, sources.length - startSrc);
411+
ArrayList<XmlObjectBase> users = new ArrayList<>(size);
412+
if (set == null) {
413+
store.find_multiple_element_users(elemName, users, size);
414+
} else {
415+
store.find_multiple_element_users(set, users, size);
416+
}
417+
i = startSrc;
418+
for (XmlObjectBase user : users) {
419+
user.set(sources[i++]);
420+
}
421421

422-
((XmlObjectBase) user).set(sources[i]);
422+
for (TypeStoreUser u : store.add_elements_users(elemName, n - i)) {
423+
((XmlObjectBase) u).set(sources[i++]);
423424
}
424425

425426
// We can't just delegate to array_setter because we need

0 commit comments

Comments
 (0)