diff --git a/.idea/modules.xml b/.idea/modules.xml
index 1b1b16f3e885..a688802c8e9c 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -542,6 +542,7 @@
+
diff --git a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java
index 8bbd7f47f83a..f5f001aa4cd7 100644
--- a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java
+++ b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java
@@ -376,12 +376,16 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements
public void setAdditionalOptions(@NotNull Module module, @NotNull List options) {
JpsJavaCompilerOptions settings = getCompilerSettings();
if (settings != null) {
- String previous = settings.ADDITIONAL_OPTIONS_OVERRIDE.getOrDefault(module.getName(), settings.ADDITIONAL_OPTIONS_STRING);
- String newValue = ParametersListUtil.join(options);
- if (!newValue.equals(previous)) {
- settings.ADDITIONAL_OPTIONS_OVERRIDE.put(module.getName(), newValue);
- BuildManager.getInstance().clearState(myProject);
- }
+ setAdditionalOptions(settings, module, options);
+ }
+ }
+
+ public void setAdditionalOptions(@NotNull JpsJavaCompilerOptions settings, @NotNull Module module, @NotNull List options) {
+ String previous = settings.ADDITIONAL_OPTIONS_OVERRIDE.getOrDefault(module.getName(), settings.ADDITIONAL_OPTIONS_STRING);
+ String newValue = ParametersListUtil.join(options);
+ if (!newValue.equals(previous)) {
+ settings.ADDITIONAL_OPTIONS_OVERRIDE.put(module.getName(), newValue);
+ BuildManager.getInstance().clearState(myProject);
}
}
diff --git a/plugins/maven/error-prone-compiler/intellij.maven.errorProne.compiler.iml b/plugins/maven/error-prone-compiler/intellij.maven.errorProne.compiler.iml
new file mode 100644
index 000000000000..243ffd954358
--- /dev/null
+++ b/plugins/maven/error-prone-compiler/intellij.maven.errorProne.compiler.iml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/maven/error-prone-compiler/src/main/java/org/intellij/errorProne/MavenCompilerErrorProneExtension.kt b/plugins/maven/error-prone-compiler/src/main/java/org/intellij/errorProne/MavenCompilerErrorProneExtension.kt
new file mode 100644
index 000000000000..248c505c0c65
--- /dev/null
+++ b/plugins/maven/error-prone-compiler/src/main/java/org/intellij/errorProne/MavenCompilerErrorProneExtension.kt
@@ -0,0 +1,26 @@
+// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package org.intellij.errorProne
+
+import com.intellij.compiler.CompilerConfiguration
+import com.intellij.compiler.CompilerConfigurationImpl
+import com.intellij.compiler.impl.javaCompiler.BackendCompiler
+import com.intellij.openapi.project.Project
+import org.jetbrains.idea.maven.importing.MavenCompilerExtension
+import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerOptions
+
+/**
+ * @author Vladislav.Soroka
+ */
+class MavenCompilerErrorProneExtension : MavenCompilerExtension {
+ override fun getMavenCompilerId(): String = "javac-with-errorprone"
+
+ override fun getCompiler(project: Project): BackendCompiler {
+ val compilerConfiguration = CompilerConfiguration.getInstance(project) as CompilerConfigurationImpl
+ return compilerConfiguration.registeredJavaCompilers.find { it is ErrorProneJavaBackendCompiler }!!
+ }
+
+ override fun getOptions(project: Project): JpsJavaCompilerOptions {
+ return ErrorProneCompilerConfiguration.getOptions(project)
+ }
+}
+
diff --git a/plugins/maven/intellij.maven.iml b/plugins/maven/intellij.maven.iml
index 56ff8f2ba5d3..c7f36100de54 100644
--- a/plugins/maven/intellij.maven.iml
+++ b/plugins/maven/intellij.maven.iml
@@ -61,6 +61,7 @@
+
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerEclipseExtension.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerEclipseExtension.kt
new file mode 100644
index 000000000000..3a4f89b1e10b
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerEclipseExtension.kt
@@ -0,0 +1,26 @@
+// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package org.jetbrains.idea.maven.importing
+
+import com.intellij.compiler.CompilerConfiguration
+import com.intellij.compiler.CompilerConfigurationImpl
+import com.intellij.compiler.impl.javaCompiler.BackendCompiler
+import com.intellij.compiler.impl.javaCompiler.eclipse.EclipseCompiler
+import com.intellij.compiler.impl.javaCompiler.eclipse.EclipseCompilerConfiguration
+import com.intellij.openapi.project.Project
+import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerOptions
+
+/**
+ * @author Vladislav.Soroka
+ */
+class MavenCompilerEclipseExtension : MavenCompilerExtension {
+ override fun getMavenCompilerId(): String = "eclipse"
+
+ override fun getCompiler(project: Project): BackendCompiler {
+ val compilerConfiguration = CompilerConfiguration.getInstance(project) as CompilerConfigurationImpl
+ return compilerConfiguration.registeredJavaCompilers.find { it is EclipseCompiler }!!
+ }
+
+ override fun getOptions(project: Project): JpsJavaCompilerOptions {
+ return EclipseCompilerConfiguration.getOptions(project, EclipseCompilerConfiguration::class.java)
+ }
+}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerExtension.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerExtension.java
new file mode 100644
index 000000000000..2e9394408dd9
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerExtension.java
@@ -0,0 +1,26 @@
+// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package org.jetbrains.idea.maven.importing;
+
+import com.intellij.compiler.impl.javaCompiler.BackendCompiler;
+import com.intellij.openapi.extensions.ExtensionPointName;
+import com.intellij.openapi.project.Project;
+import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerOptions;
+
+/**
+ * @author Vladislav.Soroka
+ */
+public interface MavenCompilerExtension {
+ ExtensionPointName EP_NAME = ExtensionPointName.create("org.jetbrains.idea.maven.compiler");
+
+ /**
+ * Id of the maven compiler, see the role-hint of the @plexus.component with role="org.codehaus.plexus.compiler.Compiler".
+ * Note, this can be not equal to {@link BackendCompiler#getId()}
+ *
+ * @return maven compiler id
+ */
+ String getMavenCompilerId();
+
+ BackendCompiler getCompiler(Project project);
+
+ JpsJavaCompilerOptions getOptions(Project project);
+}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerImporter.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerImporter.kt
new file mode 100644
index 000000000000..2a83d66fb9e1
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerImporter.kt
@@ -0,0 +1,122 @@
+// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package org.jetbrains.idea.maven.importing
+
+import com.intellij.compiler.CompilerConfiguration
+import com.intellij.compiler.CompilerConfigurationImpl
+import com.intellij.openapi.diagnostic.Logger
+import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider
+import com.intellij.openapi.module.Module
+import com.intellij.openapi.util.Key
+import com.intellij.openapi.util.text.StringUtil
+import com.intellij.openapi.util.text.StringUtil.nullize
+import com.intellij.util.containers.ContainerUtil.addIfNotNull
+import org.jdom.Element
+import org.jetbrains.idea.maven.project.*
+
+/**
+ * @author Vladislav.Soroka
+ */
+class MavenCompilerImporter : MavenImporter("org.apache.maven.plugins", "maven-compiler-plugin") {
+ private val LOG = Logger.getInstance("#org.jetbrains.idea.maven.importing.MavenCompilerImporter")
+
+ override fun processChangedModulesOnly(): Boolean {
+ return false
+ }
+
+ override fun preProcess(module: Module,
+ mavenProject: MavenProject,
+ changes: MavenProjectChanges,
+ modifiableModelsProvider: IdeModifiableModelsProvider) {
+ if (!MavenProjectsManager.getInstance(module.project).importingSettings.isUseMavenCompilerArguments) return
+ val config = getConfig(mavenProject) ?: return
+
+ var compilers = modifiableModelsProvider.getUserData>(COMPILERS)
+ if (compilers == null) {
+ compilers = mutableSetOf()
+ modifiableModelsProvider.putUserData(COMPILERS, compilers)
+ }
+ compilers.add(getCompilerId(config))
+ }
+
+ override fun process(modifiableModelsProvider: IdeModifiableModelsProvider,
+ module: Module,
+ rootModel: MavenRootModelAdapter,
+ mavenModel: MavenProjectsTree,
+ mavenProject: MavenProject,
+ changes: MavenProjectChanges,
+ mavenProjectToModuleName: Map,
+ postTasks: List) {
+ if (!MavenProjectsManager.getInstance(module.project).importingSettings.isUseMavenCompilerArguments) return
+
+ val compilers = modifiableModelsProvider.getUserData(COMPILERS)
+ val isMultipleCompilersUsed = compilers != null && compilers.size > 1
+
+ val compilerConfiguration = getConfig(mavenProject) ?: return
+ val compilerId = getCompilerId(compilerConfiguration)
+
+ MavenCompilerExtension.EP_NAME.extensions.find { compilerId == it.mavenCompilerId }?.run {
+ importCompilerConfiguration(module, compilerConfiguration, this, !isMultipleCompilersUsed)
+ }
+ }
+
+ private fun importCompilerConfiguration(module: Module,
+ compilerMavenConfiguration: Element,
+ extension: MavenCompilerExtension,
+ useAsDefault: Boolean) {
+ val options = mutableListOf()
+ val parameters = compilerMavenConfiguration.getChild("parameters")
+
+ if (parameters?.textTrim?.toBoolean() == true) {
+ options += "-parameters"
+ }
+
+ val compilerArguments = compilerMavenConfiguration.getChild("compilerArguments")
+ if (compilerArguments != null) {
+ for (compilerArgument in compilerArguments.children) {
+ options.add("-" + compilerArgument.name)
+ addIfNotNull(options, nullize(compilerArgument.textTrim))
+ }
+ }
+
+ addIfNotNull(options, nullize(compilerMavenConfiguration.getChildTextTrim("compilerArgument")))
+
+ val compilerArgs = compilerMavenConfiguration.getChild("compilerArgs")
+ if (compilerArgs != null) {
+ for (arg in compilerArgs.getChildren("arg")) {
+ addIfNotNull(options, nullize(arg.textTrim))
+ }
+ for (compilerArg in compilerArgs.getChildren("compilerArg")) {
+ addIfNotNull(options, nullize(compilerArg.textTrim))
+ }
+ }
+
+ val compilerOptions = extension.getOptions(module.project)
+ val compilerConfiguration = CompilerConfiguration.getInstance(module.project) as CompilerConfigurationImpl
+ compilerConfiguration.setAdditionalOptions(compilerOptions, module, options)
+
+ if (useAsDefault) {
+ val backendCompiler = extension.getCompiler(module.project)
+ if (compilerConfiguration.defaultCompiler !== backendCompiler) {
+ val compilers = compilerConfiguration.registeredJavaCompilers
+ if (compilers.contains(backendCompiler)) {
+ compilerConfiguration.defaultCompiler = backendCompiler
+ }
+ else {
+ LOG.error(backendCompiler.toString() + " is not registered.")
+ }
+ }
+ }
+ }
+
+ companion object {
+ private val COMPILERS = Key.create>("maven.compilers")
+
+ private fun getCompilerId(config: Element): String {
+ var compilerId = config.getChildTextTrim("compilerId")
+ if (StringUtil.isEmpty(compilerId) || "javac" == compilerId) {
+ compilerId = "javac"
+ }
+ return compilerId
+ }
+ }
+}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerJavacExtension.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerJavacExtension.kt
new file mode 100644
index 000000000000..7d115fff2a85
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenCompilerJavacExtension.kt
@@ -0,0 +1,24 @@
+// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package org.jetbrains.idea.maven.importing
+
+import com.intellij.compiler.CompilerConfiguration
+import com.intellij.compiler.CompilerConfigurationImpl
+import com.intellij.compiler.impl.javaCompiler.BackendCompiler
+import com.intellij.compiler.impl.javaCompiler.javac.JavacConfiguration
+import com.intellij.openapi.project.Project
+import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerOptions
+
+/**
+ * @author Vladislav.Soroka
+ */
+class MavenCompilerJavacExtension : MavenCompilerExtension {
+ override fun getMavenCompilerId(): String = "javac"
+
+ override fun getCompiler(project: Project): BackendCompiler {
+ return (CompilerConfiguration.getInstance(project) as CompilerConfigurationImpl).javacCompiler
+ }
+
+ override fun getOptions(project: Project): JpsJavaCompilerOptions {
+ return JavacConfiguration.getOptions(project, JavacConfiguration::class.java)
+ }
+}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenModuleImporter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenModuleImporter.java
index 186064ada969..54e203c156aa 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenModuleImporter.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenModuleImporter.java
@@ -33,7 +33,6 @@ import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.LanguageLevel;
-import com.intellij.psi.JavaCompilerConfigurationProxy;
import gnu.trove.THashSet;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
@@ -43,14 +42,10 @@ import org.jetbrains.idea.maven.model.MavenConstants;
import org.jetbrains.idea.maven.project.*;
import org.jetbrains.idea.maven.utils.MavenUtil;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import static com.intellij.openapi.util.text.StringUtil.nullize;
-import static com.intellij.util.containers.ContainerUtil.addIfNotNull;
-
public class MavenModuleImporter {
public static final String SUREFIRE_PLUGIN_LIBRARY_NAME = "maven-surefire-plugin urls";
@@ -107,7 +102,6 @@ public class MavenModuleImporter {
configFolders();
configDependencies();
configLanguageLevel();
- configCompilerArguments();
}
public void preConfigFacets() {
@@ -408,40 +402,4 @@ public class MavenModuleImporter {
myRootModelAdapter.setLanguageLevel(level);
}
-
- private void configCompilerArguments() {
- List options = new ArrayList<>();
-
- Element compilerConfiguration = myMavenProject.getPluginConfiguration("org.apache.maven.plugins", "maven-compiler-plugin");
- if (compilerConfiguration != null) {
- Element parameters = compilerConfiguration.getChild("parameters");
- if (parameters != null && Boolean.parseBoolean(parameters.getTextTrim())) {
- options.add("-parameters");
- }
-
- if(!mySettings.isUseMavenCompilerArguments()) return;
-
- Element compilerArguments = compilerConfiguration.getChild("compilerArguments");
- if (compilerArguments != null) {
- for (Element compilerArgument : compilerArguments.getChildren()) {
- options.add("-" + compilerArgument.getName());
- addIfNotNull(options, nullize(compilerArgument.getTextTrim()));
- }
- }
-
- addIfNotNull(options, nullize(compilerConfiguration.getChildTextTrim("compilerArgument")));
-
- Element compilerArgs = compilerConfiguration.getChild("compilerArgs");
- if (compilerArgs != null) {
- for (Element arg: compilerArgs.getChildren("arg")) {
- addIfNotNull(options, nullize(arg.getTextTrim()));
- }
- for (Element compilerArg: compilerArgs.getChildren("compilerArg")) {
- addIfNotNull(options, nullize(compilerArg.getTextTrim()));
- }
- }
- }
-
- JavaCompilerConfigurationProxy.setAdditionalOptions(myModule.getProject(), myModule, options);
- }
}
diff --git a/plugins/maven/src/main/resources/META-INF/errorProne-compiler-support.xml b/plugins/maven/src/main/resources/META-INF/errorProne-compiler-support.xml
new file mode 100644
index 000000000000..99265a878af1
--- /dev/null
+++ b/plugins/maven/src/main/resources/META-INF/errorProne-compiler-support.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/maven/src/main/resources/META-INF/plugin.xml b/plugins/maven/src/main/resources/META-INF/plugin.xml
index eff1ec040344..abf95740c8db 100644
--- a/plugins/maven/src/main/resources/META-INF/plugin.xml
+++ b/plugins/maven/src/main/resources/META-INF/plugin.xml
@@ -21,6 +21,7 @@
+
@@ -34,6 +35,7 @@
com.intellij.properties
org.intellij.groovy
+ Error-prone plugin
@@ -318,8 +320,12 @@
+
+
+
+