live templates: augment ConstantNode with lookup items, use that instead of many custom implementations

GitOrigin-RevId: ec5c04ff1807bbaa26f8868eda056803a1cf773f
This commit is contained in:
peter
2019-05-03 17:26:33 +02:00
committed by intellij-monorepo-bot
parent c7bed766b3
commit a4fbe03166
18 changed files with 100 additions and 310 deletions

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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";

View File

@@ -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 + ")");

View File

@@ -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};

View File

@@ -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);
}

View File

@@ -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 ");

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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
)
}

View File

@@ -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)
}
}

View File

@@ -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))
}

View File

@@ -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;
}
}
}

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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();