JetCoreEnvironment implementaion over the new environment design in intellij-core
This commit is contained in:
@@ -16,15 +16,21 @@
|
||||
|
||||
package org.jetbrains.jet.cli.jvm.compiler;
|
||||
|
||||
import com.intellij.core.JavaCoreEnvironment;
|
||||
import com.intellij.core.CoreJavaFileManager;
|
||||
import com.intellij.core.JavaCoreApplicationEnvironment;
|
||||
import com.intellij.core.JavaCoreProjectEnvironment;
|
||||
import com.intellij.lang.java.JavaParserDefinition;
|
||||
import com.intellij.mock.MockApplication;
|
||||
import com.intellij.mock.MockProject;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElementFinder;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.impl.file.impl.JavaFileManager;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.asJava.JavaElementFinder;
|
||||
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
|
||||
@@ -47,12 +53,7 @@ import java.util.List;
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class JetCoreEnvironment extends JavaCoreEnvironment {
|
||||
private final List<JetFile> sourceFiles = new ArrayList<JetFile>();
|
||||
private final CoreAnnotationsProvider annotationsProvider;
|
||||
private final CompilerConfiguration configuration;
|
||||
private boolean initialized = false;
|
||||
|
||||
public class JetCoreEnvironment extends JavaCoreApplicationEnvironment {
|
||||
@NotNull
|
||||
public static JetCoreEnvironment createCoreEnvironmentForJS(Disposable disposable, @NotNull CompilerConfiguration configuration) {
|
||||
return new JetCoreEnvironment(disposable, configuration);
|
||||
@@ -63,6 +64,15 @@ public class JetCoreEnvironment extends JavaCoreEnvironment {
|
||||
return new JetCoreEnvironment(disposable, configuration);
|
||||
}
|
||||
|
||||
private final List<JetFile> sourceFiles = new ArrayList<JetFile>();
|
||||
private final CoreAnnotationsProvider annotationsProvider;
|
||||
|
||||
private final CompilerConfiguration configuration;
|
||||
|
||||
private boolean initialized = false;
|
||||
|
||||
private final JavaCoreProjectEnvironment projectEnvironment;
|
||||
|
||||
public JetCoreEnvironment(Disposable parentDisposable, @NotNull CompilerConfiguration configuration) {
|
||||
super(parentDisposable);
|
||||
this.configuration = configuration;
|
||||
@@ -75,14 +85,18 @@ public class JetCoreEnvironment extends JavaCoreEnvironment {
|
||||
registerParserDefinition(new JavaParserDefinition());
|
||||
registerParserDefinition(new JetParserDefinition());
|
||||
|
||||
projectEnvironment = new JavaCoreProjectEnvironment(parentDisposable, this);
|
||||
|
||||
myProject.registerService(JetFilesProvider.class, new CliJetFilesProvider(this));
|
||||
Extensions.getArea(myProject)
|
||||
|
||||
MockProject project = projectEnvironment.getProject();
|
||||
project.registerService(JetFilesProvider.class, new CliJetFilesProvider(this));
|
||||
project.registerService(CoreJavaFileManager.class, (CoreJavaFileManager) ServiceManager.getService(project, JavaFileManager.class));
|
||||
Extensions.getArea(project)
|
||||
.getExtensionPoint(PsiElementFinder.EP_NAME)
|
||||
.registerExtension(new JavaElementFinder(myProject));
|
||||
.registerExtension(new JavaElementFinder(project));
|
||||
|
||||
annotationsProvider = new CoreAnnotationsProvider();
|
||||
myProject.registerService(ExternalAnnotationsProvider.class, annotationsProvider);
|
||||
project.registerService(ExternalAnnotationsProvider.class, annotationsProvider);
|
||||
|
||||
for (File path : configuration.getList(JVMConfigurationKeys.CLASSPATH_KEY)) {
|
||||
addToClasspath(path);
|
||||
@@ -94,7 +108,7 @@ public class JetCoreEnvironment extends JavaCoreEnvironment {
|
||||
addSources(path);
|
||||
}
|
||||
|
||||
JetStandardLibrary.initialize(getProject());
|
||||
JetStandardLibrary.initialize(project);
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
@@ -106,6 +120,11 @@ public class JetCoreEnvironment extends JavaCoreEnvironment {
|
||||
return myApplication;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Project getProject() {
|
||||
return projectEnvironment.getProject();
|
||||
}
|
||||
|
||||
private void addExternalAnnotationsRoot(VirtualFile root) {
|
||||
annotationsProvider.addExternalAnnotationsRoot(root);
|
||||
}
|
||||
@@ -146,12 +165,20 @@ public class JetCoreEnvironment extends JavaCoreEnvironment {
|
||||
addSources(new File(path));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addToClasspath(File path) {
|
||||
if (initialized) {
|
||||
throw new IllegalStateException("Cannot add class path when JetCoreEnvironment is already initialized");
|
||||
}
|
||||
super.addToClasspath(path);
|
||||
if (path.isFile()) {
|
||||
projectEnvironment.addJarToClassPath(path);
|
||||
}
|
||||
else {
|
||||
final VirtualFile root = getLocalFileSystem().findFileByPath(path.getAbsolutePath());
|
||||
if (root == null) {
|
||||
throw new IllegalArgumentException("trying to add non-existing file to classpath: " + path);
|
||||
}
|
||||
projectEnvironment.addSourcesToClasspath(root);
|
||||
}
|
||||
}
|
||||
|
||||
public List<JetFile> getSourceFiles() {
|
||||
|
||||
Reference in New Issue
Block a user