package jetbrains.mps.console.tool;
/*Generated by MPS */
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import jetbrains.mps.project.Project;
import org.jetbrains.mps.openapi.model.SModel;
import javax.swing.SwingUtilities;
import org.apache.log4j.Level;
import jetbrains.mps.make.script.IScript;
import jetbrains.mps.make.script.ScriptBuilder;
import jetbrains.mps.make.facet.IFacet;
import jetbrains.mps.make.facet.ITarget;
import jetbrains.mps.ide.messages.MessagesViewTool;
import jetbrains.mps.make.MakeSession;
import jetbrains.mps.make.IMakeService;
import java.util.concurrent.Future;
import jetbrains.mps.make.script.IResult;
import jetbrains.mps.smodel.resources.ModelsToResources;
import jetbrains.mps.internal.collections.runtime.Sequence;
import java.util.concurrent.ExecutionException;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import jetbrains.mps.ide.findusages.model.SearchResults;
import jetbrains.mps.ide.project.ProjectHelper;
import jetbrains.mps.ide.findusages.view.UsagesViewTool;
public class ConsoleUtil {
private static final Logger LOG = LogManager.getLogger(ConsoleUtil.class);
public static boolean make(final Project project, final SModel model) {
if (SwingUtilities.isEventDispatchThread()) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("Must be called not from EDT");
}
return false;
}
IScript scr = new ScriptBuilder().withFacetNames(new IFacet.Name("jetbrains.mps.lang.core.Generate"), new IFacet.Name("jetbrains.mps.lang.core.TextGen"), new IFacet.Name("jetbrains.mps.make.facets.JavaCompile"), new IFacet.Name("jetbrains.mps.make.facets.ReloadClasses"), new IFacet.Name("jetbrains.mps.make.facets.Make")).withFinalTarget(new ITarget.Name("jetbrains.mps.make.facets.Make.make")).toScript();
final MessagesViewTool mvt = project.getComponent(MessagesViewTool.class);
final String messagesListName = "Console Make";
mvt.getAvailableList(messagesListName, true).setWarningsEnabled(false);
mvt.getAvailableList(messagesListName, true).setInfoEnabled(false);
MakeSession session = new MakeSession(project, mvt.newHandler(messagesListName), true);
if (IMakeService.INSTANCE.get().openNewSession(session)) {
Future<IResult> future = IMakeService.INSTANCE.get().make(session, new ModelsToResources(Sequence.<SModel>singleton(model)).resources(false), scr);
try {
return future.get().isSucessful();
} catch (InterruptedException e) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("Error on making temporary model", e);
}
} catch (ExecutionException e) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("Error on making temporary model", e);
}
}
}
return false;
}
public static void show(Project p, _FunctionTypes._return_P0_E0<? extends SearchResults> results) {
try {
check_xg48a4_a0a0a0c(ProjectHelper.toIdeaProject(p)).show(results.invoke(), "No results to show");
} catch (Exception e) {
if (LOG.isEnabledFor(Level.WARN)) {
LOG.warn("Exception in showing custom console result", e);
}
}
}
private static UsagesViewTool check_xg48a4_a0a0a0c(com.intellij.openapi.project.Project checkedDotOperand) {
if (null != checkedDotOperand) {
return checkedDotOperand.getComponent(UsagesViewTool.class);
}
return null;
}
}