mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
live templates: augment ConstantNode with lookup items, use that instead of many custom implementations
GitOrigin-RevId: ec5c04ff1807bbaa26f8868eda056803a1cf773f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c7bed766b3
commit
a4fbe03166
@@ -7,6 +7,7 @@ import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
|
||||
import com.intellij.codeInsight.lookup.ExpressionLookupItem;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -82,25 +83,7 @@ public class AddVariableInitializerFix implements IntentionAction {
|
||||
PsiElement context = initializers.size() == 1 ? initializer : PsiTreeUtil.findCommonParent(initializers);
|
||||
final TemplateBuilderImpl builder = (TemplateBuilderImpl)TemplateBuilderFactory.getInstance().createTemplateBuilder(context);
|
||||
for (PsiExpression e : initializers) {
|
||||
builder.replaceElement(e, new Expression() {
|
||||
@NotNull
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context1) {
|
||||
return calculateQuickResult(context1);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context1) {
|
||||
return new PsiElementResult(suggestedInitializers[0].getPsiElement());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context1) {
|
||||
return suggestedInitializers;
|
||||
}
|
||||
});
|
||||
builder.replaceElement(e, new ConstantNode(new PsiElementResult(suggestedInitializers[0].getPsiElement())).withLookupItems(suggestedInitializers));
|
||||
}
|
||||
builder.run(editor, false);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.codeInsight.template.impl.TemplateState;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -453,30 +454,9 @@ public class CreateLocalVarFromInstanceofAction extends BaseIntentionAction {
|
||||
template.setToReformat(true);
|
||||
|
||||
final SuggestedNameInfo suggestedNameInfo = IntroduceVariableBase.getSuggestedName(type, initializer, initializer);
|
||||
|
||||
Set<LookupElement> itemSet = new LinkedHashSet<>();
|
||||
for (String name : suggestedNameInfo.names) {
|
||||
itemSet.add(LookupElementBuilder.create(name));
|
||||
}
|
||||
final LookupElement[] lookupItems = itemSet.toArray(LookupElement.EMPTY_ARRAY);
|
||||
final Result result = suggestedNameInfo.names.length == 0 ? null : new TextResult(suggestedNameInfo.names[0]);
|
||||
|
||||
Expression expr = new Expression() {
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
return lookupItems.length > 1 ? lookupItems : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return result;
|
||||
}
|
||||
};
|
||||
Expression expr = new ConstantNode(result).withLookupStrings(suggestedNameInfo.names.length > 1 ? suggestedNameInfo.names : ArrayUtil.EMPTY_STRING_ARRAY);
|
||||
template.addVariable("", expr, expr, true);
|
||||
|
||||
return template;
|
||||
|
||||
@@ -3,13 +3,15 @@ package com.intellij.codeInsight.daemon.quickFix;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightUtil;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.EmptyExpression;
|
||||
import com.intellij.codeInsight.generation.ClassMember;
|
||||
import com.intellij.codeInsight.generation.GenerateFieldOrPropertyHandler;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.codeInsight.generation.GenerationInfo;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.Expression;
|
||||
import com.intellij.codeInsight.template.TemplateBuilderImpl;
|
||||
import com.intellij.codeInsight.template.TemplateManager;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.codeInspection.LocalQuickFix;
|
||||
import com.intellij.codeInspection.ProblemDescriptor;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
@@ -98,12 +100,7 @@ public class CreateFieldOrPropertyFix implements IntentionAction, LocalQuickFix
|
||||
if (prototypes.isEmpty()) return;
|
||||
final PsiElement scope = prototypes.get(0).getPsiMember().getContext();
|
||||
assert scope != null;
|
||||
final Expression expression = new EmptyExpression() {
|
||||
@Override
|
||||
public Result calculateResult(final ExpressionContext context) {
|
||||
return new TextResult(myType.getCanonicalText());
|
||||
}
|
||||
};
|
||||
Expression expression = new ConstantNode(myType.getCanonicalText());
|
||||
final TemplateBuilderImpl builder = new TemplateBuilderImpl(scope);
|
||||
boolean first = true;
|
||||
@NonNls final String TYPE_NAME_VAR = "TYPE_NAME_VAR";
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.intellij.codeInsight.guess.GuessManager;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.PsiTypeLookupItem;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.RangeMarker;
|
||||
import com.intellij.openapi.editor.ScrollType;
|
||||
@@ -30,6 +31,7 @@ import com.intellij.refactoring.introduceField.ElementToWorkOn;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -74,26 +76,10 @@ public class JavaWithCastSurrounder extends JavaExpressionSurrounder {
|
||||
for (PsiType type : suggestedTypes) {
|
||||
itemSet.add(PsiTypeLookupItem.createLookupItem(type, null));
|
||||
}
|
||||
final LookupElement[] lookupItems = itemSet.toArray(LookupElement.EMPTY_ARRAY);
|
||||
|
||||
final Result result = suggestedTypes.length > 0 ? new PsiTypeResult(suggestedTypes[0], project) : null;
|
||||
|
||||
Expression expr = new Expression() {
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
return lookupItems.length > 1 ? lookupItems : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
Expression expr = new ConstantNode(result).withLookupItems(itemSet.size() > 1 ? itemSet : Collections.emptySet());
|
||||
template.addTextSegment("((");
|
||||
template.addVariable(TYPE_TEMPLATE_VARIABLE, expr, expr, true);
|
||||
template.addTextSegment(")" + exprText + ")");
|
||||
|
||||
@@ -4,9 +4,11 @@ package com.intellij.codeInsight.intention.impl;
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.codeInsight.CodeInsightUtilCore;
|
||||
import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.TemplateBuilder;
|
||||
import com.intellij.codeInsight.template.TemplateBuilderFactory;
|
||||
import com.intellij.codeInsight.template.TextResult;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.lang.surroundWith.SurroundDescriptor;
|
||||
import com.intellij.lang.surroundWith.Surrounder;
|
||||
@@ -27,6 +29,7 @@ import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.siyeh.ig.psiutils.CommentTracker;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -242,7 +245,7 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
|
||||
.filter(SurroundAutoCloseableAction::rightType)
|
||||
.toArray(PsiType[]::new);
|
||||
TemplateBuilder builder = TemplateBuilderFactory.getInstance().createTemplateBuilder(var);
|
||||
builder.replaceElement(id, new NamesExpression(names));
|
||||
builder.replaceElement(id, new ConstantNode(names[0]).withLookupStrings(names));
|
||||
builder.replaceElement(var.getTypeElement(), new TypeExpression(project, types));
|
||||
builder.run(editor, true);
|
||||
}
|
||||
@@ -261,29 +264,6 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
|
||||
return getFamilyName();
|
||||
}
|
||||
|
||||
private static class NamesExpression extends Expression {
|
||||
private final String[] myNames;
|
||||
|
||||
NamesExpression(String[] names) {
|
||||
myNames = names;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return calculateQuickResult(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return new TextResult(myNames[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
return Stream.of(myNames).map(LookupElementBuilder::create).toArray(LookupElement[]::new);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Template implements SurroundDescriptor, Surrounder {
|
||||
private final Surrounder[] mySurrounders = {this};
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.intellij.codeInsight.guess.GuessManager;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.PsiTypeLookupItem;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.codeInsight.template.impl.MacroCallNode;
|
||||
import com.intellij.codeInsight.template.macro.SuggestVariableNameMacro;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -15,6 +16,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -58,25 +60,9 @@ public class CastVarPostfixTemplate extends StringBasedPostfixTemplate {
|
||||
for (PsiType type : suggestedTypes) {
|
||||
itemSet.add(PsiTypeLookupItem.createLookupItem(type, null));
|
||||
}
|
||||
final LookupElement[] lookupItems = itemSet.toArray(LookupElement.EMPTY_ARRAY);
|
||||
final Result result = suggestedTypes.length > 0 ? new PsiTypeResult(suggestedTypes[0], context.getProject()) : null;
|
||||
|
||||
Expression expr = new Expression() {
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
return lookupItems.length > 1 ? lookupItems : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
Expression expr = new ConstantNode(result).withLookupItems(itemSet.size() > 1 ? itemSet : Collections.emptyList());
|
||||
|
||||
template.addVariable(TYPE_VAR, expr, expr, true);
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.guess.GuessManager;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.PsiTypeLookupItem;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -31,6 +32,7 @@ import com.intellij.refactoring.introduceField.ElementToWorkOn;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -92,25 +94,9 @@ public class InstanceofExpressionPostfixTemplate extends PostfixTemplate {
|
||||
for (PsiType type : suggestedTypes) {
|
||||
itemSet.add(PsiTypeLookupItem.createLookupItem(type, null));
|
||||
}
|
||||
final LookupElement[] lookupItems = itemSet.toArray(LookupElement.EMPTY_ARRAY);
|
||||
final Result result = suggestedTypes.length > 0 ? new PsiTypeResult(suggestedTypes[0], project) : null;
|
||||
|
||||
Expression expr = new Expression() {
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
return lookupItems.length > 1 ? lookupItems : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
Expression expr = new ConstantNode(result).withLookupItems(itemSet.size() > 1 ? itemSet : Collections.emptySet());
|
||||
|
||||
template.addTextSegment(exprText);
|
||||
template.addTextSegment(" instanceof ");
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
package com.intellij.refactoring.introduceVariable;
|
||||
|
||||
import com.intellij.codeInsight.completion.JavaCompletionUtil;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.Template;
|
||||
import com.intellij.codeInsight.template.TemplateBuilderImpl;
|
||||
import com.intellij.codeInsight.template.TemplateManager;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -37,7 +37,6 @@ import com.intellij.refactoring.util.CommonRefactoringUtil;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class IntroduceEmptyVariableHandler {
|
||||
private static final String VARIABLE_NAME = "IntroducedVariable";
|
||||
@@ -86,7 +85,8 @@ public class IntroduceEmptyVariableHandler {
|
||||
|
||||
TemplateBuilderImpl templateBuilder = new TemplateBuilderImpl(context);
|
||||
templateBuilder.replaceElement(typeElement, TYPE_NAME, new ConstantNode(typeElement.getText()), true, true);
|
||||
templateBuilder.replaceElement(localVariable.getNameIdentifier(), VARIABLE_NAME, new MyExpression(suggestedNameInfo), true);
|
||||
templateBuilder.replaceElement(localVariable.getNameIdentifier(), VARIABLE_NAME,
|
||||
new ConstantNode(suggestedNameInfo.names[0]).withLookupStrings(suggestedNameInfo.names), true);
|
||||
templateBuilder.replaceElement(variableReference, VARIABLE_NAME, (String)null, false);
|
||||
templateBuilder.replaceElement(ObjectUtils.assertNotNull(localVariable.getInitializer()), "");
|
||||
templateBuilder.setEndVariableAfter(variableReference);
|
||||
@@ -105,34 +105,4 @@ public class IntroduceEmptyVariableHandler {
|
||||
return codeStyleManager.suggestUniqueVariableName(delegate, at, true);
|
||||
}
|
||||
|
||||
private static class MyExpression extends Expression {
|
||||
private final SuggestedNameInfo myNameInfo;
|
||||
|
||||
private MyExpression(SuggestedNameInfo info) {
|
||||
myNameInfo = info;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return new TextResult(myNameInfo.names[0]);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return calculateResult(context);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
LookupElement[] elements = new LookupElement[myNameInfo.names.length];
|
||||
for (int i = 0; i < myNameInfo.names.length; i++) {
|
||||
String name = myNameInfo.names[i];
|
||||
elements[i] = LookupElementBuilder.create(name);
|
||||
}
|
||||
return elements;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,16 +17,48 @@
|
||||
package com.intellij.codeInsight.template.impl;
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.template.Expression;
|
||||
import com.intellij.codeInsight.template.ExpressionContext;
|
||||
import com.intellij.codeInsight.template.Result;
|
||||
import com.intellij.codeInsight.template.TextResult;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class ConstantNode extends Expression {
|
||||
import java.util.Collection;
|
||||
|
||||
public final class ConstantNode extends Expression {
|
||||
private final Result myValue;
|
||||
private final LookupElement[] myLookupElements;
|
||||
|
||||
public ConstantNode(String value) {
|
||||
myValue = new TextResult(value);
|
||||
public ConstantNode(@NotNull String value) {
|
||||
this(new TextResult(value));
|
||||
}
|
||||
|
||||
public ConstantNode(@Nullable Result value) {
|
||||
this(value, LookupElement.EMPTY_ARRAY);
|
||||
}
|
||||
|
||||
private ConstantNode(@Nullable Result value, @NotNull LookupElement... lookupElements) {
|
||||
myValue = value;
|
||||
myLookupElements = lookupElements;
|
||||
}
|
||||
|
||||
public ConstantNode withLookupItems(@NotNull LookupElement... lookupElements) {
|
||||
return new ConstantNode(myValue, lookupElements);
|
||||
}
|
||||
|
||||
public ConstantNode withLookupItems(@NotNull Collection<? extends LookupElement> lookupElements) {
|
||||
return new ConstantNode(myValue, lookupElements.toArray(LookupElement.EMPTY_ARRAY));
|
||||
}
|
||||
|
||||
public ConstantNode withLookupStrings(@NotNull String... lookupElements) {
|
||||
return new ConstantNode(myValue, ContainerUtil.map2Array(lookupElements, LookupElement.class, LookupElementBuilder::create));
|
||||
}
|
||||
|
||||
public ConstantNode withLookupStrings(@NotNull Collection<? extends String> lookupElements) {
|
||||
return new ConstantNode(myValue, ContainerUtil.map2Array(lookupElements, LookupElement.class, LookupElementBuilder::create));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -46,7 +78,7 @@ public class ConstantNode extends Expression {
|
||||
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
return LookupElement.EMPTY_ARRAY;
|
||||
return myLookupElements;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ package com.intellij.structuralsearch;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.structuralsearch.impl.matcher.MatcherImplUtil;
|
||||
import com.intellij.structuralsearch.impl.matcher.PatternTreeContext;
|
||||
@@ -75,39 +76,12 @@ public class StructuralSearchTemplateBuilder {
|
||||
if (element == null) {
|
||||
return;
|
||||
}
|
||||
myBuilder.replaceRange(element.getTextRange().shiftLeft(myShift), new MyExpression(count.getPlaceholder(), element, preferOriginal));
|
||||
}
|
||||
|
||||
private static class MyExpression extends Expression {
|
||||
|
||||
private final String myPlaceholder;
|
||||
private final String myOriginalText;
|
||||
private final boolean myPreferOriginal;
|
||||
|
||||
MyExpression(String placeholder, PsiElement original, boolean preferOriginal) {
|
||||
myPlaceholder = placeholder;
|
||||
myOriginalText = original.getText();
|
||||
myPreferOriginal = preferOriginal;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return new TextResult(myPreferOriginal ? myOriginalText : myPlaceholder);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return calculateResult(context);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
LookupElement[] elements = {LookupElementBuilder.create(myPlaceholder), LookupElementBuilder.create(myOriginalText)};
|
||||
return myPreferOriginal ? ArrayUtil.reverseArray(elements) : elements;
|
||||
}
|
||||
String placeholder = count.getPlaceholder();
|
||||
String originalText = element.getText();
|
||||
LookupElement[] elements = {LookupElementBuilder.create(placeholder), LookupElementBuilder.create(originalText)};
|
||||
myBuilder.replaceRange(element.getTextRange().shiftLeft(myShift),
|
||||
new ConstantNode(preferOriginal ? originalText : placeholder)
|
||||
.withLookupItems(preferOriginal ? ArrayUtil.reverseArray(elements) : elements));
|
||||
}
|
||||
|
||||
private static class PlaceholderCount {
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.editorconfig.language.codeinsight.completion.templates
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
||||
import com.intellij.codeInsight.template.Expression
|
||||
import com.intellij.codeInsight.template.ExpressionContext
|
||||
import com.intellij.codeInsight.template.Result
|
||||
|
||||
class EditorConfigTemplateConstantExpression(source: Iterable<String>) : Expression() {
|
||||
private val elements = source.map(LookupElementBuilder::create).toTypedArray()
|
||||
override fun calculateResult(context: ExpressionContext): Result? = null
|
||||
override fun calculateQuickResult(context: ExpressionContext): Result? = null
|
||||
override fun calculateLookupItems(context: ExpressionContext) = elements
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.editorconfig.language.codeinsight.completion.templates
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
||||
import com.intellij.codeInsight.template.TextResult
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode
|
||||
import com.intellij.codeInsight.template.impl.MacroCallNode
|
||||
import com.intellij.codeInsight.template.impl.TemplateImpl
|
||||
import com.intellij.codeInsight.template.impl.Variable
|
||||
@@ -60,7 +63,7 @@ class EditorConfigTemplateLineBuildAssistant(
|
||||
template.addVariable(
|
||||
EditorConfigTemplateUtil.uniqueId,
|
||||
MacroCallNode(CompleteMacro()),
|
||||
EditorConfigTemplateSingletonExpression("value"),
|
||||
ConstantNode("value").withLookupStrings("value"),
|
||||
true
|
||||
)
|
||||
}
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
package org.editorconfig.language.codeinsight.completion.templates
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.EmptyExpression
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
||||
import com.intellij.codeInsight.template.TextResult
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode
|
||||
import com.intellij.codeInsight.template.impl.TemplateImpl
|
||||
import com.intellij.codeInsight.template.impl.Variable
|
||||
import org.editorconfig.language.util.EditorConfigTemplateUtil.uniqueId
|
||||
@@ -40,7 +43,7 @@ class EditorConfigTemplateSegmentBuildAssistant(
|
||||
if (nextTokens.isEmpty()) {
|
||||
val variableId = variableId ?: return null
|
||||
val expression = EmptyExpression()
|
||||
val placeholder = EditorConfigTemplateSingletonExpression(variableId)
|
||||
val placeholder = ConstantNode(variableId).withLookupStrings(variableId)
|
||||
return template.addVariable(uniqueId, expression, placeholder, true)
|
||||
}
|
||||
|
||||
@@ -51,9 +54,9 @@ class EditorConfigTemplateSegmentBuildAssistant(
|
||||
return null
|
||||
}
|
||||
|
||||
val expression = EditorConfigTemplateConstantExpression(distinctTokes)
|
||||
val expression = ConstantNode(null).withLookupStrings(distinctTokes)
|
||||
val placeholderText = variableId ?: distinctTokes.first()
|
||||
val placeholder = EditorConfigTemplateSingletonExpression(placeholderText)
|
||||
val placeholder = ConstantNode(placeholderText).withLookupStrings(placeholderText)
|
||||
return template.addVariable(variableId ?: uniqueId, expression, placeholder, true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.editorconfig.language.codeinsight.completion.templates
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
||||
import com.intellij.codeInsight.template.Expression
|
||||
import com.intellij.codeInsight.template.ExpressionContext
|
||||
import com.intellij.codeInsight.template.TextResult
|
||||
|
||||
class EditorConfigTemplateSingletonExpression(private val source: String) : Expression() {
|
||||
override fun calculateResult(context: ExpressionContext) = TextResult(source)
|
||||
override fun calculateQuickResult(context: ExpressionContext) = TextResult(source)
|
||||
override fun calculateLookupItems(context: ExpressionContext) = arrayOf(LookupElementBuilder.create(source))
|
||||
}
|
||||
@@ -4,8 +4,8 @@ package com.jetbrains.python.codeInsight.intentions;
|
||||
import com.intellij.codeInsight.CodeInsightUtilCore;
|
||||
import com.intellij.codeInsight.controlflow.ControlFlow;
|
||||
import com.intellij.codeInsight.controlflow.Instruction;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -104,7 +104,7 @@ public class PyConvertLambdaToFunctionIntention extends PyBaseIntentionAction {
|
||||
functionName = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(functionName);
|
||||
lambdaExpression = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(lambdaExpression);
|
||||
|
||||
ReferenceNameExpression refExpr = new ReferenceNameExpression(name);
|
||||
Expression refExpr = new ConstantNode(name);
|
||||
|
||||
((TemplateBuilderImpl)builder).replaceElement(lambdaExpression, name, refExpr, true);
|
||||
((TemplateBuilderImpl)builder).replaceElement(functionName, name, name, false);
|
||||
@@ -118,26 +118,4 @@ public class PyConvertLambdaToFunctionIntention extends PyBaseIntentionAction {
|
||||
}
|
||||
}
|
||||
}
|
||||
private static class ReferenceNameExpression extends Expression {
|
||||
ReferenceNameExpression(String oldReferenceName) {
|
||||
myOldReferenceName = oldReferenceName;
|
||||
}
|
||||
|
||||
private final String myOldReferenceName;
|
||||
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return new TextResult(myOldReferenceName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,9 +18,10 @@ package com.intellij.codeInsight.daemon.impl.analysis;
|
||||
import com.intellij.codeInsight.daemon.XmlErrorMessages;
|
||||
import com.intellij.codeInsight.editorActions.XmlEditUtil;
|
||||
import com.intellij.codeInsight.intention.HighPriorityAction;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.Expression;
|
||||
import com.intellij.codeInsight.template.Template;
|
||||
import com.intellij.codeInsight.template.TemplateManager;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -114,29 +115,7 @@ public class InsertRequiredAttributeFix extends LocalQuickFixAndIntentionActionO
|
||||
}
|
||||
}
|
||||
|
||||
Expression expression = new Expression() {
|
||||
final TextResult result = new TextResult("");
|
||||
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LookupElement[] calculateLookupItems(ExpressionContext context) {
|
||||
final LookupElement[] items = new LookupElement[myValues.length];
|
||||
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
items[i] = LookupElementBuilder.create(myValues[i]);
|
||||
}
|
||||
return items;
|
||||
}
|
||||
};
|
||||
Expression expression = new ConstantNode("").withLookupStrings(myValues);
|
||||
if (!insertShorthand) template.addVariable(NAME_TEMPLATE_VARIABLE, expression, expression, true);
|
||||
|
||||
if (indirectSyntax) {
|
||||
|
||||
@@ -16,9 +16,12 @@
|
||||
|
||||
package com.intellij.xml.refactoring;
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.EmptyExpression;
|
||||
import com.intellij.codeInsight.highlighting.HighlightManager;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.Template;
|
||||
import com.intellij.codeInsight.template.TemplateBuilderImpl;
|
||||
import com.intellij.codeInsight.template.TemplateEditingAdapter;
|
||||
import com.intellij.codeInsight.template.TemplateManager;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
@@ -149,17 +152,7 @@ public class XmlTagInplaceRenamer {
|
||||
final ASTNode selected = pair.first;
|
||||
final ASTNode other = pair.second;
|
||||
|
||||
builder.replaceElement(selected.getPsi(), PRIMARY_VARIABLE_NAME, new EmptyExpression() {
|
||||
@Override
|
||||
public Result calculateQuickResult(final ExpressionContext context) {
|
||||
return new TextResult(selected.getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateResult(final ExpressionContext context) {
|
||||
return new TextResult(selected.getText());
|
||||
}
|
||||
}, true);
|
||||
builder.replaceElement(selected.getPsi(), PRIMARY_VARIABLE_NAME, new ConstantNode(selected.getText()), true);
|
||||
|
||||
if (other != null) {
|
||||
builder.replaceElement(other.getPsi(), OTHER_VARIABLE_NAME, PRIMARY_VARIABLE_NAME, false);
|
||||
|
||||
@@ -19,8 +19,10 @@ package org.intellij.plugins.relaxNG.compact.psi.impl;
|
||||
import com.intellij.codeInsight.CodeInsightUtilCore;
|
||||
import com.intellij.codeInsight.daemon.EmptyResolveMessageProvider;
|
||||
import com.intellij.codeInsight.daemon.XmlErrorMessages;
|
||||
import com.intellij.codeInsight.lookup.LookupItem;
|
||||
import com.intellij.codeInsight.template.*;
|
||||
import com.intellij.codeInsight.template.Expression;
|
||||
import com.intellij.codeInsight.template.Template;
|
||||
import com.intellij.codeInsight.template.TemplateManager;
|
||||
import com.intellij.codeInsight.template.impl.ConstantNode;
|
||||
import com.intellij.codeInspection.LocalQuickFix;
|
||||
import com.intellij.codeInspection.LocalQuickFixProvider;
|
||||
import com.intellij.codeInspection.ProblemDescriptor;
|
||||
@@ -270,22 +272,7 @@ public class RncNameImpl extends RncElementImpl implements RncName, PsiReference
|
||||
final TemplateManager manager = TemplateManager.getInstance(project);
|
||||
final Template t = manager.createTemplate("", "");
|
||||
t.addTextSegment(" \"");
|
||||
final Expression expression = new Expression() {
|
||||
@Override
|
||||
public Result calculateResult(ExpressionContext context) {
|
||||
return new TextResult("");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result calculateQuickResult(ExpressionContext context) {
|
||||
return calculateResult(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LookupItem[] calculateLookupItems(ExpressionContext context) {
|
||||
return LookupItem.EMPTY_ARRAY;
|
||||
}
|
||||
};
|
||||
Expression expression = new ConstantNode("");
|
||||
t.addVariable("uri", expression, expression, true);
|
||||
t.addTextSegment("\"");
|
||||
t.addEndVariable();
|
||||
|
||||
Reference in New Issue
Block a user