package jetbrains.mps.smodel.undo;
/*Generated by MPS */
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SNode;
import java.util.List;
import jetbrains.mps.smodel.SNodeUndoableAction;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
public abstract class NodeBasedCommand extends DefaultCommand {
@NotNull
private SNode myMainNode;
public NodeBasedCommand(@NotNull SNode mainNode) {
myMainNode = mainNode;
}
@Override
public Iterable<SNode> getVirtualFileNodes(List<SNodeUndoableAction> actions) {
return Sequence.fromIterable(super.getVirtualFileNodes(ListSequence.fromList(actions).where(new IWhereFilter<SNodeUndoableAction>() {
public boolean accept(SNodeUndoableAction it) {
return !(SNodeOperations.getNodeAncestors(((SNode) it.getAffectedNode()), null, false).contains(myMainNode));
}
}).toListSequence())).union(Sequence.fromIterable(Sequence.<SNode>singleton(myMainNode)));
}
}