Java back-end compiler extension point

This commit is contained in:
Roman Shevchenko
2010-04-01 17:14:24 +04:00
parent af06f478f5
commit af26b58cb9
4 changed files with 27 additions and 10 deletions
@@ -20,9 +20,12 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.compiler.CompilerBundle;
import com.intellij.openapi.compiler.CompilerManager;
import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
import com.intellij.openapi.components.*;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.ModuleListener;
@@ -47,9 +50,9 @@ import java.util.*;
@State(
name = "CompilerConfiguration",
storages = {
@Storage(id = "default", file = "$PROJECT_FILE$")
,@Storage(id = "dir", file = "$PROJECT_CONFIG_DIR$/compiler.xml", scheme = StorageScheme.DIRECTORY_BASED)
}
@Storage(id = "default", file = "$PROJECT_FILE$"),
@Storage(id = "dir", file = "$PROJECT_CONFIG_DIR$/compiler.xml", scheme = StorageScheme.DIRECTORY_BASED)
}
)
public class CompilerConfigurationImpl extends CompilerConfiguration implements PersistentStateComponent<Element>, ProjectComponent {
private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.CompilerConfiguration");
@@ -231,12 +234,24 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements
}
try {
CompilerAPICompiler inprocessJavaCompiler = new CompilerAPICompiler(myProject);
myRegisteredCompilers.add(inprocessJavaCompiler);
CompilerAPICompiler inProcessJavaCompiler = new CompilerAPICompiler(myProject);
myRegisteredCompilers.add(inProcessJavaCompiler);
}
catch (NoClassDefFoundError e) {
// wrong JDK
}
final BackendCompiler[] compilers = Extensions.getExtensions(BackendCompiler.EP_NAME, myProject);
final Set<FileType> types = new HashSet<FileType>();
for (BackendCompiler compiler : compilers) {
myRegisteredCompilers.add(compiler);
types.addAll(compiler.getCompilableFileTypes());
}
final CompilerManager compilerManager = CompilerManager.getInstance(myProject);
for (FileType type : types) {
compilerManager.addCompilableFileType(type);
}
}
myDefaultJavaCompiler = JAVAC_EXTERNAL_BACKEND;
@@ -18,6 +18,7 @@ package com.intellij.compiler.impl.javaCompiler;
import com.intellij.compiler.OutputParser;
import com.intellij.openapi.compiler.CompileContext;
import com.intellij.openapi.compiler.CompileScope;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.options.Configurable;
import org.jetbrains.annotations.NonNls;
@@ -28,6 +29,8 @@ import java.io.IOException;
import java.util.Set;
public interface BackendCompiler {
ExtensionPointName<BackendCompiler> EP_NAME = ExtensionPointName.create("com.intellij.java.compiler");
@NotNull @NonNls String getId(); // used for externalization
@NotNull String getPresentableName();
@NotNull Configurable createConfigurable();
@@ -46,4 +49,4 @@ public interface BackendCompiler {
@Nullable
DependencyProcessor getDependencyProcessor();
}
}
@@ -28,8 +28,6 @@ import com.intellij.compiler.make.CacheCorruptedException;
import com.intellij.openapi.compiler.*;
import com.intellij.openapi.compiler.ex.CompileContextEx;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
@@ -41,7 +39,6 @@ import java.util.Arrays;
public class JavaCompiler implements TranslatingCompiler {
private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.impl.javaCompiler.JavaCompiler");
private final Project myProject;
private static final FileTypeManager FILE_TYPE_MANAGER = FileTypeManager.getInstance();
public JavaCompiler(Project project) {
myProject = project;
@@ -53,7 +50,7 @@ public class JavaCompiler implements TranslatingCompiler {
}
public boolean isCompilableFile(VirtualFile file, CompileContext context) {
return FILE_TYPE_MANAGER.getFileTypeByFile(file).equals(StdFileTypes.JAVA);
return getBackEndCompiler().getCompilableFileTypes().contains(file.getFileType());
}
public void compile(CompileContext context, Chunk<Module> moduleChunk, VirtualFile[] files, OutputSink sink) {
+2
View File
@@ -163,6 +163,8 @@
<extensionPoint name="java.shortNamesCache" area="IDEA_PROJECT" interface="com.intellij.psi.search.PsiShortNamesCache"/>
<extensionPoint name="attachSourcesProvider" interface="com.intellij.codeInsight.AttachSourcesProvider"/>
<extensionPoint name="java.compiler" area="IDEA_PROJECT" interface="com.intellij.compiler.impl.javaCompiler.BackendCompiler"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">