package jetbrains.mps.plugin; /*Generated by MPS */ import com.intellij.openapi.components.ProjectComponent; import jetbrains.mps.internal.make.runtime.java.IdeaJavaCompiler; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import jetbrains.mps.RuntimeFlags; import jetbrains.mps.make.MPSCompilationResult; import org.jetbrains.mps.openapi.module.SModule; import java.util.Set; import jetbrains.mps.internal.collections.runtime.SetSequence; import java.util.HashSet; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.vfs.IFile; import jetbrains.mps.smodel.SModelOperations; import java.util.Arrays; import java.util.Collections; import java.rmi.RemoteException; public class IdeaJavaCompilerImpl implements ProjectComponent, IdeaJavaCompiler { private final Project myProject; private IProjectHandler myIdeaProjectHandler; public IdeaJavaCompilerImpl(Project project) { myProject = project; } @Override public void projectOpened() { new Thread(new Runnable() { @Override public void run() { IdeaJavaCompilerImpl.this.myIdeaProjectHandler = getIdeaProjectHandler(); } }).start(); } @Override public void projectClosed() { myIdeaProjectHandler = null; } @NotNull @Override public String getComponentName() { return "IDEA Java Compiler"; } @Override public void initComponent() { } @Override public void disposeComponent() { } @Override public boolean isValid() { return !(RuntimeFlags.isTestMode()) && myIdeaProjectHandler != null; } @Override public MPSCompilationResult compileModules(SModule[] modules) { if (!(isValid())) { return null; } Set<String> modulePaths = SetSequence.fromSet(new HashSet<String>()); for (SModule module : modules) { for (SModel model : Sequence.fromIterable(module.getModels())) { IFile outputLocation = SModelOperations.getOutputLocation(model); if (outputLocation != null) { SetSequence.fromSet(modulePaths).addElement(outputLocation.getPath()); } } } try { IdeaCompilationResult ideaResult = myIdeaProjectHandler.buildModules(SetSequence.fromSet(modulePaths).toGenericArray(String.class)); if (ideaResult != null) { return new MPSCompilationResult(ideaResult.getErrorCount(), ideaResult.getWarningCount(), ideaResult.isAborted(), (ideaResult.hasCompiledAnything() ? Arrays.asList(modules) : Collections.<SModule>emptySet())); } } catch (RemoteException e) { e.printStackTrace(); } return null; } private IProjectHandler getIdeaProjectHandler() { if (RuntimeFlags.isTestMode()) { return null; } return MPSPlugin.getInstance().getProjectHandler(myProject.getBasePath()); } }