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