SSR: new dialog text completion - insert constraints, not just text

and show language and template type
This commit is contained in:
Bas Leijdekkers
2018-09-03 17:09:21 +03:00
parent 35c60f3f1a
commit 4f6cf667bf
2 changed files with 18 additions and 10 deletions
@@ -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<Boolean> STRUCTURAL_SEARCH = Key.create("STRUCTURAL_SEARCH_AREA");
static final Key<StructuralSearchDialog> 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)
@@ -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);
}
}