package jetbrains.mps.testbench;
/*Generated by MPS */
import jetbrains.mps.make.service.AbstractMakeService;
import jetbrains.mps.make.IMakeService;
import java.util.concurrent.Future;
import jetbrains.mps.make.script.IResult;
import jetbrains.mps.make.MakeSession;
import jetbrains.mps.make.resources.IResource;
import jetbrains.mps.make.script.IScript;
import jetbrains.mps.make.script.IScriptController;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.messages.Message;
import jetbrains.mps.messages.MessageKind;
import jetbrains.mps.internal.make.runtime.util.FutureValue;
import jetbrains.mps.make.dependencies.MakeSequence;
import jetbrains.mps.make.service.CoreMakeTask;
import jetbrains.mps.make.IMakeNotificationListener;
/**
* Simplistic make service tailored for MPS own tests
*/
public class TestMakeService extends AbstractMakeService implements IMakeService {
public TestMakeService() {
}
@Override
public Future<IResult> make(MakeSession session, Iterable<? extends IResource> resources, IScript script, IScriptController controller, @NotNull ProgressMonitor monitor) {
String scrName = "Build";
if (Sequence.fromIterable(resources).isEmpty()) {
String msg = scrName + " aborted: nothing to do";
session.getMessageHandler().handle(new Message(MessageKind.ERROR, msg));
return new FutureValue<IResult>(new IResult.FAILURE(null));
}
MakeSequence makeSeq = new MakeSequence(resources, script, session);
IScriptController ctl = this.completeController(controller, session);
CoreMakeTask task = new CoreMakeTask(scrName, makeSeq, ctl, session.getMessageHandler());
task.run(monitor);
return new FutureValue<IResult>(task.getResult());
}
@Override
public boolean isSessionActive() {
return false;
}
@Override
public boolean openNewSession(MakeSession session) {
return false;
}
@Override
public void closeSession(MakeSession session) {
}
@Override
public void addListener(IMakeNotificationListener listener) {
throw new UnsupportedOperationException();
}
@Override
public void removeListener(IMakeNotificationListener listener) {
throw new UnsupportedOperationException();
}
private IScriptController completeController(final IScriptController ctl, MakeSession makeSession) {
if (ctl != null) {
return ctl;
}
// it's MakeService client's responsibility to populate properties of possible facets, by default, we do nothing and use blank default controller
return new IScriptController.Stub2(makeSession);
}
}