From b3a2109ade19f354b16c94984c5a9e60208bf7df Mon Sep 17 00:00:00 2001 From: Nikita Skvortsov Date: Wed, 5 Dec 2018 17:16:15 +0300 Subject: [PATCH] [gradle] group module nodes according to idea module grouping IDEA-202466 --- .../model/project/ModuleData.java | 21 ++++++++++++++++--- .../model/project/ProjectData.java | 7 ++++++- .../externalSystem/view/ModuleNode.java | 2 +- .../externalSystem/view/ProjectNode.java | 14 ++++++++++++- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ModuleData.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ModuleData.java index 5a24f962b15e..80f54469c905 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ModuleData.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ModuleData.java @@ -2,7 +2,7 @@ package com.intellij.openapi.externalSystem.model.project; import com.intellij.openapi.externalSystem.model.ProjectSystemId; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; -import com.intellij.util.PathUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -12,6 +12,8 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import static com.intellij.openapi.util.text.StringUtil.*; + /** * @author Denis Zhdanov */ @@ -226,12 +228,25 @@ public class ModuleData extends AbstractNamedData implements Named, ExternalConf @Nullable public String getIdeGrouping() { - return getLinkedExternalProjectPath(); + if (myIdeModuleGroup != null) { + return join(myIdeModuleGroup, "."); + } else { + return getInternalName(); + } } @Nullable public String getIdeParentGrouping() { - return PathUtil.getParentPath(getLinkedExternalProjectPath()); + if (myIdeModuleGroup != null) { + return nullize(join(ArrayUtil.remove(myIdeModuleGroup, myIdeModuleGroup.length - 1), ".")); + } else { + final String name = getInternalName(); + if (name.lastIndexOf(".") > 0) { + return substringBeforeLast(name, "."); + } else { + return null; + } + } } @Override diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ProjectData.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ProjectData.java index eee9573dd2a9..15e986106151 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ProjectData.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ProjectData.java @@ -21,6 +21,7 @@ public class ProjectData extends AbstractNamedData implements ExternalConfigPath @Nullable private String myDescription; private String myGroup; private String myVersion; + private String myIdeGrouping; @Deprecated public ProjectData(@NotNull ProjectSystemId owner, @@ -64,7 +65,11 @@ public class ProjectData extends AbstractNamedData implements ExternalConfigPath @Nullable public String getIdeGrouping() { - return getLinkedExternalProjectPath(); + return myIdeGrouping; + } + + public void setIdeGrouping(@Nullable String ideGrouping) { + myIdeGrouping = ideGrouping; } @Override diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ModuleNode.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ModuleNode.java index c7ed166d2fe6..778627f68fd3 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ModuleNode.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ModuleNode.java @@ -71,7 +71,7 @@ public class ModuleNode extends ExternalSystemNode { @Override protected List doBuildChildren() { List> myChildNodes = ContainerUtil.newArrayList(); - if (!myIsRoot && getExternalProjectsView().getGroupModules()) { + if (getExternalProjectsView().getGroupModules()) { List childModules = ContainerUtil.findAll( myAllModules, module -> module != this && StringUtil.equals(module.getIdeParentGrouping(), getIdeGrouping()) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ProjectNode.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ProjectNode.java index e2f93cddff8e..9b5531f3ba6c 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ProjectNode.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ProjectNode.java @@ -54,12 +54,17 @@ public class ProjectNode extends ExternalSystemNode { @NotNull @Override protected List doBuildChildren() { + setIdeGrouping(null); final List children = super.doBuildChildren(); final List visibleChildren = ContainerUtil.filter(children, node -> node.isVisible()); if (visibleChildren.size() == 1 && visibleChildren.get(0).getName().equals(getName())) { singleModuleProject = true; + final ExternalSystemNode node = visibleChildren.get(0); + if (node instanceof ModuleNode) { + setIdeGrouping(((ModuleNode)node).getIdeGrouping()); + } //noinspection unchecked - return visibleChildren.get(0).doBuildChildren(); + return node.doBuildChildren(); } else { singleModuleProject = false; @@ -110,6 +115,13 @@ public class ProjectNode extends ExternalSystemNode { return data.getIdeGrouping(); } + private void setIdeGrouping(@Nullable String ideGrouping) { + ProjectData data = getData(); + if (data != null) { + data.setIdeGrouping(ideGrouping); + } + } + @Override @Nullable @NonNls