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;
This commit is contained in:
Denis.Zhdanov
2013-07-12 15:14:26 +04:00
parent e5fde7914f
commit 9c5d23232a
6 changed files with 45 additions and 18 deletions
@@ -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<DataNode<?>, Key<?>> GROUPER = new Function<DataNode<?>, Key<?>>() {
@NotNull private static final NullableFunction<DataNode<?>, Key<?>> GROUPER = new NullableFunction<DataNode<?>, Key<?>>() {
@Override
public Key<?> fun(DataNode<?> node) {
return node.getKey();
@@ -214,7 +211,7 @@ public class ExternalSystemApiUtil {
@NotNull
public static <K, V> Map<DataNode<K>, List<DataNode<V>>> groupBy(@NotNull Collection<DataNode<V>> nodes, @NotNull final Key<K> key) {
return groupBy(nodes, new Function<DataNode<V>, DataNode<K>>() {
return groupBy(nodes, new NullableFunction<DataNode<V>, DataNode<K>>() {
@Nullable
@Override
public DataNode<K> fun(DataNode<V> node) {
@@ -224,7 +221,7 @@ public class ExternalSystemApiUtil {
}
@NotNull
public static <K, V> Map<K, List<V>> groupBy(@NotNull Collection<V> nodes, @NotNull Function<V, K> grouper) {
public static <K, V> Map<K, List<V>> groupBy(@NotNull Collection<V> nodes, @NotNull NullableFunction<V, K> grouper) {
Map<K, List<V>> result = ContainerUtilRt.newHashMap();
for (V data : nodes) {
K key = grouper.fun(data);
@@ -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<C extends AbstractImp
systemSettings.setLinkedProjectsSettings(projects);
if (externalProjectNode != null) {
ensureToolWindowInitialized(project);
ExternalSystemApiUtil.executeProjectChangeAction(new Runnable() {
@Override
public void run() {
@@ -172,6 +178,25 @@ public abstract class AbstractExternalProjectImportBuilder<C extends AbstractImp
return Collections.emptyList();
}
private void ensureToolWindowInitialized(@NotNull Project project) {
ToolWindowManager manager = ToolWindowManager.getInstance(project);
if (!(manager instanceof ToolWindowManagerEx)) {
return;
}
ToolWindowManagerEx managerEx = (ToolWindowManagerEx)manager;
String id = myExternalSystemId.getReadableName();
ToolWindow window = manager.getToolWindow(id);
if (window != null) {
return;
}
ToolWindowEP[] beans = Extensions.getExtensions(ToolWindowEP.EP_NAME);
for (final ToolWindowEP bean : beans) {
if (id.equals(bean.id)) {
managerEx.initToolWindow(bean);
}
}
}
@NotNull
private ExternalProjectSettings getCurrentExternalProjectSettings() {
ExternalProjectSettings result = myControl.getProjectSettings().clone();
@@ -24,6 +24,7 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
@@ -45,16 +46,14 @@ public abstract class AbstractToolWindowService<T extends ExternalEntityData> 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<DataNode<T>> nodes,
@NotNull Project project,
@NotNull ExternalSystemTasksTreeModel model);
@Nullable ExternalSystemTasksTreeModel model);
@Override
public void removeData(@NotNull Collection<? extends Void> toRemove, @NotNull Project project, boolean synchronous) {
@@ -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<ModuleDat
@Override
protected void processData(@NotNull final Collection<DataNode<ModuleData>> nodes,
@NotNull Project project,
@NotNull final ExternalSystemTasksTreeModel model)
@Nullable final ExternalSystemTasksTreeModel model)
{
if (nodes.isEmpty()) {
return;
@@ -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<TaskData> {
}
};
public static final Function<DataNode<TaskData>, ExternalConfigPathAware> TASK_HOLDER_RETRIEVAL_STRATEGY =
new Function<DataNode<TaskData>, ExternalConfigPathAware>() {
public static final NullableFunction<DataNode<TaskData>, ExternalConfigPathAware> TASK_HOLDER_RETRIEVAL_STRATEGY =
new NullableFunction<DataNode<TaskData>, ExternalConfigPathAware>() {
@Nullable
@Override
public ExternalConfigPathAware fun(DataNode<TaskData> node) {
ModuleData moduleData = node.getData(ProjectKeys.MODULE);
@@ -72,7 +75,7 @@ public class ToolWindowTaskService extends AbstractToolWindowService<TaskData> {
@Override
protected void processData(@NotNull Collection<DataNode<TaskData>> 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<TaskData> {
availableTasks.putAll(data);
settings.setAvailableTasks(availableTasks);
ExternalSystemUiUtil.apply(settings, model);
if (model != null) {
ExternalSystemUiUtil.apply(settings, model);
}
}
}
@@ -424,7 +424,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
}
String s = name.toLowerCase();
if (s.contains("idea") || s.contains("eclipse")) {
if (s.contains("idea")) {
continue;
}
@@ -447,7 +447,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
rootProjectTaskCandidates.forEachEntry(new TObjectIntProcedure<Pair<String, String>>() {
@Override
public boolean execute(Pair<String, String> 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;