mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
SSR: improve "template save as" api
This commit is contained in:
+4
-13
@@ -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);
|
||||
|
||||
+33
-25
@@ -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<Element> {
|
||||
|
||||
private final List<Configuration> configurations = new SmartList<>();
|
||||
private final List<Configuration> 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<Element> {
|
||||
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<Element> {
|
||||
return Collections.unmodifiableList(historyConfigurations);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String findAppropriateName(@NotNull final Collection<Configuration> 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<Configuration> 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()
|
||||
);
|
||||
|
||||
+19
-38
@@ -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<Configuration> 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());
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user