From ca446030ea467fbe9d975fe0a1232ed6de3388e8 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 8 Feb 2012 13:55:22 +0400 Subject: [PATCH] Added filtering variables in BaseJetVariableMacro --- .../macro/BaseJetVariableMacro.java | 21 ++++++++++++------- .../macro/JetVariableOfTypeMacro.java | 6 ++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/BaseJetVariableMacro.java b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/BaseJetVariableMacro.java index db8c46af18b..e022ceb3422 100644 --- a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/BaseJetVariableMacro.java +++ b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/BaseJetVariableMacro.java @@ -14,6 +14,7 @@ import com.intellij.psi.PsiNamedElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.scopes.JetScope; @@ -30,7 +31,7 @@ import java.util.Set; */ public abstract class BaseJetVariableMacro extends Macro { @Nullable - private static JetNamedDeclaration[] getVariables(Expression[] params, ExpressionContext context) { + private JetNamedDeclaration[] getVariables(Expression[] params, ExpressionContext context) { if (params.length != 1) return null; final Result result = params[0].calculateResult(context); if (result == null) return null; @@ -53,20 +54,24 @@ public abstract class BaseJetVariableMacro extends Macro { List elements = new ArrayList(); for (DeclarationDescriptor declarationDescriptor : scope.getAllDescriptors()) { - PsiElement declaration = bc.get(BindingContext.DESCRIPTOR_TO_DECLARATION, declarationDescriptor); - assert declaration == null || declaration instanceof PsiNamedElement; + if (declarationDescriptor instanceof VariableDescriptor && isSuitable((VariableDescriptor) declarationDescriptor)) { + PsiElement declaration = bc.get(BindingContext.DESCRIPTOR_TO_DECLARATION, declarationDescriptor); + assert declaration == null || declaration instanceof PsiNamedElement; - if (declaration instanceof JetProperty) { - elements.add((JetProperty) declaration); - } - else if (declaration instanceof JetParameter) { - elements.add((JetParameter) declaration); + if (declaration instanceof JetProperty) { + elements.add((JetProperty) declaration); + } + else if (declaration instanceof JetParameter) { + elements.add((JetParameter) declaration); + } } } return elements.toArray(new JetNamedDeclaration[elements.size()]); } + protected abstract boolean isSuitable(@NotNull VariableDescriptor variableDescriptor); + @Nullable private static JetExpression findContextExpression(PsiFile psiFile, int startOffset) { PsiElement e = psiFile.findElementAt(startOffset); diff --git a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/JetVariableOfTypeMacro.java b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/JetVariableOfTypeMacro.java index 652703952c4..89b1547fcd5 100644 --- a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/JetVariableOfTypeMacro.java +++ b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/JetVariableOfTypeMacro.java @@ -1,5 +1,7 @@ package org.jetbrains.jet.plugin.liveTemplates.macro; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.plugin.JetBundle; /** @@ -17,5 +19,9 @@ public class JetVariableOfTypeMacro extends BaseJetVariableMacro { return JetBundle.message("macro.variable.of.type"); } + @Override + protected boolean isSuitable(@NotNull VariableDescriptor variableDescriptor) { + return true; + } } \ No newline at end of file