package jetbrains.mps.lang.dataFlow;
/*Generated by MPS */
import jetbrains.mps.lang.dataFlow.framework.ProgramFactory;
import jetbrains.mps.lang.dataFlow.framework.NamedAnalyzerId;
import jetbrains.mps.lang.dataFlow.framework.ProgramBuilderContext;
import java.util.Collection;
import jetbrains.mps.lang.dataFlow.framework.IDataFlowModeId;
import jetbrains.mps.lang.dataFlow.framework.ProgramBuilderContextImpl;
import jetbrains.mps.lang.dataFlow.framework.Program;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.lang.dataFlow.framework.instructions.InstructionBuilder;
import jetbrains.mps.lang.dataFlow.framework.AnalyzerRules;
import java.util.Collections;
public class MPSProgramFactory implements ProgramFactory<NamedAnalyzerId> {
private ProgramBuilderContext myContext;
public MPSProgramFactory(Collection<IDataFlowModeId> modes) {
this.myContext = new ProgramBuilderContextImpl(modes);
}
@Override
public Program createProgram(SNode node) {
return new MPSProgramBuilder(null, new InstructionBuilder(), myContext).buildProgram(node);
}
@Override
public void prepareProgram(Program program, SNode node, NamedAnalyzerId analyzerId) {
new AnalyzerRules(analyzerId.getAnalyzerFqName(), Collections.singletonList(node), program, myContext).apply();
}
protected ProgramBuilderContext getContext() {
return myContext;
}
}