diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/configurers/MavenAnnotationProcessorConfigurer.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/configurers/MavenAnnotationProcessorConfigurer.java index 69a0522c47b1..6399c7be6684 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/configurers/MavenAnnotationProcessorConfigurer.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/configurers/MavenAnnotationProcessorConfigurer.java @@ -157,9 +157,11 @@ public class MavenAnnotationProcessorConfigurer extends MavenModuleConfigurer { compilerConfiguration.removeModuleProcessorProfile(moduleProfile); } else if (p == mergedProfile || isSimilarProfiles(mergedProfile, moduleProfile)) { - mergedProfile.addModuleNames(moduleProfile.getModuleNames()); - moduleProfile.clearModuleNames(); - compilerConfiguration.removeModuleProcessorProfile(moduleProfile); + if(moduleProfile != mergedProfile) { + mergedProfile.addModuleNames(moduleProfile.getModuleNames()); + moduleProfile.clearModuleNames(); + compilerConfiguration.removeModuleProcessorProfile(moduleProfile); + } if (p != mergedProfile) { mergedProfile.addModuleNames(p.getModuleNames()); p.clearModuleNames(); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java index 6effded0e614..012988613920 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java @@ -442,14 +442,7 @@ public class MavenProject { Map res = new LinkedHashMap(); String compilerArgument = compilerConfig.getChildText("compilerArgument"); - if (!StringUtil.isEmptyOrSpaces(compilerArgument)) { - ParametersList parametersList = new ParametersList(); - parametersList.addParametersString(compilerArgument); - - for (String param : parametersList.getParameters()) { - addAnnotationProcessorOption(param, res); - } - } + addAnnotationProcessorOptionFomrParametersString(compilerArgument, res); Element compilerArgs = compilerConfig.getChild("compilerArgs"); if (compilerArgs != null) { @@ -474,6 +467,17 @@ public class MavenProject { return res; } + private static void addAnnotationProcessorOptionFomrParametersString(String compilerArguments, Map res) { + if (!StringUtil.isEmptyOrSpaces(compilerArguments)) { + ParametersList parametersList = new ParametersList(); + parametersList.addParametersString(compilerArguments); + + for (String param : parametersList.getParameters()) { + addAnnotationProcessorOption(param, res); + } + } + } + private static void addAnnotationProcessorOption(String compilerArg, Map optionsMap) { if (compilerArg == null || compilerArg.trim().isEmpty()) return; @@ -494,6 +498,9 @@ public class MavenProject { } LinkedHashMap res = new LinkedHashMap(); if (cfg != null) { + String compilerArguments = cfg.getChildText("compilerArguments"); + addAnnotationProcessorOptionFomrParametersString(compilerArguments, res); + final Element optionsElement = cfg.getChild("options"); if (optionsElement != null) { for (Element option : optionsElement.getChildren()) { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/AnnotationProcessorImportingTest.groovy b/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/AnnotationProcessorImportingTest.groovy index 17686098f12c..f6910406d97c 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/AnnotationProcessorImportingTest.groovy +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/AnnotationProcessorImportingTest.groovy @@ -128,9 +128,13 @@ class AnnotationProcessorImportingTest extends MavenImportingTestCase { assert compilerConfiguration.findModuleProcessorProfile(MavenAnnotationProcessorConfigurer.MAVEN_DEFAULT_ANNOTATION_PROFILE).getModuleNames() == new HashSet(["module1", "module4"]) assert compilerConfiguration.findModuleProcessorProfile(MavenAnnotationProcessorConfigurer.MAVEN_BSC_DEFAULT_ANNOTATION_PROFILE) == null - assert compilerConfiguration.findModuleProcessorProfile(MavenAnnotationProcessorConfigurer.PROFILE_PREFIX + 'module2').getProcessors() == new HashSet(["com.test.SourceCodeGeneratingAnnotationProcessor2"]) + + def projectProfile = compilerConfiguration.findModuleProcessorProfile(MavenAnnotationProcessorConfigurer.PROFILE_PREFIX + 'project') + assert projectProfile.getModuleNames() == new HashSet(["module2"]) + assert projectProfile.getProcessors() == new HashSet(["com.test.SourceCodeGeneratingAnnotationProcessor2"]) assert compilerConfiguration.findModuleProcessorProfile(MavenAnnotationProcessorConfigurer.PROFILE_PREFIX + 'module3') == null assert compilerConfiguration.findModuleProcessorProfile(MavenAnnotationProcessorConfigurer.PROFILE_PREFIX + 'module3_1') == null + assert compilerConfiguration.moduleProcessorProfiles.size() == 2 } public void testOverrideGeneratedOutputDir() { @@ -218,6 +222,12 @@ class AnnotationProcessorImportingTest extends MavenImportingTestCase { generate-sources target/metamodel + + -Amyoption1=TRUE + + + TRUE + @@ -242,6 +252,7 @@ class AnnotationProcessorImportingTest extends MavenImportingTestCase { def profile = compilerConfiguration.findModuleProcessorProfile(MavenAnnotationProcessorConfigurer.PROFILE_PREFIX + "project") assert profile.getGeneratedSourcesDirectoryName(false).replace('\\', '/').endsWith("target/metamodel") assert profile.getGeneratedSourcesDirectoryName(true).replace('\\', '/').endsWith("target/metamodelTest") + assert new HashMap(profile.getProcessorOptions()) == ['myoption1' : 'TRUE', 'myoption2' : 'TRUE'] } public void testMavenProcessorPluginDefault() {