package jetbrains.mps.make.dependencies; /*Generated by MPS */ import jetbrains.mps.make.resources.IResource; import jetbrains.mps.make.script.IScript; import jetbrains.mps.make.MakeSession; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.NotNull; import jetbrains.mps.make.script.ScriptBuilder; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; public class MakeSequence { private Iterable<Cluster> myClusters; private final Iterable<? extends IResource> myInputRes; private final IScript myDefaultScript; private final MakeSession myMakeSession; public MakeSequence(Iterable<? extends IResource> inputRes, @Nullable IScript defaultScript, @NotNull MakeSession makeSession) { myInputRes = inputRes; myDefaultScript = defaultScript; myMakeSession = makeSession; prepareClusters(); } private void prepareClusters() { myMakeSession.getProject().getModelAccess().runReadAction(new Runnable() { public void run() { ModulesClusterizer clusterizer = new ModulesClusterizer(myMakeSession); myClusters = clusterizer.clusterize(myInputRes); } }); } private void prepareSciptForCluster(Cluster cluster) { if (myDefaultScript != null) { cluster.setScript(myDefaultScript); } else { ScriptBuilder builder = cluster.createScriptBuilder(); cluster.setScript(myMakeSession.toScript(builder)); } } public int steps() { return Sequence.fromIterable(myClusters).count(); } public void iterate(_FunctionTypes._return_P2_E0<? extends Boolean, ? super IScript, ? super Iterable<IResource>> iterator) { // iterator accepts script and resources to be processed by the script, and returns false to stop for (Cluster c : myClusters) { prepareSciptForCluster(c); if (!(iterator.invoke(c.getScript(), c.getResources()))) { break; } } } }