From 9c5d23232a000aad2713ef42f20ba7d93bde265e Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Fri, 12 Jul 2013 15:12:55 +0400 Subject: [PATCH] IDEA-109435 Gradle tool window is missing in Cardea build 130.962 1. Ensure that external system tool window is shown when the first external project is linked to existing ide project; 2. Ensure that local external system settings are properly populated on importing new external project; 3. Green code policy is applied; --- .../util/ExternalSystemApiUtil.java | 11 +++----- .../AbstractExternalProjectImportBuilder.java | 25 +++++++++++++++++++ .../task/AbstractToolWindowService.java | 7 +++--- .../service/task/ToolWindowModuleService.java | 3 ++- .../service/task/ToolWindowTaskService.java | 13 +++++++--- .../project/GradleProjectResolver.java | 4 +-- 6 files changed, 45 insertions(+), 18 deletions(-) diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/util/ExternalSystemApiUtil.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/util/ExternalSystemApiUtil.java index ece03b4534bc..8478c28dfc0d 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/util/ExternalSystemApiUtil.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/util/ExternalSystemApiUtil.java @@ -35,10 +35,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.BooleanFunction; -import com.intellij.util.Function; -import com.intellij.util.PathUtil; -import com.intellij.util.PathsList; +import com.intellij.util.*; import com.intellij.util.containers.ContainerUtilRt; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -103,7 +100,7 @@ public class ExternalSystemApiUtil { } }; - @NotNull private static final Function, Key> GROUPER = new Function, Key>() { + @NotNull private static final NullableFunction, Key> GROUPER = new NullableFunction, Key>() { @Override public Key fun(DataNode node) { return node.getKey(); @@ -214,7 +211,7 @@ public class ExternalSystemApiUtil { @NotNull public static Map, List>> groupBy(@NotNull Collection> nodes, @NotNull final Key key) { - return groupBy(nodes, new Function, DataNode>() { + return groupBy(nodes, new NullableFunction, DataNode>() { @Nullable @Override public DataNode fun(DataNode node) { @@ -224,7 +221,7 @@ public class ExternalSystemApiUtil { } @NotNull - public static Map> groupBy(@NotNull Collection nodes, @NotNull Function grouper) { + public static Map> groupBy(@NotNull Collection nodes, @NotNull NullableFunction grouper) { Map> result = ContainerUtilRt.newHashMap(); for (V data : nodes) { K key = grouper.fun(data); diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java index f4a88e59e940..93308bb1233d 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java @@ -3,6 +3,7 @@ package com.intellij.openapi.externalSystem.service.project.wizard; import com.intellij.ide.util.projectWizard.WizardContext; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.externalSystem.model.DataNode; import com.intellij.openapi.externalSystem.model.ExternalSystemDataKeys; import com.intellij.openapi.externalSystem.model.ProjectSystemId; @@ -34,6 +35,10 @@ import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.wm.ToolWindow; +import com.intellij.openapi.wm.ToolWindowEP; +import com.intellij.openapi.wm.ToolWindowManager; +import com.intellij.openapi.wm.ex.ToolWindowManagerEx; import com.intellij.packaging.artifacts.ModifiableArtifactModel; import com.intellij.projectImport.ProjectImportBuilder; import com.intellij.util.containers.ContainerUtilRt; @@ -131,6 +136,7 @@ public abstract class AbstractExternalProjectImportBuilder im project, ExternalSystemDataKeys.ALL_TASKS_MODEL, toImport.iterator().next().getData().getOwner()); - if (model != null) { - processData(toImport, project, model); - } + processData(toImport, project, model); } }); } protected abstract void processData(@NotNull Collection> nodes, @NotNull Project project, - @NotNull ExternalSystemTasksTreeModel model); + @Nullable ExternalSystemTasksTreeModel model); @Override public void removeData(@NotNull Collection toRemove, @NotNull Project project, boolean synchronous) { diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ToolWindowModuleService.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ToolWindowModuleService.java index 8f62a0cb5157..def355351f85 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ToolWindowModuleService.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ToolWindowModuleService.java @@ -32,6 +32,7 @@ import com.intellij.openapi.project.Project; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtilRt; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.HashMap; @@ -65,7 +66,7 @@ public class ToolWindowModuleService extends AbstractToolWindowService> nodes, @NotNull Project project, - @NotNull final ExternalSystemTasksTreeModel model) + @Nullable final ExternalSystemTasksTreeModel model) { if (nodes.isEmpty()) { return; diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ToolWindowTaskService.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ToolWindowTaskService.java index 93ba75c81ba0..a9a665740946 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ToolWindowTaskService.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ToolWindowTaskService.java @@ -32,8 +32,10 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil; import com.intellij.openapi.externalSystem.util.Order; import com.intellij.openapi.project.Project; import com.intellij.util.Function; +import com.intellij.util.NullableFunction; import com.intellij.util.containers.ContainerUtilRt; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.List; @@ -54,8 +56,9 @@ public class ToolWindowTaskService extends AbstractToolWindowService { } }; - public static final Function, ExternalConfigPathAware> TASK_HOLDER_RETRIEVAL_STRATEGY = - new Function, ExternalConfigPathAware>() { + public static final NullableFunction, ExternalConfigPathAware> TASK_HOLDER_RETRIEVAL_STRATEGY = + new NullableFunction, ExternalConfigPathAware>() { + @Nullable @Override public ExternalConfigPathAware fun(DataNode node) { ModuleData moduleData = node.getData(ProjectKeys.MODULE); @@ -72,7 +75,7 @@ public class ToolWindowTaskService extends AbstractToolWindowService { @Override protected void processData(@NotNull Collection> nodes, @NotNull Project project, - @NotNull final ExternalSystemTasksTreeModel model) + @Nullable final ExternalSystemTasksTreeModel model) { if (nodes.isEmpty()) { return; @@ -92,6 +95,8 @@ public class ToolWindowTaskService extends AbstractToolWindowService { availableTasks.putAll(data); settings.setAvailableTasks(availableTasks); - ExternalSystemUiUtil.apply(settings, model); + if (model != null) { + ExternalSystemUiUtil.apply(settings, model); + } } } 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 6a76ac9b9e99..02bfa0b27afb 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 @@ -424,7 +424,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver>() { @Override public boolean execute(Pair p, int occurrenceNumber) { - if (occurrenceNumber >= modules.size() - 1) { + if (modules.size() == 1 || occurrenceNumber >= modules.size() - 1) { rootProjectTasks.add(new TaskData(GradleConstants.SYSTEM_ID, p.first, rootProjectPath, p.second)); } return true;