mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
+4
-7
@@ -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);
|
||||
|
||||
+25
@@ -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();
|
||||
|
||||
+3
-4
@@ -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) {
|
||||
|
||||
+2
-1
@@ -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;
|
||||
|
||||
+9
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user