From cdbb9e4236ff7c40897c0ea35e4bddafac39f17f Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Fri, 25 Jul 2014 22:34:24 +0400 Subject: [PATCH] ExportSettings: do not show empty configurables --- .../ChooseComponentsToExportDialog.java | 14 +++---- .../ide/actions/ExportSettingsAction.java | 40 ++++++++++--------- .../ide/actions/ImportSettingsAction.java | 14 ++++--- 3 files changed, 37 insertions(+), 31 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ChooseComponentsToExportDialog.java b/platform/platform-impl/src/com/intellij/ide/actions/ChooseComponentsToExportDialog.java index 7bbc3e0c6cba..006830479db3 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ChooseComponentsToExportDialog.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ChooseComponentsToExportDialog.java @@ -33,6 +33,7 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.FieldPanel; import com.intellij.util.Consumer; +import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -55,15 +56,14 @@ public class ChooseComponentsToExportDialog extends DialogWrapper { private final boolean myShowFilePath; private final String myDescription; - public ChooseComponentsToExportDialog(List components, - Map> fileToComponents, + public ChooseComponentsToExportDialog(MultiMap fileToComponents, boolean showFilePath, final String title, String description) { super(false); myDescription = description; myShowFilePath = showFilePath; Map componentToContainingListElement = new LinkedHashMap(); - for (ExportableComponent component : components) { + for (ExportableComponent component : fileToComponents.values()) { if (!addToExistingListElement(component, componentToContainingListElement, fileToComponents)) { ComponentElementProperties componentElementProperties = new ComponentElementProperties(); componentElementProperties.addComponent(component); @@ -149,14 +149,14 @@ public class ChooseComponentsToExportDialog extends DialogWrapper { } private static boolean addToExistingListElement(ExportableComponent component, - Map componentToContainingListElement, - Map> fileToComponents) { + Map componentToContainingListElement, + MultiMap fileToComponents) { final File[] exportFiles = component.getExportFiles(); File file = null; for (File exportFile : exportFiles) { - final Set tiedComponents = fileToComponents.get(exportFile); + Collection tiedComponents = fileToComponents.get(exportFile); - for (final ExportableComponent tiedComponent : tiedComponents) { + for (ExportableComponent tiedComponent : tiedComponents) { if (tiedComponent == component) continue; final ComponentElementProperties elementProperties = componentToContainingListElement.get(tiedComponent); if (elementProperties != null && !FileUtil.filesEqual(exportFile, file)) { diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java index e82e22d926ea..19a6502b8add 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java @@ -35,7 +35,9 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.MultiMap; import com.intellij.util.io.ZipUtil; +import org.jetbrains.annotations.NotNull; import java.io.BufferedOutputStream; import java.io.File; @@ -47,10 +49,18 @@ import java.util.jar.JarOutputStream; public class ExportSettingsAction extends AnAction implements DumbAware { public void actionPerformed(AnActionEvent e) { Project project = getEventProject(e); - List exportableComponents = new ArrayList(); - Map> fileToComponents = getRegisteredComponentsAndFiles(exportableComponents); - final ChooseComponentsToExportDialog dialog = new ChooseComponentsToExportDialog(exportableComponents, fileToComponents, true, + ApplicationManager.getApplication().saveSettings(); + + MultiMap fileToComponents = getExportableComponentsMap(); + for (Iterator it = fileToComponents.keySet().iterator(); it.hasNext(); ) { + File file = it.next(); + if (!file.exists()) { + it.remove(); + } + } + + final ChooseComponentsToExportDialog dialog = new ChooseComponentsToExportDialog(fileToComponents, true, IdeBundle.message("title.select.components.to.export"), IdeBundle.message( "prompt.please.check.all.components.to.export")); @@ -65,8 +75,6 @@ public class ExportSettingsAction extends AnAction implements DumbAware { ContainerUtil.addAll(exportFiles, markedComponent.getExportFiles()); } - ApplicationManager.getApplication().saveSettings(); - final File saveFile = dialog.getExportFile(); try { if (saveFile.exists()) { @@ -121,24 +129,18 @@ public class ExportSettingsAction extends AnAction implements DumbAware { } } - public static Map> getRegisteredComponentsAndFiles(List exportableComponents) { - Map> fileToComponents = new HashMap>(); + @NotNull + public static MultiMap getExportableComponentsMap() { + MultiMap result = MultiMap.createSet(); - final List components = new ArrayList(Arrays.asList(ApplicationManager.getApplication().getComponents(ExportableApplicationComponent.class))); + ExportableApplicationComponent[] components1 = ApplicationManager.getApplication().getComponents(ExportableApplicationComponent.class); + List components2 = ServiceBean.loadServicesFromBeans(ExportableComponent.EXTENSION_POINT, ExportableComponent.class); - components.addAll(ServiceBean.loadServicesFromBeans(ExportableComponent.EXTENSION_POINT, ExportableComponent.class)); - - for (ExportableComponent component : components) { - exportableComponents.add(component); + for (ExportableComponent component : ContainerUtil.concat(Arrays.asList(components1), components2)) { for (File exportFile : component.getExportFiles()) { - Set componentsTied = fileToComponents.get(exportFile); - if (componentsTied == null) { - componentsTied = new HashSet(); - fileToComponents.put(exportFile, componentsTied); - } - componentsTied.add(component); + result.putValue(exportFile, component); } } - return fileToComponents; + return result; } } diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ImportSettingsAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ImportSettingsAction.java index 1e989946ab2f..f06c45e1af7a 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ImportSettingsAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ImportSettingsAction.java @@ -36,13 +36,17 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.updateSettings.impl.UpdateSettings; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.Consumer; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.MultiMap; import com.intellij.util.io.ZipUtil; import java.awt.*; import java.io.File; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; @@ -77,10 +81,10 @@ public class ImportSettingsAction extends AnAction implements DumbAware { return; } - final ArrayList registeredComponents = new ArrayList(); - final Map> filesToComponents = ExportSettingsAction.getRegisteredComponentsAndFiles(registeredComponents); - List components = getComponentsStored(saveFile, registeredComponents); - final ChooseComponentsToExportDialog dialog = new ChooseComponentsToExportDialog(components, filesToComponents, false, + MultiMap filesToComponents = ExportSettingsAction.getExportableComponentsMap(); + List components = getComponentsStored(saveFile, ContainerUtil.newArrayList(filesToComponents.values())); + filesToComponents.values().retainAll(components); + final ChooseComponentsToExportDialog dialog = new ChooseComponentsToExportDialog(filesToComponents, false, IdeBundle.message("title.select.components.to.import"), IdeBundle.message("prompt.check.components.to.import")); dialog.show();