in src/main/java/org/apache/commons/configuration2/BaseHierarchicalConfiguration.java [78:122]
protected abstract void insert(ImmutableNode newNode, ImmutableNode parent, ImmutableNode sibling1, ImmutableNode sibling2,
ReferenceNodeHandler refHandler);
/**
* Inserts new children that have been added to the specified node.
*
* @param node the current node to be processed
* @param refHandler the {@code ReferenceNodeHandler}
*/
private void insertNewChildNodes(final ImmutableNode node, final ReferenceNodeHandler refHandler) {
final Collection<ImmutableNode> subNodes = new LinkedList<>(refHandler.getChildren(node));
final Iterator<ImmutableNode> children = subNodes.iterator();
ImmutableNode sibling1;
ImmutableNode nd = null;
while (children.hasNext()) {
// find the next new node
do {
sibling1 = nd;
nd = children.next();
} while (refHandler.getReference(nd) != null && children.hasNext());
if (refHandler.getReference(nd) == null) {
// find all following new nodes
final List<ImmutableNode> newNodes = new LinkedList<>();
newNodes.add(nd);
while (children.hasNext()) {
nd = children.next();
if (refHandler.getReference(nd) != null) {
break;
}
newNodes.add(nd);
}
// Insert all new nodes
final ImmutableNode sibling2 = refHandler.getReference(nd) == null ? null : nd;
for (final ImmutableNode insertNode : newNodes) {
if (refHandler.getReference(insertNode) == null) {
insert(insertNode, node, sibling1, sibling2, refHandler);
sibling1 = insertNode;
}
}
}
}
}