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());
}
}