Added filtering variables in BaseJetVariableMacro
This commit is contained in:
@@ -14,6 +14,7 @@ import com.intellij.psi.PsiNamedElement;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
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.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
@@ -30,7 +31,7 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public abstract class BaseJetVariableMacro extends Macro {
|
public abstract class BaseJetVariableMacro extends Macro {
|
||||||
@Nullable
|
@Nullable
|
||||||
private static JetNamedDeclaration[] getVariables(Expression[] params, ExpressionContext context) {
|
private JetNamedDeclaration[] getVariables(Expression[] params, ExpressionContext context) {
|
||||||
if (params.length != 1) return null;
|
if (params.length != 1) return null;
|
||||||
final Result result = params[0].calculateResult(context);
|
final Result result = params[0].calculateResult(context);
|
||||||
if (result == null) return null;
|
if (result == null) return null;
|
||||||
@@ -53,20 +54,24 @@ public abstract class BaseJetVariableMacro extends Macro {
|
|||||||
List<JetNamedDeclaration> elements = new ArrayList<JetNamedDeclaration>();
|
List<JetNamedDeclaration> elements = new ArrayList<JetNamedDeclaration>();
|
||||||
|
|
||||||
for (DeclarationDescriptor declarationDescriptor : scope.getAllDescriptors()) {
|
for (DeclarationDescriptor declarationDescriptor : scope.getAllDescriptors()) {
|
||||||
PsiElement declaration = bc.get(BindingContext.DESCRIPTOR_TO_DECLARATION, declarationDescriptor);
|
if (declarationDescriptor instanceof VariableDescriptor && isSuitable((VariableDescriptor) declarationDescriptor)) {
|
||||||
assert declaration == null || declaration instanceof PsiNamedElement;
|
PsiElement declaration = bc.get(BindingContext.DESCRIPTOR_TO_DECLARATION, declarationDescriptor);
|
||||||
|
assert declaration == null || declaration instanceof PsiNamedElement;
|
||||||
|
|
||||||
if (declaration instanceof JetProperty) {
|
if (declaration instanceof JetProperty) {
|
||||||
elements.add((JetProperty) declaration);
|
elements.add((JetProperty) declaration);
|
||||||
}
|
}
|
||||||
else if (declaration instanceof JetParameter) {
|
else if (declaration instanceof JetParameter) {
|
||||||
elements.add((JetParameter) declaration);
|
elements.add((JetParameter) declaration);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return elements.toArray(new JetNamedDeclaration[elements.size()]);
|
return elements.toArray(new JetNamedDeclaration[elements.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected abstract boolean isSuitable(@NotNull VariableDescriptor variableDescriptor);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static JetExpression findContextExpression(PsiFile psiFile, int startOffset) {
|
private static JetExpression findContextExpression(PsiFile psiFile, int startOffset) {
|
||||||
PsiElement e = psiFile.findElementAt(startOffset);
|
PsiElement e = psiFile.findElementAt(startOffset);
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package org.jetbrains.jet.plugin.liveTemplates.macro;
|
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;
|
import org.jetbrains.jet.plugin.JetBundle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -17,5 +19,9 @@ public class JetVariableOfTypeMacro extends BaseJetVariableMacro {
|
|||||||
return JetBundle.message("macro.variable.of.type");
|
return JetBundle.message("macro.variable.of.type");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isSuitable(@NotNull VariableDescriptor variableDescriptor) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user