mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-completion] IDEA-363369 Postfix completion for conversion
- fix highlighting - simplification GitOrigin-RevId: a6b33fdfc8af724993831fd750b548c061861ffe
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d0c4ea7fca
commit
a9d935a482
+7
-8
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaEditablePostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaPostfixTemplateExpressionCondition;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
@@ -8,21 +9,19 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class AsListToListPostfixTemplate extends JavaEditableTaggedPostfixTemplate implements DumbAware {
|
||||
public class AsListToListPostfixTemplate extends JavaEditablePostfixTemplate implements DumbAware {
|
||||
public AsListToListPostfixTemplate(@NotNull JavaPostfixTemplateProvider provider) {
|
||||
super("Arrays.asList(exp)",
|
||||
"asList",
|
||||
super("Arrays.asList",
|
||||
"toList",
|
||||
"java.util.Arrays.asList($EXPR$)$END$",
|
||||
"Arrays.asList($EXPR$)",
|
||||
"Arrays.asList(exp)",
|
||||
Collections.singleton(
|
||||
new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateArrayReferenceExpressionCondition()),
|
||||
LanguageLevel.JDK_1_3, false, new String[]{".toList"}, provider);
|
||||
LanguageLevel.JDK_1_3, false, provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public boolean isBuiltin() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
-113
@@ -1,113 +0,0 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionType;
|
||||
import com.intellij.codeInsight.completion.JavaContributorCollectors;
|
||||
import com.intellij.codeInsight.lookup.LookupElementPresentation;
|
||||
import com.intellij.codeInsight.template.impl.TemplateImpl;
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaEditablePostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaPostfixTemplateExpressionCondition;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static com.intellij.codeInsight.completion.JavaContributorCollectors.POSTFIX_TAG;
|
||||
|
||||
@SuppressWarnings("PostfixTemplateDescriptionNotFound")
|
||||
public class JavaEditableTaggedPostfixTemplate extends JavaEditablePostfixTemplate implements CustomizableLookupElementTemplate {
|
||||
|
||||
@SuppressWarnings("RegExpUnexpectedAnchor") private static final String EXPR_$ = "$EXPR$";
|
||||
|
||||
@Nullable
|
||||
private String myText;
|
||||
|
||||
@NotNull
|
||||
private final String myExample;
|
||||
|
||||
public @NotNull String @NotNull [] getTags() {
|
||||
return myTags;
|
||||
}
|
||||
|
||||
private final @NotNull String @NotNull [] myTags;
|
||||
|
||||
public JavaEditableTaggedPostfixTemplate(@NotNull String templateId,
|
||||
@NotNull String templateName,
|
||||
@NotNull String templateText,
|
||||
@NotNull String example,
|
||||
@NotNull Set<? extends JavaPostfixTemplateExpressionCondition> expressionConditions,
|
||||
@NotNull LanguageLevel minimumLanguageLevel,
|
||||
boolean useTopmostExpression,
|
||||
@NotNull String @NotNull [] tags,
|
||||
@NotNull PostfixTemplateProvider provider) {
|
||||
this(templateId, templateName, createTemplate(templateText), example, expressionConditions, minimumLanguageLevel, useTopmostExpression,
|
||||
tags, provider);
|
||||
}
|
||||
|
||||
public JavaEditableTaggedPostfixTemplate(@NotNull String templateId,
|
||||
@NotNull String templateName,
|
||||
@NotNull TemplateImpl liveTemplate,
|
||||
@NotNull String example,
|
||||
@NotNull Set<? extends JavaPostfixTemplateExpressionCondition> expressionConditions,
|
||||
@NotNull LanguageLevel minimumLanguageLevel,
|
||||
boolean useTopmostExpression,
|
||||
@NotNull String @NotNull [] tags,
|
||||
@NotNull PostfixTemplateProvider provider) {
|
||||
super(templateId, templateName, liveTemplate, example.replace(EXPR_$, "expr"), expressionConditions, minimumLanguageLevel,
|
||||
useTopmostExpression, provider);
|
||||
myTags = tags;
|
||||
myExample = example;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isApplicable(@NotNull PsiElement context, @NotNull Document copyDocument, int newOffset) {
|
||||
List<PsiElement> expressions = getExpressions(context, copyDocument, newOffset);
|
||||
if (expressions.size() != 1) return false;
|
||||
PsiElement element = expressions.get(0);
|
||||
myText = element.getText(); //not ideal, because the state is changed, but it needs for nice rendering
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderElement(@NotNull LookupElementPresentation presentation) {
|
||||
String exp = myText;
|
||||
String templateText = myExample;
|
||||
if (exp == null || templateText.length() + exp.length() >= 100 || !templateText.contains(EXPR_$)) {
|
||||
return;
|
||||
}
|
||||
String withExp = templateText.replace(EXPR_$, exp);
|
||||
if (withExp.contains("$")) {
|
||||
return;
|
||||
}
|
||||
ArrayList<String> allTags = new ArrayList<>(Arrays.asList(myTags));
|
||||
allTags.add(getKey());
|
||||
String message = JavaBundle.message("java.completion.tag", allTags.size());
|
||||
String withTags = withExp + " " + message + String.join(", ", allTags);
|
||||
presentation.setItemText(withTags);
|
||||
int startOffset = templateText.indexOf(EXPR_$);
|
||||
presentation.decorateItemTextRange(new TextRange(startOffset, startOffset + exp.length()),
|
||||
LookupElementPresentation.LookupItemDecoration.GRAY);
|
||||
startOffset = withExp.length();
|
||||
presentation.decorateItemTextRange(new TextRange(startOffset, startOffset + 1 + message.length()),
|
||||
LookupElementPresentation.LookupItemDecoration.GRAY);
|
||||
|
||||
presentation.setTypeText("");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getAllLookupStrings() {
|
||||
return Arrays.asList(myTags);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @NotNull TextRange getRangeToRemove(@NotNull PsiElement element) {
|
||||
JavaContributorCollectors.logInsertHandle(element.getProject(), POSTFIX_TAG, CompletionType.BASIC);
|
||||
return super.getRangeToRemove(element);
|
||||
}
|
||||
}
|
||||
+5
-5
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaEditablePostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaPostfixTemplateExpressionCondition;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
@@ -8,15 +9,14 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class JavaUtilDateToLocalDatePostfixTemplate extends JavaEditableTaggedPostfixTemplate implements DumbAware {
|
||||
public class JavaUtilDateToLocalDatePostfixTemplate extends JavaEditablePostfixTemplate implements DumbAware {
|
||||
public JavaUtilDateToLocalDatePostfixTemplate(@NotNull JavaPostfixTemplateProvider provider) {
|
||||
super("LocalDate.ofInstant(exp.toInstant(), zoneId) java.sql.Date.valueOf(exp)",
|
||||
"toLocalDate",
|
||||
super("toLocalDate",
|
||||
"java.time.LocalDate.ofInstant($EXPR$.toInstant(), $END$)",
|
||||
"LocalDate.ofInstant($EXPR$.toInstant(), zoneId)",
|
||||
"LocalDate.ofInstant(exp.toInstant(), zoneId)",
|
||||
Collections.singleton(
|
||||
new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateExpressionFqnCondition("java.util.Date")),
|
||||
LanguageLevel.JDK_1_8, false, new String[]{".asLocalDate"}, provider);
|
||||
LanguageLevel.JDK_1_8, false, provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+16
-5
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaEditablePostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaPostfixTemplateExpressionCondition;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
@@ -8,17 +9,27 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class ListOfToListPostfixTemplate extends JavaEditableTaggedPostfixTemplate implements DumbAware {
|
||||
public class ListOfToListPostfixTemplate extends JavaEditablePostfixTemplate implements DumbAware {
|
||||
public ListOfToListPostfixTemplate(@NotNull JavaPostfixTemplateProvider provider) {
|
||||
super("List.of(exp)",
|
||||
"listOf",
|
||||
super("List.of",
|
||||
"toList",
|
||||
"java.util.List.of($EXPR$)$END$",
|
||||
"List.of($EXPR$)",
|
||||
"List.of(exp)",
|
||||
Collections.singleton(
|
||||
new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateArrayReferenceExpressionCondition()),
|
||||
LanguageLevel.JDK_1_9, false, new String[]{".asList", ".toList"}, provider);
|
||||
LanguageLevel.JDK_1_9, false, provider);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// super("format",
|
||||
// "String.format($EXPR$, $END$)",
|
||||
// "String.format(expr)",
|
||||
// Collections.singleton(
|
||||
// new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateExpressionFqnCondition(CommonClassNames.JAVA_LANG_STRING)),
|
||||
// LanguageLevel.JDK_1_3, false, provider);
|
||||
//}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltin() {
|
||||
return true;
|
||||
|
||||
+5
-5
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaEditablePostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaPostfixTemplateExpressionCondition;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
@@ -8,15 +9,14 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class LocalDateToJavaSqlDatePostfixTemplate extends JavaEditableTaggedPostfixTemplate implements DumbAware {
|
||||
public class LocalDateToJavaSqlDatePostfixTemplate extends JavaEditablePostfixTemplate implements DumbAware {
|
||||
public LocalDateToJavaSqlDatePostfixTemplate(@NotNull JavaPostfixTemplateProvider provider) {
|
||||
super("java.sql.Date.valueOf(exp)",
|
||||
"sqlValueOf",
|
||||
super("toSqlDate",
|
||||
"java.sql.Date.valueOf($EXPR$)$END$",
|
||||
"java.sql.Date.valueOf($EXPR$)",
|
||||
"java.sql.Date.valueOf(exp)",
|
||||
Collections.singleton(
|
||||
new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateExpressionFqnCondition("java.time.LocalDate")),
|
||||
LanguageLevel.JDK_1_8, false, new String[]{".toSqlDate"}, provider);
|
||||
LanguageLevel.JDK_1_8, false, provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+5
-6
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaEditablePostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaPostfixTemplateExpressionCondition;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
@@ -8,21 +9,19 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class NewArrayListToListPostfixTemplate extends JavaEditableTaggedPostfixTemplate implements DumbAware {
|
||||
public class NewArrayListToListPostfixTemplate extends JavaEditablePostfixTemplate implements DumbAware {
|
||||
public NewArrayListToListPostfixTemplate(@NotNull JavaPostfixTemplateProvider provider) {
|
||||
super("new ArrayList<>(exp)",
|
||||
super("new ArrayList",
|
||||
"toList",
|
||||
"new java.util.ArrayList<>($EXPR$)$END$",
|
||||
"new ArrayList<>($EXPR$)",
|
||||
"new ArrayList<>(exp)" ,
|
||||
Collections.singleton(
|
||||
new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateExpressionFqnCondition("java.util.Collection")),
|
||||
LanguageLevel.JDK_1_7, false, new String[]{".asList"}, provider);
|
||||
LanguageLevel.JDK_1_7, false, provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltin() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+5
-7
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaEditablePostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.editable.JavaPostfixTemplateExpressionCondition;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
@@ -8,21 +9,18 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class NewHashSetToSetPostfixTemplate extends JavaEditableTaggedPostfixTemplate implements DumbAware {
|
||||
public class NewHashSetToSetPostfixTemplate extends JavaEditablePostfixTemplate implements DumbAware {
|
||||
public NewHashSetToSetPostfixTemplate(@NotNull JavaPostfixTemplateProvider provider) {
|
||||
super("new HashSet<>(exp)",
|
||||
"toSet",
|
||||
super("toSet",
|
||||
"new java.util.HashSet<>($EXPR$)$END$",
|
||||
"new HashSet<>($EXPR$)",
|
||||
"new HashSet<>(exp)",
|
||||
Collections.singleton(
|
||||
new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateExpressionFqnCondition("java.util.Collection")),
|
||||
LanguageLevel.JDK_1_7, false, new String[]{".asSet"}, provider);
|
||||
LanguageLevel.JDK_1_7, false, provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltin() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+5
@@ -1,6 +1,8 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.template.postfix.templates.editable;
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionType;
|
||||
import com.intellij.codeInsight.completion.JavaContributorCollectors;
|
||||
import com.intellij.codeInsight.template.impl.TemplateImpl;
|
||||
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplateProvider;
|
||||
import com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils;
|
||||
@@ -20,6 +22,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static com.intellij.codeInsight.completion.JavaContributorCollectors.POSTFIX_TAG;
|
||||
|
||||
@SuppressWarnings("PostfixTemplateDescriptionNotFound")
|
||||
public class JavaEditablePostfixTemplate
|
||||
extends EditablePostfixTemplateWithMultipleExpressions<JavaPostfixTemplateExpressionCondition> {
|
||||
@@ -101,6 +105,7 @@ public class JavaEditablePostfixTemplate
|
||||
|
||||
@Override
|
||||
protected @NotNull TextRange getRangeToRemove(@NotNull PsiElement element) {
|
||||
JavaContributorCollectors.logInsertHandle(element.getProject(), POSTFIX_TAG, CompletionType.BASIC);
|
||||
PsiElement toRemove = getElementToRemove(element);
|
||||
if (toRemove instanceof PsiExpressionStatement) {
|
||||
PsiElement lastChild = toRemove.getLastChild();
|
||||
|
||||
+4
-22
@@ -4,7 +4,6 @@ package com.intellij.codeInsight.template.postfix.templates.editable;
|
||||
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
|
||||
import com.intellij.codeInsight.template.Template;
|
||||
import com.intellij.codeInsight.template.postfix.settings.PostfixTemplateEditorBase;
|
||||
import com.intellij.codeInsight.template.postfix.templates.JavaEditableTaggedPostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplateProvider;
|
||||
import com.intellij.ide.util.TreeClassChooser;
|
||||
@@ -20,7 +19,6 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.ui.ComboBox;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.text.Strings;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.JavaCodeFragment;
|
||||
import com.intellij.psi.JavaCodeFragmentFactory;
|
||||
@@ -28,7 +26,6 @@ import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.ui.SimpleListCellRenderer;
|
||||
import com.intellij.ui.components.JBCheckBox;
|
||||
import com.intellij.ui.components.JBTextField;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.FormBuilder;
|
||||
@@ -37,7 +34,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -46,19 +42,17 @@ public class JavaPostfixTemplateEditor extends PostfixTemplateEditorBase<JavaPos
|
||||
private final @NotNull JPanel myPanel;
|
||||
private final @NotNull ComboBox<LanguageLevel> myLanguageLevelCombo;
|
||||
private final @NotNull JBCheckBox myStaticImportCheckBox;
|
||||
private final @NotNull JBTextField myTagsField;
|
||||
|
||||
public JavaPostfixTemplateEditor(@NotNull PostfixTemplateProvider provider) {
|
||||
super(provider, createEditor(), true);
|
||||
myStaticImportCheckBox = new JBCheckBox(JavaBundle.message("dialog.edit.template.checkbox.use.static.import"));
|
||||
myLanguageLevelCombo = new ComboBox<>(LanguageLevel.values());
|
||||
myLanguageLevelCombo.setRenderer(SimpleListCellRenderer.create("", LanguageLevel::getPresentableText));
|
||||
myTagsField = new JBTextField();
|
||||
|
||||
myPanel = FormBuilder.createFormBuilder()
|
||||
.addLabeledComponent(JavaBundle.message("postfix.template.language.level.title"), myLanguageLevelCombo)
|
||||
.addComponentFillVertically(myEditTemplateAndConditionsPanel, UIUtil.DEFAULT_VGAP)
|
||||
.addComponent(myStaticImportCheckBox)
|
||||
.addLabeledComponent("Tags: ", myTagsField)
|
||||
.getPanel();
|
||||
}
|
||||
|
||||
@@ -75,17 +69,9 @@ public class JavaPostfixTemplateEditor extends PostfixTemplateEditorBase<JavaPos
|
||||
String templateText = myTemplateEditor.getDocument().getText();
|
||||
boolean useTopmostExpression = myApplyToTheTopmostJBCheckBox.isSelected();
|
||||
boolean useStaticImport = myStaticImportCheckBox.isSelected();
|
||||
String tagText = myTagsField.getText();
|
||||
JavaEditablePostfixTemplate template;
|
||||
if (tagText != null && !tagText.isBlank()) {
|
||||
String[] tags = tagText.split("[,;]");
|
||||
template =
|
||||
new JavaEditableTaggedPostfixTemplate(templateId, templateName, templateText, "", conditions, languageLevel, useTopmostExpression, tags, myProvider);
|
||||
} else{
|
||||
template =
|
||||
new JavaEditablePostfixTemplate(templateId, templateName, templateText, "", conditions, languageLevel, useTopmostExpression,
|
||||
myProvider);
|
||||
}
|
||||
JavaEditablePostfixTemplate template =
|
||||
new JavaEditablePostfixTemplate(templateId, templateName, templateText, "", conditions, languageLevel, useTopmostExpression,
|
||||
myProvider);
|
||||
template.getLiveTemplate().setValue(Template.Property.USE_STATIC_IMPORT_IF_POSSIBLE, useStaticImport);
|
||||
return template;
|
||||
}
|
||||
@@ -113,7 +99,6 @@ public class JavaPostfixTemplateEditor extends PostfixTemplateEditorBase<JavaPos
|
||||
group.add(new AddConditionAction(new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateNumberExpressionCondition()));
|
||||
group.add(new AddConditionAction(new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateNotPrimitiveTypeExpressionCondition()));
|
||||
group.add(new AddConditionAction(new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateArrayExpressionCondition()));
|
||||
group.add(new AddConditionAction(new JavaPostfixTemplateExpressionCondition.JavaPostfixTemplateArrayReferenceExpressionCondition()));
|
||||
Project[] projects = ProjectManager.getInstance().getOpenProjects();
|
||||
for (Project project : projects) {
|
||||
group.add(new ChooseClassAction(project));
|
||||
@@ -127,9 +112,6 @@ public class JavaPostfixTemplateEditor extends PostfixTemplateEditorBase<JavaPos
|
||||
if (template instanceof JavaEditablePostfixTemplate javaTemplate) {
|
||||
myLanguageLevelCombo.setSelectedItem(javaTemplate.getMinimumLanguageLevel());
|
||||
myStaticImportCheckBox.setSelected(javaTemplate.getLiveTemplate().getValue(Template.Property.USE_STATIC_IMPORT_IF_POSSIBLE));
|
||||
if(template instanceof JavaEditableTaggedPostfixTemplate javaTaggedTemplate) {
|
||||
myTagsField.setText(Strings.join(Arrays.asList(javaTaggedTemplate.getTags()), ";"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
public class Foo {
|
||||
void m(Integer[] o) {
|
||||
o.asList<caret>
|
||||
}
|
||||
}
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
import java.util.Arrays;
|
||||
|
||||
public class Foo {
|
||||
void m(Integer[] o) {
|
||||
Arrays.asList(o)<caret>
|
||||
}
|
||||
}
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
public class Foo {
|
||||
void m(Integer[] o) {
|
||||
o.asList<caret>
|
||||
}
|
||||
}
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
import java.util.List;
|
||||
|
||||
public class Foo {
|
||||
void m(Integer[] o) {
|
||||
List.of(o)<caret>
|
||||
}
|
||||
}
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
import java.util.Set;
|
||||
|
||||
public class Foo {
|
||||
void m(Set<String> o) {
|
||||
o.asList<caret>
|
||||
}
|
||||
}
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.Set;
|
||||
|
||||
public class Foo {
|
||||
void m(Set<String> o) {
|
||||
new ArrayList<>(o)<caret>
|
||||
}
|
||||
}
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
import java.util.Set;
|
||||
|
||||
public class Foo {
|
||||
void m(Set<String> o) {
|
||||
o.asSet<caret>
|
||||
}
|
||||
}
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class Foo {
|
||||
void m(Set<String> o) {
|
||||
new HashSet<>(o)<caret>
|
||||
}
|
||||
}
|
||||
-3
@@ -21,8 +21,5 @@ public class AsListToListPostfixTemplateTest extends PostfixTemplateTestCase {
|
||||
doTestCompletion("asList");
|
||||
}
|
||||
|
||||
public void testSimpleAsList() {
|
||||
doTestCompletion("asList");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-5
@@ -18,11 +18,7 @@ public class ListOfToListPostfixTemplateTest extends PostfixTemplateTestCase {
|
||||
}
|
||||
|
||||
public void testSimple() {
|
||||
doTestCompletion("listOf");
|
||||
}
|
||||
|
||||
public void testSimpleAsList() {
|
||||
doTestCompletion("listOf");
|
||||
doTestCompletion("List.of");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-4
@@ -20,9 +20,5 @@ public class NewArrayListToListPostfixTemplateTest extends PostfixTemplateTestCa
|
||||
public void testSimple() {
|
||||
doTestCompletion(null);
|
||||
}
|
||||
|
||||
public void testSimpleAsList() {
|
||||
doTestCompletion(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-4
@@ -20,9 +20,5 @@ public class NewHashSetToSetPostfixTemplateTest extends PostfixTemplateTestCase
|
||||
public void testSimple() {
|
||||
doTestCompletion(null);
|
||||
}
|
||||
|
||||
public void testSimpleAsSet() {
|
||||
doTestCompletion(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-1
@@ -3,6 +3,7 @@ package com.intellij.java.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.JavaTestUtil;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementPresentation;
|
||||
import com.intellij.openapi.application.impl.NonBlockingReadActionImpl;
|
||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -34,7 +35,10 @@ abstract public class PostfixTemplateTestCase extends LightJavaCodeInsightFixtur
|
||||
LookupElement[] elements = myFixture.completeBasic();
|
||||
if (text != null) {
|
||||
for (LookupElement element : elements) {
|
||||
if(element.getLookupString().toLowerCase(Locale.ROOT).contains(text.toLowerCase(Locale.ROOT))) {
|
||||
LookupElementPresentation presentation = new LookupElementPresentation();
|
||||
element.renderElement(presentation);
|
||||
if (presentation.getItemText().toLowerCase(Locale.ROOT).contains(text.toLowerCase(Locale.ROOT)) ||
|
||||
presentation.getTypeText().toLowerCase(Locale.ROOT).contains(text.toLowerCase(Locale.ROOT))) {
|
||||
myFixture.getLookup().setCurrentItem(element);
|
||||
break;
|
||||
}
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.impl.LookupCellRenderer;
|
||||
import com.intellij.codeInsight.lookup.impl.LookupImpl;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
import static com.intellij.codeInsight.template.impl.LiveTemplateCompletionContributor.setShowTemplatesInTests;
|
||||
|
||||
public class RenderHighlightingTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
public void testSimple() {
|
||||
setShowTemplatesInTests(true, getTestRootDisposable());
|
||||
myFixture.configureByText("a.java", """
|
||||
import java.util.List;
|
||||
class A {
|
||||
void m(List<String> list) {
|
||||
list.toS<caret>
|
||||
}
|
||||
}""");
|
||||
LookupElement[] elements = myFixture.completeBasic();
|
||||
ReadAction.run(() -> {
|
||||
JList<LookupElement> list = getLookup().getList();
|
||||
for (LookupElement item : getLookup().getItems()) {
|
||||
if (!item.getLookupString().equals(".toSet")) continue;
|
||||
if (list.getCellRenderer() instanceof LookupCellRenderer lookupCellRenderer) {
|
||||
Component component = list.getCellRenderer().getListCellRendererComponent(list, item, 0, false, false);
|
||||
System.out.println(component);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private LookupImpl getLookup() {
|
||||
return (LookupImpl)myFixture.getLookup();
|
||||
}
|
||||
}
|
||||
@@ -5624,7 +5624,6 @@ c:com.intellij.codeInsight.template.postfix.completion.PostfixTemplateLookupElem
|
||||
- com.intellij.codeInsight.template.impl.CustomLiveTemplateLookupElement
|
||||
- <init>(com.intellij.codeInsight.template.postfix.templates.PostfixLiveTemplate,com.intellij.codeInsight.template.postfix.templates.PostfixTemplate,java.lang.String,com.intellij.codeInsight.template.postfix.templates.PostfixTemplateProvider,Z):V
|
||||
- expandTemplate(com.intellij.openapi.editor.Editor,com.intellij.psi.PsiFile):V
|
||||
- getAllLookupStrings():java.util.Set
|
||||
- getPostfixTemplate():com.intellij.codeInsight.template.postfix.templates.PostfixTemplate
|
||||
- getProvider():com.intellij.codeInsight.template.postfix.templates.PostfixTemplateProvider
|
||||
- renderElement(com.intellij.codeInsight.lookup.LookupElementPresentation):V
|
||||
|
||||
@@ -425,8 +425,16 @@ class LookupCellRenderer(lookup: LookupImpl, editorComponent: JComponent) : List
|
||||
|
||||
val prefix = if (item is EmptyLookupItem) "" else lookup.itemPattern(item)
|
||||
if (prefix.isNotEmpty()) {
|
||||
val ranges = getMatchingFragments(prefix, name)
|
||||
if (ranges != null) {
|
||||
var ranges: List<TextRange>? = getMatchingFragments(prefix, name)
|
||||
if (ranges == null) {
|
||||
val startIndex = item.lookupString.indexOf(name)
|
||||
if (startIndex != -1) {
|
||||
ranges = getMatchingFragments(prefix, item.lookupString)
|
||||
?.map { TextRange((it.startOffset - startIndex).coerceIn(0, name.length), (it.endOffset - startIndex).coerceIn(0, name.length)) }
|
||||
?.filter { it.length != 0 }
|
||||
}
|
||||
}
|
||||
if (ranges != null && ranges.isNotEmpty()) {
|
||||
val highlighted = SimpleTextAttributes(style, MATCHED_FOREGROUND_COLOR)
|
||||
SpeedSearchUtil.appendColoredFragments(nameComponent, name, ranges, base, highlighted)
|
||||
renderItemNameDecoration(nameComponent, itemNameDecorations)
|
||||
|
||||
-17
@@ -4,7 +4,6 @@ package com.intellij.codeInsight.template.postfix.completion;
|
||||
import com.intellij.codeInsight.lookup.LookupElementPresentation;
|
||||
import com.intellij.codeInsight.template.CustomTemplateCallback;
|
||||
import com.intellij.codeInsight.template.impl.CustomLiveTemplateLookupElement;
|
||||
import com.intellij.codeInsight.template.postfix.templates.CustomizableLookupElementTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.PostfixLiveTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplate;
|
||||
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplateProvider;
|
||||
@@ -13,9 +12,6 @@ import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class PostfixTemplateLookupElement extends CustomLiveTemplateLookupElement {
|
||||
private final @NotNull PostfixTemplate myTemplate;
|
||||
private final @NotNull String myTemplateKey;
|
||||
@@ -41,24 +37,11 @@ public class PostfixTemplateLookupElement extends CustomLiveTemplateLookupElemen
|
||||
return myProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getAllLookupStrings() {
|
||||
Set<String> allLookupStrings = super.getAllLookupStrings();
|
||||
if (myTemplate instanceof CustomizableLookupElementTemplate customizableRenderPresentation) {
|
||||
allLookupStrings = new HashSet<>(allLookupStrings);
|
||||
allLookupStrings.addAll(customizableRenderPresentation.getAllLookupStrings());
|
||||
}
|
||||
return allLookupStrings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderElement(@NotNull LookupElementPresentation presentation) {
|
||||
super.renderElement(presentation);
|
||||
presentation.setTypeText(myTemplate.getExample());
|
||||
presentation.setTypeGrayed(true);
|
||||
if (myTemplate instanceof CustomizableLookupElementTemplate customizableRenderPresentation) {
|
||||
customizableRenderPresentation.renderElement(presentation);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.template.postfix.templates;
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElementPresentation;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
@ApiStatus.Internal
|
||||
@ApiStatus.Experimental
|
||||
public interface CustomizableLookupElementTemplate {
|
||||
void renderElement(@NotNull LookupElementPresentation presentation);
|
||||
|
||||
Collection<String> getAllLookupStrings();
|
||||
}
|
||||
Reference in New Issue
Block a user