diff --git a/java/execution/impl/src/com/intellij/testIntegration/RecentTestsListProvider.java b/java/execution/impl/src/com/intellij/testIntegration/RecentTestsListProvider.java index 102fc8ae0334..752ead10a177 100644 --- a/java/execution/impl/src/com/intellij/testIntegration/RecentTestsListProvider.java +++ b/java/execution/impl/src/com/intellij/testIntegration/RecentTestsListProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -51,9 +51,7 @@ class RunConfigurationByRecordProvider implements ConfigurationByRecordProvider private void initRunConfigurationsMap() { RunManagerEx manager = RunManagerEx.getInstanceEx(myProject); - ConfigurationType[] types = manager.getConfigurationFactories(); - - for (ConfigurationType type : types) { + for (ConfigurationType type : manager.getConfigurationFactories()) { Map> structure = manager.getStructure(type); for (Map.Entry> e : structure.entrySet()) { for (RunnerAndConfigurationSettings settings : e.getValue()) { @@ -62,7 +60,6 @@ class RunConfigurationByRecordProvider implements ConfigurationByRecordProvider } } } - } diff --git a/platform/lang-api/src/com/intellij/execution/RunManager.kt b/platform/lang-api/src/com/intellij/execution/RunManager.kt index f9405c136545..21077911ab58 100644 --- a/platform/lang-api/src/com/intellij/execution/RunManager.kt +++ b/platform/lang-api/src/com/intellij/execution/RunManager.kt @@ -58,6 +58,8 @@ abstract class RunManager { */ abstract val configurationFactories: Array + abstract val configurationFactoriesWithoutUnknown: List + /** * Returns the list of all configurations of a specified type. * @param type a run configuration type. diff --git a/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java b/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java index d0d02d9c2463..8222f251da4c 100644 --- a/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java +++ b/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationPopup.java @@ -18,7 +18,6 @@ package com.intellij.execution.actions; import com.intellij.execution.*; import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.execution.configurations.UnknownConfigurationType; import com.intellij.execution.impl.EditConfigurationsDialog; import com.intellij.execution.impl.RunDialog; import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; @@ -981,36 +980,34 @@ public class ChooseRunConfigurationPopup implements ExecutorProvider { } Map wrappedExisting = new LinkedHashMap<>(); - for (ConfigurationType type : manager.getConfigurationFactories()) { - if (!(type instanceof UnknownConfigurationType)) { - Map> structure = manager.getStructure(type); - for (Map.Entry> entry : structure.entrySet()) { - if (entry.getValue().isEmpty()) { - continue; - } + for (ConfigurationType type : manager.getConfigurationFactoriesWithoutUnknown()) { + Map> structure = manager.getStructure(type); + for (Map.Entry> entry : structure.entrySet()) { + if (entry.getValue().isEmpty()) { + continue; + } - final String key = entry.getKey(); - if (key != null) { - boolean isSelected = entry.getValue().contains(selectedConfiguration); - if (isSelected) { - assert selectedConfiguration != null; - } - FolderWrapper folderWrapper = new FolderWrapper(project, executorProvider, - key + (isSelected ? " (mnemonic is to \"" + selectedConfiguration.getName() + "\")" : ""), - entry.getValue()); - if (isSelected) { - folderWrapper.setMnemonic(1); - } - result.add(folderWrapper); + final String key = entry.getKey(); + if (key != null) { + boolean isSelected = entry.getValue().contains(selectedConfiguration); + if (isSelected) { + assert selectedConfiguration != null; } - else { - for (RunnerAndConfigurationSettings configuration : entry.getValue()) { - final ItemWrapper wrapped = ItemWrapper.wrap(project, configuration); - if (configuration == selectedConfiguration) { - wrapped.setMnemonic(1); - } - wrappedExisting.put(configuration, wrapped); + FolderWrapper folderWrapper = new FolderWrapper(project, executorProvider, + key + (isSelected ? " (mnemonic is to \"" + selectedConfiguration.getName() + "\")" : ""), + entry.getValue()); + if (isSelected) { + folderWrapper.setMnemonic(1); + } + result.add(folderWrapper); + } + else { + for (RunnerAndConfigurationSettings configuration : entry.getValue()) { + final ItemWrapper wrapped = ItemWrapper.wrap(project, configuration); + if (configuration == selectedConfiguration) { + wrapped.setMnemonic(1); } + wrappedExisting.put(configuration, wrapped); } } } diff --git a/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java b/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java index 9aa82d25e178..cf287e5f7f54 100644 --- a/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java +++ b/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,8 +30,6 @@ import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.registry.Registry; -import com.intellij.openapi.wm.ex.WindowManagerEx; -import com.intellij.openapi.wm.impl.IdeFrameImpl; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.SizedIcon; import com.intellij.ui.components.panels.NonOpaquePanel; @@ -156,8 +154,7 @@ public class RunConfigurationsComboBoxAction extends ComboBoxAction implements D allActionsGroup.addSeparator(); } - final ConfigurationType[] types = runManager.getConfigurationFactories(); - for (ConfigurationType type : types) { + for (ConfigurationType type : runManager.getConfigurationFactories()) { final DefaultActionGroup actionGroup = new DefaultActionGroup(); Map> structure = runManager.getStructure(type); for (Map.Entry> entry : structure.entrySet()) { @@ -273,7 +270,7 @@ public class RunConfigurationsComboBoxAction extends ComboBoxAction implements D myConfiguration = configuration; myProject = project; String name = configuration.getName(); - if (name == null || name.length() == 0) { + if (name.isEmpty()) { name = " "; } final Presentation presentation = getTemplatePresentation(); diff --git a/platform/lang-impl/src/com/intellij/execution/compound/CompoundRunConfigurationSettingsEditor.java b/platform/lang-impl/src/com/intellij/execution/compound/CompoundRunConfigurationSettingsEditor.java index 4c4607123455..4fd3e3f1bd04 100644 --- a/platform/lang-impl/src/com/intellij/execution/compound/CompoundRunConfigurationSettingsEditor.java +++ b/platform/lang-impl/src/com/intellij/execution/compound/CompoundRunConfigurationSettingsEditor.java @@ -19,7 +19,6 @@ import com.intellij.execution.BeforeRunTask; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.execution.configurations.UnknownConfigurationType; import com.intellij.execution.impl.RunConfigurationBeforeRunProvider; import com.intellij.execution.impl.RunConfigurationSelector; import com.intellij.execution.impl.RunManagerImpl; @@ -119,13 +118,10 @@ public class CompoundRunConfigurationSettingsEditor extends SettingsEditor all = new ArrayList<>(); - for (ConfigurationType type : myRunManager.getConfigurationFactories()) { - if (!(type instanceof UnknownConfigurationType)) { - for (RunnerAndConfigurationSettings settings : myRunManager.getConfigurationSettingsList(type)) { - all.add(settings.getConfiguration()); - } + for (ConfigurationType type : myRunManager.getConfigurationFactoriesWithoutUnknown()) { + for (RunnerAndConfigurationSettings settings : myRunManager.getConfigurationSettingsList(type)) { + all.add(settings.getConfiguration()); } } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/BaseExecuteBeforeRunDialog.java b/platform/lang-impl/src/com/intellij/execution/impl/BaseExecuteBeforeRunDialog.java index e57f0565de10..b693ed7b1b6d 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/BaseExecuteBeforeRunDialog.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/BaseExecuteBeforeRunDialog.java @@ -146,9 +146,7 @@ public abstract class BaseExecuteBeforeRunDialog extend private DefaultMutableTreeNode buildNodes() { DefaultMutableTreeNode root = new DefaultMutableTreeNode(new Descriptor()); RunManager runManager = RunManager.getInstance(myProject); - final ConfigurationType[] configTypes = runManager.getConfigurationFactories(); - - for (final ConfigurationType type : configTypes) { + for (final ConfigurationType type : runManager.getConfigurationFactories()) { final Icon icon = type.getIcon(); DefaultMutableTreeNode typeNode = new DefaultMutableTreeNode(new ConfigurationTypeDescriptor(type, icon, isConfigurationAssigned(type))); root.add(typeNode); diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java index 32efecd21e83..f46d570fc6db 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java @@ -204,8 +204,7 @@ class RunConfigurable extends BaseConfigurable { } }); final RunManagerEx manager = getRunManager(); - final ConfigurationType[] factories = manager.getConfigurationFactories(); - for (ConfigurationType type : factories) { + for (ConfigurationType type : manager.getConfigurationFactories()) { final List configurations = manager.getConfigurationSettingsList(type); if (!configurations.isEmpty()) { final DefaultMutableTreeNode typeNode = new DefaultMutableTreeNode(type); @@ -232,16 +231,13 @@ class RunConfigurable extends BaseConfigurable { // add defaults final DefaultMutableTreeNode defaults = new DefaultMutableTreeNode(DEFAULTS); - final ConfigurationType[] configurationTypes = RunManagerImpl.getInstanceImpl(myProject).getConfigurationFactories(); - for (final ConfigurationType type : configurationTypes) { - if (!(type instanceof UnknownConfigurationType)) { - ConfigurationFactory[] configurationFactories = type.getConfigurationFactories(); - DefaultMutableTreeNode typeNode = new DefaultMutableTreeNode(type); - defaults.add(typeNode); - if (configurationFactories.length != 1) { - for (ConfigurationFactory factory : configurationFactories) { - typeNode.add(new DefaultMutableTreeNode(factory)); - } + for (final ConfigurationType type : RunManagerImpl.getInstanceImpl(myProject).getConfigurationFactoriesWithoutUnknown()) { + ConfigurationFactory[] configurationFactories = type.getConfigurationFactories(); + DefaultMutableTreeNode typeNode = new DefaultMutableTreeNode(type); + defaults.add(typeNode); + if (configurationFactories.length != 1) { + for (ConfigurationFactory factory : configurationFactories) { + typeNode.add(new DefaultMutableTreeNode(factory)); } } } @@ -668,7 +664,6 @@ class RunConfigurable extends BaseConfigurable { updateActiveConfigurationFromSelected(); final RunManagerImpl manager = getRunManager(); - final ConfigurationType[] types = manager.getConfigurationFactories(); List configurationTypes = new ArrayList<>(); for (int i = 0; i < myRoot.getChildCount(); i++) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode)myRoot.getChildAt(i); @@ -677,7 +672,7 @@ class RunConfigurable extends BaseConfigurable { configurationTypes.add((ConfigurationType)userObject); } } - for (ConfigurationType type : types) { + for (ConfigurationType type : manager.getConfigurationFactories()) { if (!configurationTypes.contains(type)) configurationTypes.add(type); } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt index ba34071eef4a..3e1dc6729386 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt @@ -204,7 +204,7 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent override val configurationFactories by lazy { idToType.values.toTypedArray() } - val configurationFactoriesWithoutUnknown: List + override val configurationFactoriesWithoutUnknown: List get() = idToType.values.filterSmart { it !is UnknownConfigurationType } /** @@ -232,7 +232,7 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent fun getSettings(configuration: RunConfiguration) = sortedConfigurations.firstOrNull { it.configuration === configuration } as? RunnerAndConfigurationSettingsImpl - override fun getConfigurationSettingsList(type: ConfigurationType) = sortedConfigurations.filterSmart { it.type?.id == type.id } + override fun getConfigurationSettingsList(type: ConfigurationType) = lock.read { sortedConfigurations.filterSmart { it.type?.id == type.id } } fun getConfigurationSettings() = idToSettings.values.toTypedArray() diff --git a/platform/lang-impl/src/com/intellij/execution/startup/ProjectStartupConfigurable.java b/platform/lang-impl/src/com/intellij/execution/startup/ProjectStartupConfigurable.java index ebad8e48c1fd..884a80a83970 100644 --- a/platform/lang-impl/src/com/intellij/execution/startup/ProjectStartupConfigurable.java +++ b/platform/lang-impl/src/com/intellij/execution/startup/ProjectStartupConfigurable.java @@ -20,7 +20,6 @@ import com.intellij.execution.actions.ChooseRunConfigurationPopup; import com.intellij.execution.actions.ExecutorProvider; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.execution.configurations.UnknownConfigurationType; import com.intellij.execution.executors.DefaultRunExecutor; import com.intellij.execution.impl.EditConfigurationsDialog; import com.intellij.execution.impl.NewRunConfigurationPopup; @@ -220,20 +219,17 @@ public class ProjectStartupConfigurable implements SearchableConfigurable, Confi @Override public void perform(@NotNull final Project project, @NotNull final Executor executor, @NotNull DataContext context) { final RunManagerImpl runManager = RunManagerImpl.getInstanceImpl(project); - final ConfigurationType[] factories = runManager.getConfigurationFactories(); final Condition filter = new Condition() { private final RunnerRegistry myRegistry = RunnerRegistry.getInstance(); @Override public boolean value(ConfigurationType configurationType) { ConfigurationFactory factory; - return !UnknownConfigurationType.INSTANCE.equals(configurationType) && - ((factory = runManager.getFactory(configurationType.getId(), null)) != null) && + return ((factory = runManager.getFactory(configurationType.getId(), null)) != null) && myRegistry.getRunner(executor.getId(), runManager.getConfigurationTemplate(factory).getConfiguration()) != null; } }; - final List factoriesList = ContainerUtil.filter(Arrays.asList(factories), filter); - final ListPopup popup = NewRunConfigurationPopup.createAddPopup(factoriesList, "", + final ListPopup popup = NewRunConfigurationPopup.createAddPopup(ContainerUtil.filter(runManager.getConfigurationFactoriesWithoutUnknown(), filter), "", factory -> ApplicationManager.getApplication().invokeLater(() -> { final EditConfigurationsDialog dialog = new EditConfigurationsDialog(project, factory); if (dialog.showAndGet()) { diff --git a/platform/lang-impl/src/com/intellij/internal/DumpConfigurationTypesAction.java b/platform/lang-impl/src/com/intellij/internal/DumpConfigurationTypesAction.java index 0b08ea3cd2cb..e98a6f6e5bf9 100644 --- a/platform/lang-impl/src/com/intellij/internal/DumpConfigurationTypesAction.java +++ b/platform/lang-impl/src/com/intellij/internal/DumpConfigurationTypesAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,9 +36,7 @@ public class DumpConfigurationTypesAction extends AnAction implements DumbAware @Override public void actionPerformed(AnActionEvent e) { final Project project = e.getProject(); - final ConfigurationType[] factories = - RunManager.getInstance(project).getConfigurationFactories(); - for (ConfigurationType factory : factories) { + for (ConfigurationType factory : RunManager.getInstance(project).getConfigurationFactories()) { System.out.println(factory.getDisplayName() + " : " + factory.getId()); } } diff --git a/platform/testFramework/src/com/intellij/mock/MockRunManager.kt b/platform/testFramework/src/com/intellij/mock/MockRunManager.kt index 6286437e0d1b..c4331f987314 100644 --- a/platform/testFramework/src/com/intellij/mock/MockRunManager.kt +++ b/platform/testFramework/src/com/intellij/mock/MockRunManager.kt @@ -36,6 +36,9 @@ class MockRunManager : RunManagerEx() { override val configurationFactories: Array get() = emptyArray() + override val configurationFactoriesWithoutUnknown: List + get() = emptyList() + override val allConfigurationsList: List get() = emptyList()