package jetbrains.mps.make.script; /*Generated by MPS */ import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import jetbrains.mps.make.facet.ITarget; import jetbrains.mps.make.resources.IResource; import org.jetbrains.mps.openapi.util.ProgressMonitor; import jetbrains.mps.make.MakeSession; import org.jetbrains.annotations.NotNull; import jetbrains.mps.internal.make.runtime.script.MessageFeedbackStrategy; public interface IScriptController { void runConfigWithMonitor(_FunctionTypes._void_P1_E0<? super IConfigMonitor> code); void runJobWithMonitor(_FunctionTypes._void_P1_E0<? super IJobMonitor> code); void setup(IPropertiesPool pp, Iterable<ITarget> toExecute, Iterable<? extends IResource> input); @Deprecated void useMonitor(ProgressMonitor monitor); class Stub implements IScriptController { private final IConfigMonitor cmon; private final IJobMonitor jmon; public Stub(IConfigMonitor cmon, IJobMonitor jmon) { this.cmon = cmon; this.jmon = jmon; } public Stub() { this.cmon = new IConfigMonitor.Stub(); this.jmon = new IJobMonitor.Stub(); } @Override public void runJobWithMonitor(_FunctionTypes._void_P1_E0<? super IJobMonitor> code) { code.invoke(jmon); } @Override public void runConfigWithMonitor(_FunctionTypes._void_P1_E0<? super IConfigMonitor> code) { code.invoke(cmon); } protected void setup(IPropertiesPool ppool) { } @Override public void setup(IPropertiesPool pp, Iterable<ITarget> toExecute, Iterable<? extends IResource> input) { setup(pp); } @Override public void useMonitor(ProgressMonitor monitor) { } } /** * Session-sensitive controller. * The idea was, imo, to keep controller session-independent, but I can't find a way to pass MakeSession to individual * targets without this change. Alternative is to change IScript, but it doesn't suggest a mechanism to pass MakeSession furher * to the task's IJob, while IJobMonitor of the controller does. Now, I need a make session there, and don't want to spend time with IScript refactoring. * XXX Nevertheless consider alternative IScript implementation with a mechanism to pass MakeSession to tasks. Script is truly session-sensitive, after all. * Even then this class makes sense with generic code to employ {@link jetbrains.mps.make.script.PropertyPoolInitializer } to set up tasks. * To pass MakeSession with Script, I can utilize the fact that MakeSession creates IScript in its {@code toScript(ScriptBuilder)} method. Script would further * to ITarget.createJob(), and pass MakeSession in there (if supported. Could even introduce createJob(MakeSession)). The reason I stick to * IJobMonitor is that (a) once IProgress is history, there'd be nothing in IJobMonitor, (b) IJobMonitor gives clear scope when one could ask for session (with alternative approach, * where IJob is configured, scope and presence of the session would be implicit). */ class Stub2 implements IScriptController { private final MakeSession myMakeSession; private final PropertyPoolInitializer[] myPoolInitializers; private final IConfigMonitor myMonitor; public Stub2(@NotNull MakeSession makeSession, PropertyPoolInitializer... poolInitializers) { myMakeSession = makeSession; myPoolInitializers = poolInitializers; // FIXME identical to AbstractMakeService.DefaultMonitor, but can't re-use here due to dependency direction. Refactor myMonitor = new IConfigMonitor.Stub(myMakeSession) { @Override public void reportFeedback(IFeedback fdbk) { new MessageFeedbackStrategy(myMakeSession.getMessageHandler()).reportFeedback(fdbk); } @Override public <T extends IOption> T relayQuery(IQuery<T> query) { return query.defaultOption(); } }; } @Override public void runConfigWithMonitor(_FunctionTypes._void_P1_E0<? super IConfigMonitor> code) { code.invoke(myMonitor); } @Override public void runJobWithMonitor(_FunctionTypes._void_P1_E0<? super IJobMonitor> code) { code.invoke(myMonitor); } @Override public void setup(IPropertiesPool pp, Iterable<ITarget> toExecute, Iterable<? extends IResource> input) { if (myPoolInitializers == null) { return; } for (PropertyPoolInitializer ppi : myPoolInitializers) { ppi.populate(pp); } } @Deprecated @Override public void useMonitor(ProgressMonitor monitor) { } } }