From 4f6cf667bf7a4632e7ea00c89bf0abbccd0d6fec Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 3 Sep 2018 12:39:10 +0300 Subject: [PATCH] SSR: new dialog text completion - insert constraints, not just text and show language and template type --- .../plugin/ui/StructuralSearchDialog.java | 8 ++++---- ...lSearchTemplatesCompletionContributor.java | 20 +++++++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchDialog.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchDialog.java index 2a6d2e92eefc..9d3eaba3d24c 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchDialog.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchDialog.java @@ -83,7 +83,7 @@ public class StructuralSearchDialog extends DialogWrapper { @NonNls private static final String REFORMAT_STATE = "structural.search.reformat"; @NonNls private static final String USE_STATIC_IMPORT_STATE = "structural.search.use.static.import"; - static final Key STRUCTURAL_SEARCH = Key.create("STRUCTURAL_SEARCH_AREA"); + static final Key STRUCTURAL_SEARCH = Key.create("STRUCTURAL_SEARCH_AREA"); public static final String USER_DEFINED = SSRBundle.message("new.template.defaultname"); private final SearchContext mySearchContext; @@ -178,7 +178,7 @@ public class StructuralSearchDialog extends DialogWrapper { myUseLastConfiguration = useLastConfiguration; } - void setSearchPattern(final Configuration config) { + void setSearchPattern(Configuration config) { loadConfiguration(config); initiateValidation(); } @@ -208,7 +208,7 @@ public class StructuralSearchDialog extends DialogWrapper { DaemonCodeAnalyzer.getInstance(project).setHighlightingEnabled(file, false); } TextCompletionUtil.installCompletionHint(editor); - editor.putUserData(STRUCTURAL_SEARCH, true); + editor.putUserData(STRUCTURAL_SEARCH, StructuralSearchDialog.this); editor.setEmbeddedIntoDialogWrapper(true); return editor; } @@ -401,7 +401,7 @@ public class StructuralSearchDialog extends DialogWrapper { .addGap(2) .addComponent(myReplacePanel) .addComponent(myScopePanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) - .addGap(2) + .addGap(16) .addGroup(layout.createParallelGroup() .addComponent(searchTargetLabel) .addComponent(myTargetComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchTemplatesCompletionContributor.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchTemplatesCompletionContributor.java index 718e582dc669..1cfb37ea85e8 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchTemplatesCompletionContributor.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/StructuralSearchTemplatesCompletionContributor.java @@ -4,26 +4,34 @@ package com.intellij.structuralsearch.plugin.ui; import com.intellij.codeInsight.completion.CompletionContributor; import com.intellij.codeInsight.completion.CompletionParameters; import com.intellij.codeInsight.completion.CompletionResultSet; +import com.intellij.codeInsight.completion.InsertionContext; import com.intellij.codeInsight.completion.impl.CamelHumpMatcher; +import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementBuilder; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.structuralsearch.MatchOptions; import com.intellij.ui.TextFieldWithAutoCompletionListProvider; import org.jetbrains.annotations.NotNull; public class StructuralSearchTemplatesCompletionContributor extends CompletionContributor { @Override public void fillCompletionVariants(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) { - if (parameters.getEditor().getUserData(StructuralSearchDialog.STRUCTURAL_SEARCH) == null) return; + final StructuralSearchDialog dialog = parameters.getEditor().getUserData(StructuralSearchDialog.STRUCTURAL_SEARCH); + if (dialog == null) return; String prefix = TextFieldWithAutoCompletionListProvider.getCompletionPrefix(parameters); CompletionResultSet insensitive = result.withPrefixMatcher(new CamelHumpMatcher(prefix)); ConfigurationManager configurationManager = ConfigurationManager.getInstance(parameters.getPosition().getProject()); for (String configurationName: configurationManager.getAllConfigurationNames()) { Configuration configuration = configurationManager.findConfigurationByName(configurationName); if (configuration == null) continue; - LookupElementBuilder element = LookupElementBuilder.create(configuration, configuration.getMatchOptions().getSearchPattern()) - .withLookupString(configurationName) - .withTailText(" (search template)", true) - .withCaseSensitivity(false) - .withPresentableText(configurationName); + final MatchOptions matchOptions = configuration.getMatchOptions(); + LookupElementBuilder element = LookupElementBuilder.create(configuration, matchOptions.getSearchPattern()) + .withLookupString(configurationName) + .withTailText(" (" + StringUtil.toLowerCase(matchOptions.getFileType().getName()) + + (configuration instanceof SearchConfiguration ? " search" : " replace") + " template)", true) + .withCaseSensitivity(false) + .withPresentableText(configurationName) + .withInsertHandler((InsertionContext context, LookupElement item) -> dialog.setSearchPattern((Configuration)item.getObject())); insensitive.addElement(element); } }