mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java back-end compiler extension point
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user