diff --git a/platform/projectModel-api/src/com/intellij/openapi/roots/ContentEntry.java b/platform/projectModel-api/src/com/intellij/openapi/roots/ContentEntry.java index cfb71ea7efb9..5c5d366f912b 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/roots/ContentEntry.java +++ b/platform/projectModel-api/src/com/intellij/openapi/roots/ContentEntry.java @@ -143,6 +143,10 @@ public interface ContentEntry extends Synthetic {
SourceFolder addSourceFolder(@NotNull String url, @NotNull JpsModuleSourceRootType
type); + @NotNull +
+ SourceFolder addSourceFolder(@NotNull String url, @NotNull JpsModuleSourceRootType
type, @NotNull P properties); + /** * Removes a source or test source root from this content root. * diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ContentEntryImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ContentEntryImpl.java index a0c2c76bf94d..b275b43e362c 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ContentEntryImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ContentEntryImpl.java @@ -219,8 +219,16 @@ public class ContentEntryImpl extends RootModelComponentBase implements ContentE @NotNull @Override public
SourceFolder addSourceFolder(@NotNull String url, @NotNull JpsModuleSourceRootType
type) { + return addSourceFolder(url, type, type.createDefaultProperties()); + } + + @NotNull + @Override + public
SourceFolder addSourceFolder(@NotNull String url, + @NotNull JpsModuleSourceRootType
type, + @NotNull P properties) { assertFolderUnderMe(url); - JpsModuleSourceRoot sourceRoot = JpsElementFactory.getInstance().createModuleSourceRoot(url, type, type.createDefaultProperties()); + JpsModuleSourceRoot sourceRoot = JpsElementFactory.getInstance().createModuleSourceRoot(url, type, properties); return addSourceFolder(new SourceFolderImpl(sourceRoot, this)); } diff --git a/platform/projectModel-impl/src/com/intellij/project/model/impl/module/content/JpsContentEntry.java b/platform/projectModel-impl/src/com/intellij/project/model/impl/module/content/JpsContentEntry.java index 27d737d776a1..96d074e0514e 100644 --- a/platform/projectModel-impl/src/com/intellij/project/model/impl/module/content/JpsContentEntry.java +++ b/platform/projectModel-impl/src/com/intellij/project/model/impl/module/content/JpsContentEntry.java @@ -205,7 +205,8 @@ public class JpsContentEntry implements ContentEntry, Disposable { return addSourceFolder(url, type, type.createDefaultProperties()); } - private
SourceFolder addSourceFolder(final String url, JpsModuleSourceRootType
type, P properties) { + @NotNull + public
SourceFolder addSourceFolder(@NotNull String url, @NotNull JpsModuleSourceRootType
type, @NotNull P properties) { final JpsModuleSourceRoot sourceRoot = myModule.addSourceRoot(url, type, properties); final JpsSourceFolder sourceFolder = new JpsSourceFolder(sourceRoot, this); mySourceFolders.add(sourceFolder); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java index 837c19e0b8f8..19b3dff90ce5 100755 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java @@ -181,8 +181,8 @@ public class MavenFoldersImporter { myModel.unregisterAll(targetDir.getPath(), true, false); if (myImportingSettings.getGeneratedSourcesFolder() != MavenImportingSettings.GeneratedSourcesFolder.IGNORE) { - myModel.addSourceFolder(myMavenProject.getAnnotationProcessorDirectory(true), JavaSourceRootType.TEST_SOURCE, true); - myModel.addSourceFolder(myMavenProject.getAnnotationProcessorDirectory(false), JavaSourceRootType.SOURCE, true); + myModel.addGeneratedJavaSourceFolder(myMavenProject.getAnnotationProcessorDirectory(true), JavaSourceRootType.TEST_SOURCE); + myModel.addGeneratedJavaSourceFolder(myMavenProject.getAnnotationProcessorDirectory(false), JavaSourceRootType.SOURCE); } File[] targetChildren = targetDir.listFiles(); @@ -230,11 +230,11 @@ public class MavenFoldersImporter { private void configGeneratedSourceFolder(@NotNull File targetDir, final JavaSourceRootType rootType) { switch (myImportingSettings.getGeneratedSourcesFolder()) { case GENERATED_SOURCE_FOLDER: - myModel.addSourceFolder(targetDir.getPath(), rootType, true); + myModel.addGeneratedJavaSourceFolder(targetDir.getPath(), rootType); break; case SUBFOLDER: - addAllSubDirsAsSources(targetDir, rootType); + addAllSubDirsAsGeneratedSources(targetDir, rootType); break; case AUTODETECT: @@ -242,14 +242,14 @@ public class MavenFoldersImporter { for (JavaModuleSourceRoot root : sourceRoots) { if (FileUtil.filesEqual(targetDir, root.getDirectory())) { - myModel.addSourceFolder(targetDir.getPath(), rootType); + myModel.addGeneratedJavaSourceFolder(targetDir.getPath(), rootType); return; } - addAsSourceFolder(root.getDirectory(), rootType); + addAsGeneratedSourceFolder(root.getDirectory(), rootType); } - addAllSubDirsAsSources(targetDir, rootType); + addAllSubDirsAsGeneratedSources(targetDir, rootType); break; case IGNORE: @@ -257,16 +257,16 @@ public class MavenFoldersImporter { } } - private void addAsSourceFolder(@NotNull File dir, final JavaSourceRootType rootType) { + private void addAsGeneratedSourceFolder(@NotNull File dir, final JavaSourceRootType rootType) { if (!myModel.hasRegisteredSourceSubfolder(dir)) { - myModel.addSourceFolder(dir.getPath(), rootType, true); + myModel.addGeneratedJavaSourceFolder(dir.getPath(), rootType); } } - private void addAllSubDirsAsSources(@NotNull File dir, final JavaSourceRootType rootType) { + private void addAllSubDirsAsGeneratedSources(@NotNull File dir, final JavaSourceRootType rootType) { for (File f : getChildren(dir)) { if (f.isDirectory()) { - addAsSourceFolder(f, rootType); + addAsGeneratedSourceFolder(f, rootType); } } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenRootModelAdapter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenRootModelAdapter.java index e3a42a5b036d..168b55d9ff8d 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenRootModelAdapter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenRootModelAdapter.java @@ -39,6 +39,9 @@ import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.project.MavenProjectsManager; import org.jetbrains.idea.maven.utils.Path; import org.jetbrains.idea.maven.utils.Url; +import org.jetbrains.jps.model.JpsElement; +import org.jetbrains.jps.model.java.JavaSourceRootType; +import org.jetbrains.jps.model.java.JpsJavaExtensionService; import org.jetbrains.jps.model.module.JpsModuleSourceRootType; import java.io.File; @@ -130,11 +133,16 @@ public class MavenRootModelAdapter { } } - public void addSourceFolder(String path, final JpsModuleSourceRootType> rootType) { - addSourceFolder(path, rootType, false); + public
void addSourceFolder(String path, final JpsModuleSourceRootType
rootType) { + addSourceFolder(path, rootType, false, rootType.createDefaultProperties()); } - public void addSourceFolder(String path, final JpsModuleSourceRootType> rootType, boolean ifNotEmpty) { + public void addGeneratedJavaSourceFolder(String path, JavaSourceRootType rootType) { + addSourceFolder(path, rootType, true, JpsJavaExtensionService.getInstance().createSourceRootProperties("", true)); + } + + private
void addSourceFolder(@NotNull String path, final @NotNull JpsModuleSourceRootType
rootType, boolean ifNotEmpty,
+ final @NotNull P properties) {
if (ifNotEmpty) {
String[] childs = new File(toPath(path).getPath()).list();
if (childs == null || childs.length == 0) return;
@@ -148,7 +156,7 @@ public class MavenRootModelAdapter {
if (e == null) return;
unregisterAll(path, true, true);
unregisterAll(path, false, true);
- e.addSourceFolder(url.getUrl(), rootType);
+ e.addSourceFolder(url.getUrl(), rootType, properties);
}
public boolean hasRegisteredSourceSubfolder(File f) {
diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java
index 6d5ec4971874..85b34ca35816 100644
--- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java
+++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java
@@ -34,6 +34,7 @@ import com.intellij.openapi.progress.EmptyProgressIndicator;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl;
import com.intellij.openapi.roots.*;
+import com.intellij.openapi.roots.impl.SourceFolderImpl;
import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.ui.Messages;
@@ -48,11 +49,12 @@ import com.intellij.util.PathUtil;
import com.intellij.util.concurrency.Semaphore;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.execution.*;
import org.jetbrains.idea.maven.model.MavenArtifact;
import org.jetbrains.idea.maven.project.*;
import org.jetbrains.jps.model.java.JavaResourceRootType;
+import org.jetbrains.jps.model.java.JavaSourceRootProperties;
import org.jetbrains.jps.model.java.JavaSourceRootType;
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
@@ -123,6 +125,17 @@ public abstract class MavenImportingTestCase extends MavenTestCase {
doAssertContentFolders(moduleName, JavaSourceRootType.SOURCE, expectedSources);
}
+ protected void assertGeneratedSources(String moduleName, String... expectedSources) {
+ ContentEntry contentRoot = getContentRoot(moduleName);
+ List