private void replaceReferences( String varName, InputId inputId, ReferenceCollection newSourceCollection) { ReferenceCollection combined = new ReferenceCollection(); List<Reference> combinedRefs = combined.references; ReferenceCollection oldCollection = refMap.get(varName); refMap.put(varName, combined); if (oldCollection == null) { combinedRefs.addAll(newSourceCollection.references); return; } // otherwise replace previous references that are from sourceName SourceRefRange range = findSourceRefRange(oldCollection.references, inputId); combinedRefs.addAll(range.refsBefore()); combinedRefs.addAll(newSourceCollection.references); combinedRefs.addAll(range.refsAfter()); }
private void removeScriptReferences(InputId inputId) { Preconditions.checkNotNull(inputId); if (!inputOrder.containsKey(inputId)) { return; // Input did not exist when last computed, so skip } // TODO(bashir): If this is too slow it is not too difficult to make it // faster with keeping an index for variables accessed in sourceName. for (ReferenceCollection collection : refMap.values()) { if (collection == null) { continue; } List<Reference> oldRefs = collection.references; SourceRefRange range = findSourceRefRange(oldRefs, inputId); List<Reference> newRefs = new ArrayList<>(range.refsBefore()); newRefs.addAll(range.refsAfter()); collection.references = newRefs; } }