package jetbrains.mps.refactoring.participant;
/*Generated by MPS */
import java.util.Map;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
import java.util.Collections;
import java.util.List;
import jetbrains.mps.smodel.CopyUtil;
import jetbrains.mps.internal.collections.runtime.IMapping;
public class NodeCopyTracker {
private static final String id = "refactoringSession.nodeCopyTracker";
private Map<SNode, SNode> copyMap = MapSequence.fromMap(new HashMap<SNode, SNode>());
public static NodeCopyTracker get(RefactoringSession session) {
NodeCopyTracker result = (NodeCopyTracker) session.getObject(id);
if (result == null) {
result = new NodeCopyTracker();
session.putObject(id, result);
}
return result;
}
public Map<SNode, SNode> getCopyMap() {
return Collections.unmodifiableMap(copyMap);
}
public void putInCopyMap(Map<SNode, SNode> addition) {
MapSequence.fromMap(copyMap).putAll(addition);
}
public List<SNode> copyAndTrack(List<SNode> oldNodes) {
Map<SNode, SNode> localCopyMap = MapSequence.fromMap(new HashMap<SNode, SNode>());
List<SNode> result = CopyUtil.copyAndPreserveId(oldNodes, localCopyMap);
putInCopyMap(localCopyMap);
for (IMapping<SNode, SNode> mapping : MapSequence.fromMap(copyMap)) {
CopyUtil.addReferences(mapping.key(), copyMap, false);
}
return result;
}
}