diff --git a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java index 7af1a7c359db..ab3578fd67ee 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java @@ -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, 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 types = new HashSet(); + 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; diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/BackendCompiler.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/BackendCompiler.java index 1a1fffd2feca..7659c56a3927 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/BackendCompiler.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/BackendCompiler.java @@ -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 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(); -} \ No newline at end of file +} diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/JavaCompiler.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/JavaCompiler.java index 20601f3abc23..ffa69c25927a 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/JavaCompiler.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/JavaCompiler.java @@ -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 moduleChunk, VirtualFile[] files, OutputSink sink) { diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index 53be53b8126f..868085e39c42 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -163,6 +163,8 @@ + +