public ReferenceTracker updateReferences()

in src/main/java/org/apache/commons/configuration2/tree/ReferenceTracker.java [96:131]


    public ReferenceTracker updateReferences(final Map<ImmutableNode, ImmutableNode> replacedNodes, final Collection<ImmutableNode> removedNodes) {
        if (!references.isEmpty()) {
            Map<ImmutableNode, Object> newRefs = null;
            for (final Map.Entry<ImmutableNode, ImmutableNode> e : replacedNodes.entrySet()) {
                final Object ref = references.get(e.getKey());
                if (ref != null) {
                    if (newRefs == null) {
                        newRefs = new HashMap<>(references);
                    }
                    newRefs.put(e.getValue(), ref);
                    newRefs.remove(e.getKey());
                }
            }

            List<Object> newRemovedRefs = newRefs != null ? new LinkedList<>(removedReferences) : null;
            for (final ImmutableNode node : removedNodes) {
                final Object ref = references.get(node);
                if (ref != null) {
                    if (newRefs == null) {
                        newRefs = new HashMap<>(references);
                    }
                    newRefs.remove(node);
                    if (newRemovedRefs == null) {
                        newRemovedRefs = new LinkedList<>(removedReferences);
                    }
                    newRemovedRefs.add(ref);
                }
            }

            if (newRefs != null) {
                return new ReferenceTracker(newRefs, newRemovedRefs);
            }
        }

        return this;
    }