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