package jetbrains.mps.execution.configurations.pluginSolution.plugin; /*Generated by MPS */ import jetbrains.mps.execution.api.configurations.BaseMpsBeforeTaskProvider; import com.intellij.openapi.util.Key; import java.util.List; import org.jetbrains.mps.openapi.model.SNodeReference; import com.intellij.openapi.project.Project; import com.intellij.execution.runners.ExecutionEnvironment; import jetbrains.mps.ide.project.ProjectHelper; import jetbrains.mps.make.resources.IResource; import jetbrains.mps.smodel.ModelAccessHelper; import jetbrains.mps.util.Computable; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.internal.collections.runtime.ISelector; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.generator.ModelGenerationStatusManager; import jetbrains.mps.internal.collections.runtime.Sequence; import java.util.ArrayList; import jetbrains.mps.smodel.resources.ModelsToResources; import jetbrains.mps.make.MakeSession; import jetbrains.mps.ide.make.DefaultMakeMessageHandler; import jetbrains.mps.make.IMakeService; import java.util.concurrent.Future; import jetbrains.mps.make.script.IResult; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; public class MakeNodePointers_BeforeTask extends BaseMpsBeforeTaskProvider<MakeNodePointers_BeforeTask.MakeNodePointers_BeforeTask_RunTask> { private static final Key<MakeNodePointers_BeforeTask.MakeNodePointers_BeforeTask_RunTask> KEY = Key.create("jetbrains.mps.execution.configurations.pluginSolution.plugin.MakeNodePointers_BeforeTask"); public MakeNodePointers_BeforeTask() { super("MakeNodePointers", "Make"); } protected MakeNodePointers_BeforeTask.MakeNodePointers_BeforeTask_RunTask createTaskImpl() { return new MakeNodePointers_BeforeTask.MakeNodePointers_BeforeTask_RunTask(); } public Key<MakeNodePointers_BeforeTask.MakeNodePointers_BeforeTask_RunTask> getId() { return KEY; } public static class MakeNodePointers_BeforeTask_RunTask extends BaseMpsBeforeTaskProvider.BaseMpsBeforeRunTask<MakeNodePointers_BeforeTask.MakeNodePointers_BeforeTask_RunTask> { private List<SNodeReference> myNodePointers; public MakeNodePointers_BeforeTask_RunTask() { super(KEY); } public boolean configure(List<SNodeReference> nodePointers) { myNodePointers = nodePointers; return true; } public boolean execute(Project project, ExecutionEnvironment environment) { final jetbrains.mps.project.Project mpsProject = ProjectHelper.fromIdeaProject(project); List<IResource> resources = new ModelAccessHelper(mpsProject.getModelAccess()).runReadAction(new Computable<List<IResource>>() { public List<IResource> compute() { Iterable<SModel> models = ListSequence.fromList(myNodePointers).where(new IWhereFilter<SNodeReference>() { public boolean accept(SNodeReference it) { return it != null; } }).select(new ISelector<SNodeReference, SModel>() { public SModel select(SNodeReference it) { SNode n = it.resolve(mpsProject.getRepository()); return (n == null ? null : n.getModel()); } }).distinct().where(new IWhereFilter<SModel>() { public boolean accept(SModel it) { return ModelGenerationStatusManager.getInstance().generationRequired(it); } }); if (Sequence.fromIterable(models).isEmpty()) { return null; } List<IResource> list = ListSequence.fromListWithValues(new ArrayList<IResource>(), new ModelsToResources(models).resources(false)); return list; } }); if (ListSequence.fromList(resources).isEmpty()) { return true; } MakeSession session = new MakeSession(mpsProject, new DefaultMakeMessageHandler(mpsProject), true); if (IMakeService.INSTANCE.get().openNewSession(session)) { Future<IResult> future = IMakeService.INSTANCE.get().make(session, resources); IResult result = null; try { result = future.get(); } catch (CancellationException ignore) { } catch (InterruptedException ignore) { } catch (ExecutionException ignore) { } return result != null && result.isSucessful(); } return true; } } }