diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/IdeModelsProviderImpl.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/IdeModelsProviderImpl.java index 61b206ad9d51..33cf374b1236 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/IdeModelsProviderImpl.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/IdeModelsProviderImpl.java @@ -17,6 +17,7 @@ package com.intellij.openapi.externalSystem.service.project; import com.intellij.openapi.externalSystem.model.project.*; import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleGrouperKt; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; @@ -87,16 +88,17 @@ public class IdeModelsProviderImpl implements IdeModelsProvider { protected String[] suggestModuleNameCandidates(@NotNull ModuleData module) { String prefix = module.getGroup(); File modulePath = new File(module.getLinkedExternalProjectPath()); - if(modulePath.isFile()) { + if (modulePath.isFile()) { modulePath = modulePath.getParentFile(); } if (modulePath.getParentFile() != null) { prefix = modulePath.getParentFile().getName(); } + char delimiter = ModuleGrouperKt.isQualifiedModuleNamesEnabled() ? '.' : '_'; return new String[]{ module.getInternalName(), - prefix + '-' + module.getInternalName(), - prefix + '-' + module.getInternalName() + "~1"}; + prefix + delimiter + module.getInternalName(), + prefix + delimiter + module.getInternalName() + "~1"}; } private static boolean isApplicableIdeModule(@NotNull ModuleData moduleData, @NotNull Module ideModule) { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java index 480b4b1a8e85..3ae2ccc39832 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java @@ -34,10 +34,7 @@ import com.intellij.openapi.externalSystem.service.notification.NotificationData import com.intellij.openapi.externalSystem.service.notification.NotificationSource; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.externalSystem.util.Order; -import com.intellij.openapi.module.EmptyModuleType; -import com.intellij.openapi.module.JavaModuleType; -import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.module.StdModuleTypes; +import com.intellij.openapi.module.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.DependencyScope; import com.intellij.openapi.util.Pair; @@ -175,21 +172,18 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver ExternalProject externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject.class); if (resolverCtx.isResolveModulePerSourceSet() && externalProject != null) { - String gradlePath = gradleModule.getGradleProject().getPath(); - final boolean isRootModule = StringUtil.isEmpty(gradlePath) || ":".equals(gradlePath); - final String[] moduleGroup; - if (isRootModule) { - moduleGroup = new String[]{mainModuleData.getInternalName()}; + String[] moduleGroup = null; + if (!ModuleGrouperKt.isQualifiedModuleNamesEnabled()) { + String gradlePath = gradleModule.getGradleProject().getPath(); + final boolean isRootModule = StringUtil.isEmpty(gradlePath) || ":".equals(gradlePath); + moduleGroup = isRootModule ? new String[]{mainModuleData.getInternalName()} : ArrayUtil.remove(gradlePath.split(":"), 0); + mainModuleData.setIdeModuleGroup(isRootModule ? null : moduleGroup); } - else { - moduleGroup = ArrayUtil.remove(gradlePath.split(":"), 0); - } - mainModuleData.setIdeModuleGroup(isRootModule ? null : moduleGroup); for (ExternalSourceSet sourceSet : externalProject.getSourceSets().values()) { final String moduleId = getModuleId(resolverCtx, gradleModule, sourceSet); final String moduleExternalName = gradleModule.getName() + ":" + sourceSet.getName(); - final String moduleInternalName = getInternalModuleName(gradleModule, sourceSet.getName()); + final String moduleInternalName = getInternalModuleName(gradleModule, externalProject, sourceSet.getName()); GradleSourceSetData sourceSetData = new GradleSourceSetData( moduleId, moduleExternalName, moduleInternalName, mainModuleFileDirectoryPath, mainModuleConfigPath); @@ -218,7 +212,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver } else { if ("test".equals(sourceSet.getName())) { - sourceSetData.setProductionModuleId(getInternalModuleName(gradleModule, "main")); + sourceSetData.setProductionModuleId(getInternalModuleName(gradleModule, externalProject, "main")); final Set testsArtifacts = externalProject.getArtifactsByConfiguration().get("tests"); if (testsArtifacts != null) { artifacts.addAll(testsArtifacts); @@ -260,11 +254,6 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver return mainModuleNode; } - @NotNull - private static String getInternalModuleName(@NotNull IdeaModule gradleModule, @NotNull String sourceSetName) { - return PathUtilRt.suggestFileName(gradleModule.getName() + "_" + sourceSetName, true, false); - } - @Override public void populateModuleExtraModels(@NotNull IdeaModule gradleModule, @NotNull DataNode ideModule) { final BuildScriptClasspathModel buildScriptClasspathModel = resolverCtx.getExtraProject(gradleModule, BuildScriptClasspathModel.class); diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java index 78daf36171c5..f349d69ba763 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java @@ -29,6 +29,7 @@ import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotifica import com.intellij.openapi.externalSystem.service.project.ExternalSystemProjectResolver; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.externalSystem.util.ExternalSystemDebugEnvironment; +import com.intellij.openapi.module.ModuleGrouperKt; import com.intellij.openapi.module.StdModuleTypes; import com.intellij.openapi.roots.DependencyScope; import com.intellij.openapi.util.Factory; @@ -866,15 +867,16 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver sourceSetNode : ExternalSystemApiUtil.getChildren(moduleNode, GradleSourceSetData.KEY)) { - sourceSetNode.getData().setIdeModuleGroup(moduleGroup); + for (DataNode sourceSetNode : ExternalSystemApiUtil.getChildren(moduleNode, GradleSourceSetData.KEY)) { + sourceSetNode.getData().setIdeModuleGroup(moduleGroup); + } } } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java index e4e167eae3fa..ab53501c2810 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java @@ -25,11 +25,13 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.externalSystem.util.ExternalSystemConstants; import com.intellij.openapi.externalSystem.util.ExternalSystemDebugEnvironment; import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleGrouperKt; import com.intellij.openapi.module.StdModuleTypes; import com.intellij.openapi.roots.DependencyScope; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.PathUtilRt; import com.intellij.util.containers.ContainerUtil; import org.gradle.api.artifacts.Dependency; import org.gradle.tooling.model.GradleProject; @@ -100,6 +102,7 @@ public class GradleProjectResolverUtil { ExternalProject externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject.class); if (externalProject != null) { + moduleData.setInternalName(getInternalModuleName(gradleModule, externalProject)); moduleData.setGroup(externalProject.getGroup()); moduleData.setVersion(externalProject.getVersion()); moduleData.setDescription(externalProject.getDescription()); @@ -111,6 +114,36 @@ public class GradleProjectResolverUtil { return projectDataNode.createChild(ProjectKeys.MODULE, moduleData); } + @NotNull + static String getInternalModuleName(@NotNull IdeaModule gradleModule, @NotNull ExternalProject externalProject) { + return getInternalModuleName(gradleModule, externalProject, null); + } + + @NotNull + static String getInternalModuleName(@NotNull IdeaModule gradleModule, + @NotNull ExternalProject externalProject, + @Nullable String sourceSetName) { + String delimiter; + StringBuilder moduleName = new StringBuilder(); + if (ModuleGrouperKt.isQualifiedModuleNamesEnabled()) { + delimiter = "."; + if (StringUtil.isNotEmpty(externalProject.getGroup())) { + moduleName.append(externalProject.getGroup()).append(delimiter); + } + moduleName.append(externalProject.getName()); + } + else { + delimiter = "_"; + moduleName.append(gradleModule.getName()); + } + if (sourceSetName != null) { + assert !sourceSetName.isEmpty(); + moduleName.append(delimiter); + moduleName.append(sourceSetName); + } + return PathUtilRt.suggestFileName(moduleName.toString(), true, false); + } + @NotNull public static String getModuleConfigPath(@NotNull ProjectResolverContext resolverCtx, @NotNull IdeaModule gradleModule,