package jetbrains.mps.ide.make.actions; /*Generated by MPS */ import com.intellij.openapi.progress.Task; import jetbrains.mps.project.Project; import java.util.Set; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.internal.collections.runtime.SetSequence; import java.util.LinkedHashSet; import jetbrains.mps.ide.project.ProjectHelper; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.progress.ProgressIndicator; import org.jetbrains.mps.openapi.util.ProgressMonitor; import jetbrains.mps.progress.ProgressMonitorAdapter; import jetbrains.mps.make.MPSCompilationResult; import jetbrains.mps.smodel.ModelAccessHelper; import jetbrains.mps.util.Computable; import jetbrains.mps.make.ModuleMaker; import jetbrains.mps.ide.messages.DefaultMessageHandler; import jetbrains.mps.messages.MessageKind; import jetbrains.mps.compiler.JavaCompilerOptionsComponent; import jetbrains.mps.classloading.ClassLoaderManager; public class DefaultMakeTask extends Task.Modal { private final Project myProject; private boolean needClean; private Set<SModule> modules = SetSequence.fromSet(new LinkedHashSet<SModule>()); public DefaultMakeTask(com.intellij.openapi.project.Project project, String title, Set<SModule> modules, boolean needClean) { super(project, title, true); this.needClean = needClean; SetSequence.fromSet(this.modules).addSequence(SetSequence.fromSet(modules)); myProject = ProjectHelper.fromIdeaProject(project); } @Override public void run(@NotNull ProgressIndicator indicator) { final ProgressMonitor monitor = new ProgressMonitorAdapter(indicator); monitor.start("", (needClean ? 10 : 9)); try { final MPSCompilationResult mpsCompilationResult = new ModelAccessHelper(myProject.getModelAccess()).runReadAction(new Computable<MPSCompilationResult>() { public MPSCompilationResult compute() { ModuleMaker maker = new ModuleMaker(new DefaultMessageHandler(getProject()).restrict(MessageKind.ERROR)); if (needClean) { maker.clean(modules, monitor.subTask(1)); } return maker.make(modules, monitor.subTask(7), JavaCompilerOptionsComponent.getInstance().getJavaCompilerOptions(myProject)); } }); if (mpsCompilationResult.isReloadingNeeded()) { myProject.getModelAccess().runWriteAction(new Runnable() { public void run() { ClassLoaderManager.getInstance().reloadModules(mpsCompilationResult.getChangedModules(), monitor.subTask(2)); } }); } } finally { monitor.done(); } } }