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; } }