package jetbrains.mps.build.util; /*Generated by MPS */ import java.util.List; import org.jetbrains.mps.openapi.model.SNode; import java.util.ArrayList; import java.util.Set; import java.util.HashSet; import jetbrains.mps.generator.template.TemplateQueryContext; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.build.behavior.BuildLayout_PathElement__BehaviorDescriptor; public class UnpackHelper extends DependenciesHelper { private final VisibleArtifacts visible; private final List<SNode> required = new ArrayList<SNode>(); private final Set<SNode> requiredSet = new HashSet<SNode>(); private final Set<SNode> requiredWithContent = new HashSet<SNode>(); private boolean evaluated = false; private final List<SNode> statements = new ArrayList<SNode>(); private PathProvider myPathProvider; public UnpackHelper(VisibleArtifacts visible, TemplateQueryContext genContext) { super(genContext, visible.getProject()); this.visible = visible; this.myPathProvider = new PathProvider(genContext, visible.getProject()); } /*package*/ void add(SNode n, boolean withContent) { if (withContent) { requiredWithContent.add(n); } if (!(requiredSet.add(n))) { return; } SNode parent = visible.parent(n); if (parent != null) { add(parent, true); } ListSequence.fromList(required).addElement(n); } public void eval() { if (evaluated) { return; } evaluated = true; for (SNode n : required) { BuildLayout_PathElement__BehaviorDescriptor.unpack_id6IqTD4bJTWZ.invoke(n, this); } } public boolean isRequired(SNode n) { return requiredSet.contains(n); } public boolean isContentRequired(SNode n) { return requiredWithContent.contains(n); } public void emit(SNode st) { ListSequence.fromList(statements).addElement(st); } public SNode parent(SNode node) { return visible.parent(node); } public List<SNode> getStatements() { return ListSequence.fromList(statements).asUnmodifiable(); } public PathProvider getPathProvider() { return myPathProvider; } }