diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/ModuleSourceItemGroup.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/ModuleSourceItemGroup.java index b474045dea89..48c75159de80 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/ModuleSourceItemGroup.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/ModuleSourceItemGroup.java @@ -121,7 +121,7 @@ public class ModuleSourceItemGroup extends PackagingSourceItem { @Override public String getPresentableName() { - return ModuleGrouper.instanceFor(myContext.getProject(), myContext.getModifiableModuleModel()).getPresentableName(myModule); + return ModuleGrouper.instanceFor(myContext.getProject(), myContext.getModifiableModuleModel()).getShortenedName(myModule); } @Override diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java index 05f16f479e09..07e45e8d4aa6 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java @@ -640,7 +640,7 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple @NotNull @Override public String getDisplayName() { - return myFlattenModules ? getModule().getName() : myGrouper.getPresentableName(getModule()); + return myFlattenModules ? getModule().getName() : myGrouper.getShortenedName(getModule()); } private Module getModule() { @@ -776,7 +776,8 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple @Override public void update(@NotNull AnActionEvent e) { super.update(e); - e.getPresentation().setEnabledAndVisible(ModuleGrouperKt.isQualifiedModuleNamesEnabled() && !myContext.getModulesConfigurator().getModuleModel().hasModuleGroups()); + e.getPresentation().setEnabledAndVisible( + ModuleGrouperKt.isQualifiedModuleNamesEnabled() && !myContext.getModulesConfigurator().getModuleModel().hasModuleGroups()); } @Override diff --git a/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooserModuleTreeView.java b/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooserModuleTreeView.java index 71e4d5cbf737..a1638cd7433c 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooserModuleTreeView.java +++ b/platform/lang-impl/src/com/intellij/ide/util/DirectoryChooserModuleTreeView.java @@ -242,7 +242,7 @@ public class DirectoryChooserModuleTreeView implements DirectoryChooserView { } else if (value instanceof Module) { final Module module = (Module)value; - append(myModuleGrouper.getPresentableName(module), SimpleTextAttributes.REGULAR_ATTRIBUTES); + append(myModuleGrouper.getShortenedName(module), SimpleTextAttributes.REGULAR_ATTRIBUTES); setIcon(ModuleType.get(module).getIcon()); } else if (value instanceof ModuleGroup) { append(value.toString(), SimpleTextAttributes.REGULAR_ATTRIBUTES); diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleNode.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleNode.java index f9f0dcfac257..8f8eb4623467 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleNode.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/ModuleNode.java @@ -71,7 +71,7 @@ public class ModuleNode extends PackageDependenciesNode implements NavigatableWi @Override public String toString() { - return myModuleGrouper != null ? myModuleGrouper.getPresentableName(myModule) : myModule.getName(); + return myModuleGrouper != null ? myModuleGrouper.getShortenedName(myModule) : myModule.getName(); } public String getModuleName() { diff --git a/platform/platform-tests/testSrc/com/intellij/module/GroupModulesByQualifiedNamesTest.kt b/platform/platform-tests/testSrc/com/intellij/module/GroupModulesByQualifiedNamesTest.kt index 703cb9083fe7..7a899121906a 100644 --- a/platform/platform-tests/testSrc/com/intellij/module/GroupModulesByQualifiedNamesTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/module/GroupModulesByQualifiedNamesTest.kt @@ -29,7 +29,7 @@ class GroupModulesByQualifiedNamesTest : PlatformTestCase() { @Test fun `test single module`() { val module = createModule("a.b.module") - assertEquals("module", grouper.getPresentableName(module)) + assertEquals("module", grouper.getShortenedName(module)) val parentGroup = ModuleGroup(listOf("a")) assertEmpty(parentGroup.modulesInGroup(grouper, false)) @@ -45,8 +45,8 @@ class GroupModulesByQualifiedNamesTest : PlatformTestCase() { val module1 = createModule("a.module1") val module2 = createModule("a.b.module2") - assertEquals("module1", grouper.getPresentableName(module1)) - assertEquals("module2", grouper.getPresentableName(module2)) + assertEquals("module1", grouper.getShortenedName(module1)) + assertEquals("module2", grouper.getShortenedName(module2)) val parentGroup = ModuleGroup(listOf("a")) assertSameElements(parentGroup.modulesInGroup(grouper, false), module1) diff --git a/platform/projectModel-impl/src/com/intellij/openapi/module/ModuleGrouper.kt b/platform/projectModel-api/src/com/intellij/openapi/module/ModuleGrouper.kt similarity index 77% rename from platform/projectModel-impl/src/com/intellij/openapi/module/ModuleGrouper.kt rename to platform/projectModel-api/src/com/intellij/openapi/module/ModuleGrouper.kt index 1238049fa2a0..7fb6bd349c3a 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/module/ModuleGrouper.kt +++ b/platform/projectModel-api/src/com/intellij/openapi/module/ModuleGrouper.kt @@ -18,15 +18,26 @@ package com.intellij.openapi.module import com.intellij.openapi.project.Project import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.util.text.StringUtil +import org.jetbrains.annotations.ApiStatus import java.util.* /** + * Use this class to determine how modules show by organized in a tree. It supports the both ways of module grouping: the old one where + * groups are specified explicitly and the new one where modules are grouped accordingly to their qualified names. + * * @author nik */ +@ApiStatus.Experimental abstract class ModuleGrouper { + /** + * Returns names of parent groups for a module + */ abstract fun getGroupPath(module: Module): List - abstract fun getPresentableName(module: Module): String + /** + * Returns name which should be used for a module when it's shown under its group + */ + abstract fun getShortenedName(module: Module): String abstract fun getAllModules(): Array @@ -55,7 +66,7 @@ private class QualifiedNameGrouper(project: Project, model: ModifiableModuleMode return getModuleName(module).split('.').dropLast(1) } - override fun getPresentableName(module: Module) = StringUtil.getShortName(getModuleName(module)) + override fun getShortenedName(module: Module) = StringUtil.getShortName(getModuleName(module)) } private class ExplicitModuleGrouper(project: Project, model: ModifiableModuleModel?): ModuleGrouperBase(project, model) { @@ -64,5 +75,5 @@ private class ExplicitModuleGrouper(project: Project, model: ModifiableModuleMod return if (path != null) Arrays.asList(*path) else emptyList() } - override fun getPresentableName(module: Module) = getModuleName(module) + override fun getShortenedName(module: Module) = getModuleName(module) } diff --git a/platform/projectModel-api/src/com/intellij/openapi/module/ModuleManager.java b/platform/projectModel-api/src/com/intellij/openapi/module/ModuleManager.java index 3c919453828c..7ef52032a98a 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/module/ModuleManager.java +++ b/platform/projectModel-api/src/com/intellij/openapi/module/ModuleManager.java @@ -159,9 +159,11 @@ public abstract class ModuleManager extends SimpleModificationTracker { /** - * Returns the path to the group to which the specified module belongs, as an - * array of group names starting from the project root. - * + * Returns the path to the group to which the specified module belongs, as an array of group names starting from the project root. + *

+ * Use {@link com.intellij.openapi.module.ModuleGrouper#getGroupPath()} instead. Exlicit module groups will be replaced + * by automatical module grouping accordingly to qualified names of modules, see https://youtrack.jetbrains.com/issue/IDEA-166061 for details. + *

* @param module the module for which the path is requested. * @return the path to the group for the module, or null if the module does not belong to any group. */