From afbd9137191805f5bfebecafda20aa418cdb4c5a Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 16 Jun 2017 13:40:30 +0200 Subject: [PATCH] SSR: improve "template save as" api --- .../SSBasedInspectionOptions.java | 17 ++---- .../plugin/ui/ConfigurationManager.java | 58 +++++++++++-------- .../plugin/ui/SearchDialog.java | 57 ++++++------------ .../source/messages/SSRBundle.properties | 4 +- 4 files changed, 58 insertions(+), 78 deletions(-) diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/inspection/highlightTemplate/SSBasedInspectionOptions.java b/platform/structuralsearch/source/com/intellij/structuralsearch/inspection/highlightTemplate/SSBasedInspectionOptions.java index 53067edf22e1..ff23127f0e85 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/inspection/highlightTemplate/SSBasedInspectionOptions.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/inspection/highlightTemplate/SSBasedInspectionOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 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. @@ -71,18 +71,10 @@ public class SSBasedInspectionOptions { if (!dialog.showAndGet()) { return; } - Configuration configuration = dialog.getConfiguration(); - if (configuration.getName() == null || configuration.getName().equals(SearchDialog.USER_DEFINED)) { - String name = dialog.showSaveTemplateAsDialog(); - - if (name != null) { - name = ConfigurationManager.findAppropriateName(myConfigurations, name, dialog.getProject()); - } - if (name == null) return; - configuration.setName(name); + if (!ConfigurationManager.showSaveTemplateAsDialog(myConfigurations, dialog.getConfiguration(), dialog.getProject())) { + return; } - myConfigurations.add(configuration); configurationsChanged(dialog.getSearchContext()); } @@ -253,8 +245,7 @@ public class SSBasedInspectionOptions { } final Configuration newConfiguration = dialog.getConfiguration(); final int index = myConfigurations.indexOf(configuration); - myConfigurations.remove(index); - myConfigurations.add(index, newConfiguration); + myConfigurations.set(index, newConfiguration); final SearchContext context = dialog.getSearchContext(); SSBasedInspectionCompiledPatternsCache.removeFromCache(configuration, context.getProject()); configurationsChanged(context); diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java index 2161990d86fb..0003716c9b80 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java @@ -15,7 +15,6 @@ */ package com.intellij.structuralsearch.plugin.ui; -import com.intellij.icons.AllIcons; import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; @@ -43,11 +42,16 @@ public class ConfigurationManager implements PersistentStateComponent { private final List configurations = new SmartList<>(); private final List historyConfigurations = new SmartList<>(); + private final Project myProject; public static ConfigurationManager getInstance(@NotNull Project project) { return ServiceManager.getService(project, ConfigurationManager.class); } + public ConfigurationManager(Project project) { + myProject = project; + } + @Override public Element getState() { final Element state = new Element("state"); @@ -72,11 +76,6 @@ public class ConfigurationManager implements PersistentStateComponent { historyConfigurations.remove(configuration); } - public void addConfiguration(Configuration configuration) { - configurations.remove(configuration); - configurations.add(configuration); - } - public void removeConfiguration(Configuration configuration) { configurations.remove(configuration); } @@ -168,37 +167,46 @@ public class ConfigurationManager implements PersistentStateComponent { return Collections.unmodifiableList(historyConfigurations); } - @Nullable - public static String findAppropriateName(@NotNull final Collection configurations, @NotNull String _name, - @NotNull final Project project) { + public boolean showSaveTemplateAsDialog(@NotNull Configuration newConfiguration) { + return showSaveTemplateAsDialog(configurations, newConfiguration, myProject); + } + + public static boolean showSaveTemplateAsDialog(@NotNull Collection configurations, + @NotNull Configuration newConfiguration, + @NotNull Project project) { + String name = showInputDialog(newConfiguration.getName(), project); Configuration config; - String name = _name; - - while ((config = findConfigurationByName(configurations, name)) != null) { - final int i = Messages.showYesNoDialog( - project, - SSRBundle.message("overwrite.message"), - SSRBundle.message("overwrite.title"), - AllIcons.General.QuestionDialog - ); - - if (i == Messages.YES) { + while ((config = findConfigurationByName(configurations, name)) != null && name != null) { + final int answer = + Messages.showYesNoDialog( + project, + SSRBundle.message("overwrite.message"), + SSRBundle.message("overwrite.title", name), + "Replace", + Messages.CANCEL_BUTTON, + Messages.getQuestionIcon() + ); + if (answer == Messages.YES) { configurations.remove(config); break; } - name = showSaveTemplateAsDialog(name, project); - if (name == null) break; + name = showInputDialog(name, project); } - return name; + if (name != null) { + newConfiguration.setName(name); + configurations.add(newConfiguration); + return true; + } + return false; } @Nullable - public static String showSaveTemplateAsDialog(@NotNull String initial, @NotNull Project project) { + private static String showInputDialog(@NotNull String initial, @NotNull Project project) { return Messages.showInputDialog( project, SSRBundle.message("template.name.button"), SSRBundle.message("save.template.description.button"), - AllIcons.General.QuestionDialog, + Messages.getQuestionIcon(), initial, new NonEmptyInputValidator() ); diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchDialog.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchDialog.java index 1840bdfa9525..bc14ccf7dc48 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchDialog.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchDialog.java @@ -575,29 +575,16 @@ public class SearchDialog extends DialogWrapper { @Override public void actionPerformed(ActionEvent e) { - String name = showSaveTemplateAsDialog(); + final Project project = searchContext.getProject(); + final ConfigurationManager configurationManager = ConfigurationManager.getInstance(project); - if (name != null) { - final Project project = searchContext.getProject(); - final ConfigurationManager configurationManager = ConfigurationManager.getInstance(project); - final Collection configurations = configurationManager.getConfigurations(); - - if (configurations != null) { - name = ConfigurationManager.findAppropriateName(configurations, name, project); - if (name == null) return; - } - - final Configuration configuration = model.getConfig(); - model = new SearchModel(createConfiguration()); - model.setShadowConfig(configuration); - configuration.setName(name); - setValuesToConfig(configuration); - setDialogTitle(configuration); - - filterOutUnusedVariableConstraints(configuration); - configurationManager.addConfiguration(configuration); - existingTemplatesComponent.setUserTemplates(configurationManager); + final Configuration configuration = getConfiguration(); + if (!configurationManager.showSaveTemplateAsDialog(configuration)) { + return; } + setDialogTitle(configuration); + + existingTemplatesComponent.setUserTemplates(configurationManager); } }) ); @@ -688,13 +675,6 @@ public class SearchDialog extends DialogWrapper { return searchContext.getProject(); } - public String showSaveTemplateAsDialog() { - return ConfigurationManager.showSaveTemplateAsDialog( - model.getShadowConfig() != null ? model.getShadowConfig().getName() : SSRBundle.message("user.defined.category"), - searchContext.getProject() - ); - } - protected boolean isReplaceDialog() { return false; } @@ -759,8 +739,7 @@ public class SearchDialog extends DialogWrapper { final Configuration configuration = model.getConfig(); if (model.getShadowConfig() != null) { if (model.getShadowConfig().isPredefined()) { - configuration.setName(model.getShadowConfig().getName() - ); + configuration.setName(model.getShadowConfig().getName()); } //else { // // user template, save it // setValuesToConfig(model.getShadowConfig()); @@ -787,7 +766,13 @@ public class SearchDialog extends DialogWrapper { } public Configuration getConfiguration() { - return model.getConfig(); + final Configuration config = model.getConfig(); + if (config.getName().equals(USER_DEFINED) && model.getShadowConfig() != null) { + config.setName(model.getShadowConfig().getName()); + } + filterOutUnusedVariableConstraints(config); + setValuesToConfig(config); + return config; } private SearchScope getSelectedScope() { @@ -796,23 +781,20 @@ public class SearchDialog extends DialogWrapper { protected boolean isValid() { setValuesToConfig(model.getConfig()); - boolean result = true; - try { Matcher.validate(searchContext.getProject(), model.getConfig().getMatchOptions()); } catch (MalformedPatternException ex) { if (myRunFindActionOnClose) { reportMessage("this.pattern.is.malformed.message", searchCriteriaEdit, (ex.getMessage() != null) ? ex.getMessage() : ""); - result = false; + return false; } } catch (UnsupportedPatternException ex) { reportMessage("this.pattern.is.unsupported.message", searchCriteriaEdit, ex.getMessage()); - result = false; + return false; } - - return result; + return true; } protected void reportMessage(@NonNls final String messageId, final Editor editor, final Object... params) { @@ -826,7 +808,6 @@ public class SearchDialog extends DialogWrapper { } protected void setValuesToConfig(Configuration config) { - MatchOptions options = config.getMatchOptions(); boolean searchWithinHierarchy = IdeBundle.message("scope.class.hierarchy").equals(myScopeChooserCombo.getSelectedScopeName()); diff --git a/platform/structuralsearch/source/messages/SSRBundle.properties b/platform/structuralsearch/source/messages/SSRBundle.properties index f45cd625b85b..12ff00e2880c 100644 --- a/platform/structuralsearch/source/messages/SSRBundle.properties +++ b/platform/structuralsearch/source/messages/SSRBundle.properties @@ -229,8 +229,8 @@ SSRInspection.add.search.template.button=Add Search Template... SSRInspection.add.replace.template.button=Add Replace Template... SSRInspection.selected.templates=Selected templates: status.message=Status: -overwrite.message=Confirm overwrite configuration with the same name -overwrite.title=Confirm Overwrite Saved Configuration +overwrite.message=A template with the same name already exists. Replacing it will overwrite its current contents. +overwrite.title="{0}" Exists, Replace? ssr.will.not.find.anything=It does not match anything in selected scope predefined.configuration.class.static.blocks=static blocks in class predefined.configuration.class.instance.initialization.blocks=instance initialization blocks