From 72dbe42e7bfdce652e153d1a5786081747452a12 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 9 Aug 2012 14:02:21 +0200 Subject: [PATCH] avoid stub to AST switches when using class name completion for variables --- .../com/jetbrains/python/psi/PyTargetExpression.java | 2 ++ .../python/psi/stubs/PyTargetExpressionStub.java | 2 ++ .../com/jetbrains/python/psi/PyFileElementType.java | 2 +- .../python/psi/impl/PyTargetExpressionImpl.java | 10 +++++++++- .../impl/stubs/PyTargetExpressionElementType.java | 6 ++++-- .../psi/impl/stubs/PyTargetExpressionStubImpl.java | 12 +++++++++++- .../psi/resolve/CompletionVariantsProcessor.java | 2 +- 7 files changed, 30 insertions(+), 6 deletions(-) diff --git a/python/psi-api/src/com/jetbrains/python/psi/PyTargetExpression.java b/python/psi-api/src/com/jetbrains/python/psi/PyTargetExpression.java index eea142eb9d52..930a4c310af9 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/PyTargetExpression.java +++ b/python/psi-api/src/com/jetbrains/python/psi/PyTargetExpression.java @@ -41,4 +41,6 @@ public interface PyTargetExpression extends PyQualifiedExpression, PsiNamedEleme @Nullable PyClass getContainingClass(); + + boolean isQualified(); } diff --git a/python/psi-api/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java b/python/psi-api/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java index 26527ee3e44a..aedd7d3740e0 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java +++ b/python/psi-api/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java @@ -41,6 +41,8 @@ public interface PyTargetExpressionStub extends NamedStub { @Nullable PyQualifiedName getInitializer(); + boolean isQualified(); + @Nullable T getCustomStub(Class stubClass); } diff --git a/python/src/com/jetbrains/python/psi/PyFileElementType.java b/python/src/com/jetbrains/python/psi/PyFileElementType.java index e5e3c33fffbc..74f41afcfab6 100644 --- a/python/src/com/jetbrains/python/psi/PyFileElementType.java +++ b/python/src/com/jetbrains/python/psi/PyFileElementType.java @@ -47,7 +47,7 @@ public class PyFileElementType extends IStubFileElementType { @Override public int getStubVersion() { - return 45; + return 46; } @Nullable diff --git a/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java index 8c15d008f9ee..5e379d6004e6 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java @@ -363,12 +363,20 @@ public class PyTargetExpressionImpl extends PyPresentableElementImplgetParentOfType(this, PyFunction.class, PyClass.class) instanceof PyClass) { + if (isQualified() || PsiTreeUtil.getStubOrPsiParentOfType(this, PyDocStringOwner.class) instanceof PyClass) { return PlatformIcons.FIELD_ICON; } return PlatformIcons.VARIABLE_ICON; } + public boolean isQualified() { + PyTargetExpressionStub stub = getStub(); + if (stub != null) { + return stub.isQualified(); + } + return getQualifier() != null; + } + @Nullable public PyExpression findAssignedValue() { if (isValid()) { diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java index a2f3f7a8161c..e3874d651b68 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java @@ -66,7 +66,7 @@ public class PyTargetExpressionElementType extends PyStubElementType imp private final String myName; private final InitializerType myInitializerType; private final PyQualifiedName myInitializer; + private final boolean myQualified; private final CustomTargetExpressionStub myCustomStub; @@ -23,16 +24,20 @@ public class PyTargetExpressionStubImpl extends StubBase imp myName = name; myInitializerType = InitializerType.Custom; myInitializer = null; + myQualified = false; myCustomStub = customStub; } public PyTargetExpressionStubImpl(final String name, final InitializerType initializerType, - final PyQualifiedName initializer, final StubElement parentStub) { + final PyQualifiedName initializer, + final boolean qualified, + final StubElement parentStub) { super(parentStub, PyElementTypes.TARGET_EXPRESSION); myName = name; assert initializerType != InitializerType.Custom; myInitializerType = initializerType; myInitializer = initializer; + myQualified = qualified; myCustomStub = null; } @@ -48,6 +53,11 @@ public class PyTargetExpressionStubImpl extends StubBase imp return myInitializer; } + @Override + public boolean isQualified() { + return myQualified; + } + @Nullable @Override public T getCustomStub(Class stubClass) { diff --git a/python/src/com/jetbrains/python/psi/resolve/CompletionVariantsProcessor.java b/python/src/com/jetbrains/python/psi/resolve/CompletionVariantsProcessor.java index 8011eef745d2..d8303826b60e 100644 --- a/python/src/com/jetbrains/python/psi/resolve/CompletionVariantsProcessor.java +++ b/python/src/com/jetbrains/python/psi/resolve/CompletionVariantsProcessor.java @@ -72,7 +72,7 @@ public class CompletionVariantsProcessor extends VariantsProcessor { } else if (element instanceof PyTargetExpression) { final PyTargetExpression expr = (PyTargetExpression)element; - if (expr.getQualifier() != null || ScopeUtil.getScopeOwner(expr) instanceof PyClass) { + if (expr.isQualified() || ScopeUtil.getScopeOwner(expr) instanceof PyClass) { cls = expr.getContainingClass(); } }