From a9c0841bd225f34b886e1da6beece35a154112f1 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Thu, 16 Jan 2020 12:36:04 +0300 Subject: [PATCH] [ES] do not override root type of imported source folders during collisions merge with other root types IDEA-219200 GitOrigin-RevId: d19839f954f3de96767b92c3cd5a0febab72b836 --- .../manage/ContentRootDataService.java | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ContentRootDataService.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ContentRootDataService.java index dc0a33b92368..17ac3569bf85 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ContentRootDataService.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ContentRootDataService.java @@ -154,12 +154,20 @@ public class ContentRootDataService extends AbstractProjectDataService updatedSourceRoots = new HashSet<>(); for (ExternalSystemSourceType externalSrcType : ExternalSystemSourceType.values()) { final JpsModuleSourceRootType type = getJavaSourceRootType(externalSrcType); if (type != null) { for (SourceRoot sourceRoot : contentRoot.getPaths(externalSrcType)) { - createSourceRootIfAbsent(sourceFolderManager, contentEntry, sourceRoot, module, type, forceDirectoriesCreation); - configureSourceFolder(sourceFolderManager, contentEntry, sourceRoot, externalSrcType.isGenerated()); + String sourceRootPath = sourceRoot.getPath(); + boolean createSourceFolder = !updatedSourceRoots.contains(sourceRootPath); + if (createSourceFolder) { + createOrReplaceSourceFolder(sourceFolderManager, contentEntry, sourceRoot, module, type, forceDirectoriesCreation); + if (externalSrcType == ExternalSystemSourceType.SOURCE || externalSrcType == ExternalSystemSourceType.TEST) { + updatedSourceRoots.add(sourceRootPath); + } + } + configureSourceFolder(sourceFolderManager, contentEntry, sourceRoot, createSourceFolder, externalSrcType.isGenerated()); } } } @@ -237,12 +245,12 @@ public class ContentRootDataService extends AbstractProjectDataService sourceRootType, - boolean createEmptyContentRootDirectories) { + private static void createOrReplaceSourceFolder(@NotNull SourceFolderManager sourceFolderManager, + @NotNull ContentEntry contentEntry, + @NotNull final SourceRoot sourceRoot, + @NotNull Module module, + @NotNull JpsModuleSourceRootType sourceRootType, + boolean createEmptyContentRootDirectories) { SourceFolder folder = findSourceFolder(contentEntry, sourceRoot); if (folder != null) { @@ -272,6 +280,7 @@ public class ContentRootDataService extends AbstractProjectDataService