From 31de58ec12be46e100242a191b1a0f12329dc89c Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 15 Oct 2012 18:49:40 +0200 Subject: [PATCH] IDEA-89797 Annotation processors configuration should has two separate fields for generated test sources and generated production sources --- .../compiler/CompilerConfigurationImpl.java | 2 +- .../options/ProcessorProfilePanel.java | 39 ++++++++++++------- .../openapi/compiler/CompilerPaths.java | 2 +- .../jps/incremental/IncProjectBuilder.java | 6 ++- .../jps/incremental/java/JavaBuilder.java | 7 ++-- .../AnnotationProcessingConfiguration.java | 2 +- .../java/compiler/ProcessorConfigProfile.java | 2 +- .../compiler/ProcessorConfigProfileImpl.java | 33 +++++++++++----- .../AnnotationProcessorProfileSerializer.java | 11 +++++- .../JpsCompilerConfigurationTest.java | 4 +- .../maven/importing/MavenModuleImporter.java | 17 ++++---- .../AnnotationProcessorImportingTest.groovy | 2 +- 12 files changed, 82 insertions(+), 45 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java index 332257a0994c..7095c34b61f0 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java @@ -759,7 +759,7 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements final ProcessorConfigProfile profile = new ProcessorConfigProfileImpl(myDefaultProcessorsProfile); profile.setName("Profile" + (++profileIndex)); profile.setEnabled(isEnabled); - profile.setGeneratedSourcesDirectoryName(dirName); + profile.setGeneratedSourcesDirectoryName(dirName, false); for (String moduleName : entry.getValue()) { profile.addModuleName(moduleName); } diff --git a/java/compiler/impl/src/com/intellij/compiler/options/ProcessorProfilePanel.java b/java/compiler/impl/src/com/intellij/compiler/options/ProcessorProfilePanel.java index e47cf402473a..88287542f066 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/ProcessorProfilePanel.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/ProcessorProfilePanel.java @@ -15,7 +15,6 @@ */ package com.intellij.compiler.options; -import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; @@ -27,6 +26,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.*; import com.intellij.ui.table.JBTable; import com.intellij.util.ui.EditableModel; +import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile; import javax.swing.*; import javax.swing.event.ListSelectionEvent; @@ -54,7 +54,8 @@ public class ProcessorProfilePanel extends JPanel { private JRadioButton myRbClasspath; private JRadioButton myRbProcessorsPath; private TextFieldWithBrowseButton myProcessorPathField; - private JTextField myGeneratedSourcesDirNameField; + private JTextField myGeneratedProductionDirField; + private JTextField myGeneratedTestsDirField; private ProcessorTableModel myProcessorsModel; private JCheckBox myCbEnableProcessing; private JBTable myProcessorTable; @@ -109,8 +110,8 @@ public class ProcessorProfilePanel extends JPanel { myOptionsPanel = createTablePanel(myOptionsTable); optionsTablePanel.add(myOptionsPanel, BorderLayout.CENTER); - myGeneratedSourcesDirNameField = new JTextField(); - + myGeneratedProductionDirField = new JTextField(); + myGeneratedTestsDirField = new JTextField(); final JLabel warning = new JLabel("WARNING!
" + /*"All source files located in the generated sources output directory WILL BE EXCLUDED from annotation processing. " +*/ @@ -133,17 +134,22 @@ public class ProcessorProfilePanel extends JPanel { add(noteMessage, new GridBagConstraints(0, 3, 2, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 0, 0), 0, 0)); - add(new JLabel("Directory name:"), + add(new JLabel("Production sources directory:"), new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 0, 0), 0, 0)); - add(myGeneratedSourcesDirNameField, + add(myGeneratedProductionDirField, new GridBagConstraints(1, 4, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 0, 0), 0, 0)); + add(new JLabel("Test sources directory:"), + new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 0, 0), 0, 0)); + add(myGeneratedTestsDirField, + new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 0, 0), 0, 0)); + add(processorTablePanel, - new GridBagConstraints(0, 5, 2, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(10, 0, 0, 0), 0, 0)); - add(optionsTablePanel, new GridBagConstraints(0, 6, 2, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(10, 0, 0, 0), 0, 0)); + add(optionsTablePanel, + new GridBagConstraints(0, 7, 2, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(10, 0, 0, 0), 0, 0)); add(warning, - new GridBagConstraints(0, 7, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 0, 0), 0, 0)); + new GridBagConstraints(0, 8, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 0, 0), 0, 0)); myRbClasspath.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { @@ -175,8 +181,10 @@ public class ProcessorProfilePanel extends JPanel { (config.isObtainProcessorsFromClasspath()? myRbClasspath : myRbProcessorsPath).setSelected(true); myProcessorPathField.setText(FileUtil.toSystemDependentName(config.getProcessorPath())); - final String srcDirName = config.getGeneratedSourcesDirectoryName(); - myGeneratedSourcesDirNameField.setText(srcDirName != null? srcDirName.trim() : ""); + final String productionDirName = config.getGeneratedSourcesDirectoryName(false); + myGeneratedProductionDirField.setText(productionDirName != null? productionDirName.trim() : ""); + final String testsDirName = config.getGeneratedSourcesDirectoryName(true); + myGeneratedTestsDirField.setText(testsDirName != null? testsDirName.trim() : ""); myProcessorsModel.setProcessors(config.getProcessors()); myOptionsModel.setOptions(config.getProcessorOptions()); @@ -187,9 +195,11 @@ public class ProcessorProfilePanel extends JPanel { profile.setEnabled(myCbEnableProcessing.isSelected()); profile.setObtainProcessorsFromClasspath(myRbClasspath.isSelected()); profile.setProcessorPath(myProcessorPathField.getText().trim()); - final String dirName = myGeneratedSourcesDirNameField.getText().trim(); - profile.setGeneratedSourcesDirectoryName(StringUtil.isEmpty(dirName)? null : dirName); + final String productionDir = myGeneratedProductionDirField.getText().trim(); + profile.setGeneratedSourcesDirectoryName(StringUtil.isEmpty(productionDir)? null : productionDir, false); + final String testsDir = myGeneratedTestsDirField.getText().trim(); + profile.setGeneratedSourcesDirectoryName(StringUtil.isEmpty(testsDir)? null : testsDir, true); profile.clearProcessors(); for (String processor : myProcessorsModel.getProcessors()) { @@ -228,7 +238,8 @@ public class ProcessorProfilePanel extends JPanel { myProcessorPathField.setEnabled(enabled && useProcessorpath); updateTable(myProcessorPanel, myProcessorTable, enabled); updateTable(myOptionsPanel, myOptionsTable, enabled); - myGeneratedSourcesDirNameField.setEnabled(enabled); + myGeneratedProductionDirField.setEnabled(enabled); + myGeneratedTestsDirField.setEnabled(enabled); } private static void updateTable(final JPanel tablePanel, final JBTable table, boolean enabled) { diff --git a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerPaths.java b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerPaths.java index b9764bdba829..dcd4e27a2e2f 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerPaths.java +++ b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerPaths.java @@ -216,7 +216,7 @@ public class CompilerPaths { public static String getAnnotationProcessorsGenerationPath(Module module) { final CompilerConfiguration config = CompilerConfiguration.getInstance(module.getProject()); - final String sourceDirName = config.getAnnotationProcessingConfiguration(module).getGeneratedSourcesDirectoryName(); + final String sourceDirName = config.getAnnotationProcessingConfiguration(module).getGeneratedSourcesDirectoryName(false); if (!StringUtil.isEmpty(sourceDirName)) { final String[] roots = ModuleRootManager.getInstance(module).getContentRootUrls(); if (roots.length == 0) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index 6a4837db0175..26cee42e7982 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -363,12 +363,14 @@ public class IncProjectBuilder { } } - final Set annotationOutputs = new HashSet(); // separate collection because no root intersection checks needed for annotation generated sources + final Set annotationOutputs = new THashSet(FileUtil.FILE_HASHING_STRATEGY); // separate collection because no root intersection checks needed for annotation generated sources for (JavaModuleBuildTargetType type : JavaModuleBuildTargetType.ALL_TYPES) { for (ModuleBuildTarget target : projectDescriptor.getBuildTargetIndex().getAllTargets(type)) { final ProcessorConfigProfile profile = context.getAnnotationProcessingProfile(target.getModule()); if (profile.isEnabled()) { - File annotationOut = paths.getAnnotationProcessorGeneratedSourcesOutputDir(target.getModule(), target.isTests(), profile.getGeneratedSourcesDirectoryName()); + final File annotationOut = paths.getAnnotationProcessorGeneratedSourcesOutputDir( + target.getModule(), target.isTests(), profile.getGeneratedSourcesDirectoryName(target.isTests()) + ); if (annotationOut != null) { annotationOutputs.add(annotationOut); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index dca1ab40671d..4b2ab483f882 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -751,9 +751,10 @@ public class JavaBuilder extends ModuleLevelBuilder { options.add("-A" + optionEntry.getKey() + "=" + optionEntry.getValue()); } - final File srcOutput = context.getProjectPaths() - .getAnnotationProcessorGeneratedSourcesOutputDir(chunk.getModules().iterator().next(), chunk.containsTests(), - profile.getGeneratedSourcesDirectoryName()); + final boolean forTests = chunk.containsTests(); + final File srcOutput = context.getProjectPaths().getAnnotationProcessorGeneratedSourcesOutputDir( + chunk.getModules().iterator().next(), forTests, profile.getGeneratedSourcesDirectoryName(forTests) + ); if (srcOutput != null) { srcOutput.mkdirs(); options.add("-s"); diff --git a/jps/model-api/src/org/jetbrains/jps/model/java/compiler/AnnotationProcessingConfiguration.java b/jps/model-api/src/org/jetbrains/jps/model/java/compiler/AnnotationProcessingConfiguration.java index 8546dd5537a7..4133955a01df 100644 --- a/jps/model-api/src/org/jetbrains/jps/model/java/compiler/AnnotationProcessingConfiguration.java +++ b/jps/model-api/src/org/jetbrains/jps/model/java/compiler/AnnotationProcessingConfiguration.java @@ -32,7 +32,7 @@ public interface AnnotationProcessingConfiguration { String getProcessorPath(); @Nullable - String getGeneratedSourcesDirectoryName(); + String getGeneratedSourcesDirectoryName(boolean forTests); @NotNull Set getProcessors(); diff --git a/jps/model-api/src/org/jetbrains/jps/model/java/compiler/ProcessorConfigProfile.java b/jps/model-api/src/org/jetbrains/jps/model/java/compiler/ProcessorConfigProfile.java index 007651801d39..2baf37316741 100644 --- a/jps/model-api/src/org/jetbrains/jps/model/java/compiler/ProcessorConfigProfile.java +++ b/jps/model-api/src/org/jetbrains/jps/model/java/compiler/ProcessorConfigProfile.java @@ -22,7 +22,7 @@ public interface ProcessorConfigProfile extends AnnotationProcessingConfiguratio void setObtainProcessorsFromClasspath(boolean value); - void setGeneratedSourcesDirectoryName(@Nullable String generatedSourcesDirectoryName); + void setGeneratedSourcesDirectoryName(@Nullable String generatedSourcesDirectoryName, boolean forTests); @NotNull Set getModuleNames(); diff --git a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/ProcessorConfigProfileImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/ProcessorConfigProfileImpl.java index 60d4bbf1544e..b3cca63ad370 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/ProcessorConfigProfileImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/ProcessorConfigProfileImpl.java @@ -33,7 +33,8 @@ public final class ProcessorConfigProfileImpl implements ProcessorConfigProfile private final Set myProcessors = new HashSet(); // empty list means all discovered private final Map myProcessorOptions = new HashMap(); // key=value map of options @Nullable - private String myGeneratedSourcesDirectoryName = null; // null means 'auto' + private String myGeneratedProductionDirectoryName = null; // null means 'auto' + private String myGeneratedTestsDirectoryName = null; // null means 'auto' private final Set myModuleNames = new HashSet(); public ProcessorConfigProfileImpl(String name) { @@ -54,7 +55,8 @@ public final class ProcessorConfigProfileImpl implements ProcessorConfigProfile myProcessors.addAll(other.getProcessors()); myProcessorOptions.clear(); myProcessorOptions.putAll(other.getProcessorOptions()); - myGeneratedSourcesDirectoryName = other.getGeneratedSourcesDirectoryName(); + myGeneratedProductionDirectoryName = other.getGeneratedSourcesDirectoryName(false); + myGeneratedTestsDirectoryName = other.getGeneratedSourcesDirectoryName(true); myModuleNames.clear(); myModuleNames.addAll(other.getModuleNames()); } @@ -102,13 +104,18 @@ public final class ProcessorConfigProfileImpl implements ProcessorConfigProfile @Override @Nullable - public String getGeneratedSourcesDirectoryName() { - return myGeneratedSourcesDirectoryName; + public String getGeneratedSourcesDirectoryName(boolean forTests) { + return forTests? myGeneratedTestsDirectoryName : myGeneratedProductionDirectoryName; } @Override - public void setGeneratedSourcesDirectoryName(@Nullable String generatedSourcesDirectoryName) { - myGeneratedSourcesDirectoryName = generatedSourcesDirectoryName; + public void setGeneratedSourcesDirectoryName(@Nullable String name, boolean forTests) { + if (forTests) { + myGeneratedTestsDirectoryName = name; + } + else { + myGeneratedProductionDirectoryName = name; + } } @Override @@ -194,9 +201,14 @@ public final class ProcessorConfigProfileImpl implements ProcessorConfigProfile if (myEnabled != profile.myEnabled) return false; if (myObtainProcessorsFromClasspath != profile.myObtainProcessorsFromClasspath) return false; - if (myGeneratedSourcesDirectoryName != null - ? !myGeneratedSourcesDirectoryName.equals(profile.myGeneratedSourcesDirectoryName) - : profile.myGeneratedSourcesDirectoryName != null) { + if (myGeneratedProductionDirectoryName != null + ? !myGeneratedProductionDirectoryName.equals(profile.myGeneratedProductionDirectoryName) + : profile.myGeneratedProductionDirectoryName != null) { + return false; + } + if (myGeneratedTestsDirectoryName != null + ? !myGeneratedTestsDirectoryName.equals(profile.myGeneratedTestsDirectoryName) + : profile.myGeneratedTestsDirectoryName != null) { return false; } if (!myModuleNames.equals(profile.myModuleNames)) return false; @@ -216,7 +228,8 @@ public final class ProcessorConfigProfileImpl implements ProcessorConfigProfile result = 31 * result + (myProcessorPath != null ? myProcessorPath.hashCode() : 0); result = 31 * result + myProcessors.hashCode(); result = 31 * result + myProcessorOptions.hashCode(); - result = 31 * result + (myGeneratedSourcesDirectoryName != null ? myGeneratedSourcesDirectoryName.hashCode() : 0); + result = 31 * result + (myGeneratedProductionDirectoryName != null ? myGeneratedProductionDirectoryName.hashCode() : 0); + result = 31 * result + (myGeneratedTestsDirectoryName != null ? myGeneratedTestsDirectoryName.hashCode() : 0); result = 31 * result + myModuleNames.hashCode(); return result; } diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/AnnotationProcessorProfileSerializer.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/AnnotationProcessorProfileSerializer.java index 279a3e402b84..2d2311f93144 100644 --- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/AnnotationProcessorProfileSerializer.java +++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/AnnotationProcessorProfileSerializer.java @@ -45,7 +45,10 @@ public class AnnotationProcessorProfileSerializer { profile.setEnabled(Boolean.valueOf(element.getAttributeValue(ENABLED, "false"))); final Element srcOutput = element.getChild("sourceOutputDir"); - profile.setGeneratedSourcesDirectoryName(srcOutput != null ? srcOutput.getAttributeValue(NAME) : null); + profile.setGeneratedSourcesDirectoryName(srcOutput != null ? srcOutput.getAttributeValue(NAME) : null, false); + + final Element srcTestOutput = element.getChild("sourceTestOutputDir"); + profile.setGeneratedSourcesDirectoryName(srcTestOutput != null ? srcTestOutput.getAttributeValue(NAME) : null, true); profile.clearProcessorOptions(); for (Object optionElement : element.getChildren(OPTION)) { @@ -94,10 +97,14 @@ public class AnnotationProcessorProfileSerializer { element.setAttribute(NAME, profile.getName()); element.setAttribute(ENABLED, Boolean.toString(profile.isEnabled())); - final String srcDirName = profile.getGeneratedSourcesDirectoryName(); + final String srcDirName = profile.getGeneratedSourcesDirectoryName(false); if (srcDirName != null) { addChild(element, "sourceOutputDir").setAttribute(NAME, srcDirName); } + final String testSrcDirName = profile.getGeneratedSourcesDirectoryName(true); + if (testSrcDirName != null) { + addChild(element, "sourceTestOutputDir").setAttribute(NAME, testSrcDirName); + } final Map options = profile.getProcessorOptions(); if (!options.isEmpty()) { diff --git a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java index f135bef34793..c4a8ead07dbe 100644 --- a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java +++ b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java @@ -1,12 +1,12 @@ package org.jetbrains.jps.model.serialization; import com.intellij.openapi.util.io.FileUtil; -import org.jetbrains.jps.util.JpsPathUtil; import org.jetbrains.jps.model.java.JpsJavaExtensionService; import org.jetbrains.jps.model.java.compiler.JpsCompilerExcludes; import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerConfiguration; import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerOptions; import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile; +import org.jetbrains.jps.util.JpsPathUtil; public class JpsCompilerConfigurationTest extends JpsSerializationTestCase { public void testLoadFromIpr() { @@ -29,7 +29,7 @@ public class JpsCompilerConfigurationTest extends JpsSerializationTestCase { assertEquals(FileUtil.toSystemDependentName(JpsPathUtil.urlToPath(getUrl("src"))), defaultProfile.getProcessorPath()); assertEquals("b", defaultProfile.getProcessorOptions().get("a")); assertEquals("d", defaultProfile.getProcessorOptions().get("c")); - assertEquals("gen", defaultProfile.getGeneratedSourcesDirectoryName()); + assertEquals("gen", defaultProfile.getGeneratedSourcesDirectoryName(false)); JpsCompilerExcludes excludes = configuration.getCompilerExcludes(); assertFalse(isExcluded(excludes, "src/nonrec/x/Y.java")); assertTrue(isExcluded(excludes, "src/nonrec/Y.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 55338854f099..a44a1cd2dd45 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 @@ -19,15 +19,13 @@ import com.intellij.compiler.CompilerConfiguration; import com.intellij.compiler.CompilerConfigurationImpl; import com.intellij.openapi.compiler.options.ExcludeEntryDescription; import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.libraries.LibraryTable; -import org.jetbrains.idea.maven.utils.MavenJDOMUtil; -import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleType; +import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.*; import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.roots.libraries.LibraryTable; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.JarFileSystem; @@ -41,14 +39,19 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.model.MavenArtifact; import org.jetbrains.idea.maven.model.MavenConstants; import org.jetbrains.idea.maven.project.*; +import org.jetbrains.idea.maven.utils.MavenJDOMUtil; import org.jetbrains.idea.maven.utils.MavenUtil; +import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile; import org.jetbrains.jps.model.java.impl.compiler.ProcessorConfigProfileImpl; import java.io.File; import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; import java.nio.charset.UnsupportedCharsetException; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; public class MavenModuleImporter { @@ -352,7 +355,7 @@ public class MavenModuleImporter { defaultMavenProfile = new ProcessorConfigProfileImpl(MAVEN_DEFAULT_ANNOTATION_PROFILE); defaultMavenProfile.setEnabled(true); defaultMavenProfile.setObtainProcessorsFromClasspath(true); - defaultMavenProfile.setGeneratedSourcesDirectoryName("target/generated-sources/annotations"); + defaultMavenProfile.setGeneratedSourcesDirectoryName("target/generated-sources/annotations", false); compilerConfiguration.addModuleProcessorProfile(defaultMavenProfile); } @@ -375,7 +378,7 @@ public class MavenModuleImporter { compilerConfiguration.addModuleProcessorProfile(moduleProfile); } - moduleProfile.setGeneratedSourcesDirectoryName(annotationProcessorDirectory); + moduleProfile.setGeneratedSourcesDirectoryName(annotationProcessorDirectory, false); moduleProfile.clearProcessorOptions(); for (Map.Entry entry : options.entrySet()) { 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 07280e0d8dfa..b7d162dda648 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 @@ -129,7 +129,7 @@ class AnnotationProcessorImportingTest extends MavenImportingTestCase { def compilerConfiguration = ((CompilerConfigurationImpl)CompilerConfiguration.getInstance(myProject)) assert compilerConfiguration.findModuleProcessorProfile(MavenModuleImporter.MAVEN_DEFAULT_ANNOTATION_PROFILE) == null - assert compilerConfiguration.findModuleProcessorProfile(MavenModuleImporter.PROFILE_PREFIX + "project").getGeneratedSourcesDirectoryName().replace('\\', '/').endsWith("out/generated") + assert compilerConfiguration.findModuleProcessorProfile(MavenModuleImporter.PROFILE_PREFIX + "project").getGeneratedSourcesDirectoryName(false).replace('\\', '/').endsWith("out/generated") } public void testImportAnnotationProcessorOptions() {