From 6fffd5a4dde7b62339b10b645e8238fa39797629 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Sun, 3 Jun 2018 20:59:32 +0300 Subject: [PATCH] external system: customizable view node names --- .../view/ExternalProjectsViewImpl.java | 10 ++++++ .../view/ExternalSystemNode.java | 6 ++++ .../view/ExternalSystemViewContributor.java | 6 ++++ .../ExternalSystemViewDefaultContributor.java | 36 ++++++++++++------- .../externalSystem/view/ModuleNode.java | 5 --- .../externalSystem/view/ProjectNode.java | 6 ---- .../openapi/externalSystem/view/TaskNode.java | 5 --- .../src/META-INF/ExternalSystemExtensions.xml | 3 +- .../project/view/GradleViewContributor.java | 12 +++++++ 9 files changed, 59 insertions(+), 30 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewImpl.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewImpl.java index 525704a93ca6..4559856eb7bc 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewImpl.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalProjectsViewImpl.java @@ -476,6 +476,16 @@ public class ExternalProjectsViewImpl extends SimpleToolWindowPanel implements D } } + @Nullable + String getDisplayName(@Nullable DataNode node) { + if (node == null) return null; + return myViewContributors.stream() + .map(contributor -> contributor.getDisplayName(node)) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); + } + private void scheduleTasksRebuild() { scheduleStructureRequest(() -> { assert myStructure != null; diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemNode.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemNode.java index 712d06a6fa69..3bd16d9ef011 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemNode.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemNode.java @@ -116,6 +116,12 @@ public abstract class ExternalSystemNode extends SimpleNode implements Compar return myParent; } + @Override + public String getName() { + String displayName = ((ExternalProjectsViewImpl)getExternalProjectsView()).getDisplayName(myDataNode); + return displayName == null ? super.getName() : displayName; + } + protected ExternalProjectsView getExternalProjectsView() { return myExternalProjectsView; } diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemViewContributor.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemViewContributor.java index fc8515accd96..5a589ff770ab 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemViewContributor.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemViewContributor.java @@ -21,6 +21,7 @@ import com.intellij.openapi.externalSystem.model.Key; import com.intellij.openapi.externalSystem.model.ProjectSystemId; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -41,4 +42,9 @@ public abstract class ExternalSystemViewContributor { @NotNull public abstract List> createNodes( ExternalProjectsView externalProjectsView, MultiMap, DataNode> dataNodes); + + @Nullable + public String getDisplayName(@NotNull DataNode node) { + return null; + } } diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemViewDefaultContributor.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemViewDefaultContributor.java index fa1f5128ab69..329e854ea6d0 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemViewDefaultContributor.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/ExternalSystemViewDefaultContributor.java @@ -22,6 +22,7 @@ import com.intellij.openapi.externalSystem.model.Key; import com.intellij.openapi.externalSystem.model.ProjectKeys; import com.intellij.openapi.externalSystem.model.ProjectSystemId; import com.intellij.openapi.externalSystem.model.project.*; +import com.intellij.openapi.externalSystem.model.task.TaskData; import com.intellij.openapi.externalSystem.service.project.IdeModelsProviderImpl; import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemSettings; import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings; @@ -97,6 +98,12 @@ public class ExternalSystemViewDefaultContributor extends ExternalSystemViewCont return result; } + @Nullable + @Override + public String getDisplayName(@NotNull DataNode node) { + return getNodeDisplayName(node); + } + private static void addDependenciesNode(@NotNull ExternalProjectsView externalProjectsView, @NotNull MultiMap, DataNode> dataNodes, @NotNull List> result) { @@ -282,12 +289,6 @@ public class ExternalSystemViewDefaultContributor extends ExternalSystemViewCont setNameAndTooltip(getName(), null, data.getScope().getDisplayName()); } } - - @Override - public String getName() { - final ModuleDependencyData data = getData(); - return data != null ? data.getExternalName() : ""; - } } private static class LibraryDependencyDataExternalSystemNode extends DependencyDataExternalSystemNode { @@ -306,18 +307,20 @@ public class ExternalSystemViewDefaultContributor extends ExternalSystemViewCont setNameAndTooltip(getName(), null, data.getScope().getDisplayName()); } } + } - @Override - public String getName() { - final LibraryDependencyData data = getData(); - if (data == null) return ""; - String externalName = data.getExternalName(); + @NotNull + private static String getNodeDisplayName(@NotNull DataNode node) { + Object data = node.getData(); + if (data instanceof LibraryDependencyData) { + LibraryDependencyData libraryDependencyData = (LibraryDependencyData)data; + String externalName = libraryDependencyData.getExternalName(); if (StringUtil.isEmpty(externalName)) { - Set paths = data.getTarget().getPaths(LibraryPathType.BINARY); + Set paths = libraryDependencyData.getTarget().getPaths(LibraryPathType.BINARY); if (paths.size() == 1) { String relativePathToRoot = null; String path = ExternalSystemApiUtil.toCanonicalPath(paths.iterator().next()); - DataNode projectDataDataNode = ExternalSystemApiUtil.findParent(myDataNode, PROJECT); + DataNode projectDataDataNode = ExternalSystemApiUtil.findParent(node, PROJECT); if (projectDataDataNode != null) { relativePathToRoot = FileUtil.getRelativePath(projectDataDataNode.getData().getLinkedExternalProjectPath(), path, '/'); relativePathToRoot = relativePathToRoot != null && StringUtil.startsWith(relativePathToRoot, "../../") @@ -332,5 +335,12 @@ public class ExternalSystemViewDefaultContributor extends ExternalSystemViewCont } return externalName; } + if (data instanceof Named) { + return ((Named)data).getExternalName(); + } + if (data instanceof TaskData) { + return ((TaskData)data).getName(); + } + return StringUtil.notNullize(node.toString()); } } 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 082179b740b1..e238ace3e3dc 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 @@ -69,11 +69,6 @@ public class ModuleNode extends ExternalSystemNode { return myChildNodes; } - @Override - public String getName() { - return myData.getId(); - } - @Nullable @Override protected String getMenuId() { 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 3851fd2b4b3c..90c76f8796f7 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 @@ -78,12 +78,6 @@ public class ProjectNode extends ExternalSystemNode { getStructure().updateFrom(getParent()); } - @Override - public String getName() { - final ProjectData projectData = getData(); - return projectData != null ? projectData.getExternalName() : "unspecified"; - } - @Override protected void doUpdate() { String autoImportHint = null; diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/TaskNode.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/TaskNode.java index b622e9930dbe..9b330aecd060 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/TaskNode.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/view/TaskNode.java @@ -77,11 +77,6 @@ public class TaskNode extends ExternalSystemNode { return !myTaskData.isInherited() || getExternalProjectsView().showInheritedTasks(); } - @Override - public String getName() { - return myTaskData.getName(); - } - public String getModuleOwnerName() { return moduleOwnerName; } diff --git a/platform/platform-resources/src/META-INF/ExternalSystemExtensions.xml b/platform/platform-resources/src/META-INF/ExternalSystemExtensions.xml index 3dcdd0ea1da9..18bbb39aa038 100644 --- a/platform/platform-resources/src/META-INF/ExternalSystemExtensions.xml +++ b/platform/platform-resources/src/META-INF/ExternalSystemExtensions.xml @@ -58,7 +58,8 @@ - + diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/view/GradleViewContributor.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/view/GradleViewContributor.java index 56e7d1542e80..b7af5afd5b5d 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/view/GradleViewContributor.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/view/GradleViewContributor.java @@ -19,7 +19,9 @@ import com.intellij.icons.AllIcons; import com.intellij.ide.projectView.PresentationData; import com.intellij.openapi.externalSystem.model.DataNode; import com.intellij.openapi.externalSystem.model.Key; +import com.intellij.openapi.externalSystem.model.ProjectKeys; import com.intellij.openapi.externalSystem.model.ProjectSystemId; +import com.intellij.openapi.externalSystem.model.project.ModuleData; import com.intellij.openapi.externalSystem.util.Order; import com.intellij.openapi.externalSystem.view.ExternalProjectsView; import com.intellij.openapi.externalSystem.view.ExternalSystemNode; @@ -28,6 +30,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.SmartList; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData; import org.jetbrains.plugins.gradle.util.GradleConstants; @@ -65,6 +68,15 @@ public class GradleViewContributor extends ExternalSystemViewContributor { return result; } + @Nullable + @Override + public String getDisplayName(@NotNull DataNode node) { + if (ProjectKeys.MODULE.equals(node.getKey())) { + return ((ModuleData)node.getData()).getId(); + } + return super.getDisplayName(node); + } + private static void addCustomSourceSetsNodes(@NotNull ExternalProjectsView externalProjectsView, @NotNull MultiMap, DataNode> dataNodes, @NotNull List> result) {