diff --git a/python/src/com/jetbrains/python/psi/PyFileElementType.java b/python/src/com/jetbrains/python/psi/PyFileElementType.java index 1cf598fb22b2..5e2bb1d76d01 100644 --- a/python/src/com/jetbrains/python/psi/PyFileElementType.java +++ b/python/src/com/jetbrains/python/psi/PyFileElementType.java @@ -24,7 +24,7 @@ public class PyFileElementType extends IStubFileElementType { @Override public int getStubVersion() { - return 19; + return 20; } @Override diff --git a/python/src/com/jetbrains/python/psi/PyTargetExpression.java b/python/src/com/jetbrains/python/psi/PyTargetExpression.java index 53bc4343e170..a4d9fd6a0f78 100644 --- a/python/src/com/jetbrains/python/psi/PyTargetExpression.java +++ b/python/src/com/jetbrains/python/psi/PyTargetExpression.java @@ -2,6 +2,7 @@ package com.jetbrains.python.psi; import com.intellij.psi.PsiNamedElement; import com.intellij.psi.StubBasedPsiElement; +import com.jetbrains.python.psi.impl.PyQualifiedName; import com.jetbrains.python.psi.stubs.PyTargetExpressionStub; import org.jetbrains.annotations.Nullable; @@ -11,11 +12,6 @@ import org.jetbrains.annotations.Nullable; public interface PyTargetExpression extends PyQualifiedExpression, PsiNamedElement, StubBasedPsiElement { PyTargetExpression[] EMPTY_ARRAY = new PyTargetExpression[0]; - /* - @Nullable - PyExpression getQualifier(); - */ - /** * Find the value that maps to this target expression in an enclosing assignment expression. * Does not work with other expressions (e.g. if the target is in a 'for' loop). @@ -24,4 +20,7 @@ public interface PyTargetExpression extends PyQualifiedExpression, PsiNamedEleme */ @Nullable PyExpression findAssignedValue(); + + @Nullable + PyQualifiedName getAssignedQName(); } diff --git a/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java index db3872cdbeae..dd87b563de7d 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyTargetExpressionImpl.java @@ -130,4 +130,13 @@ public class PyTargetExpressionImpl extends PyPresentableElementImpl implements PyTargetExpressionStub { private final String myName; + private final PyQualifiedName myInitializer; - public PyTargetExpressionStubImpl(final String name, final StubElement parentStub) { + public PyTargetExpressionStubImpl(final String name, final PyQualifiedName initializer, final StubElement parentStub) { super(parentStub, PyElementTypes.TARGET_EXPRESSION); myName = name; + myInitializer = initializer; } public String getName() { return myName; } + + public PyQualifiedName getInitializer() { + return myInitializer; + } } diff --git a/python/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java b/python/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java index ceeb8cd9cb81..58147848c2f6 100644 --- a/python/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java +++ b/python/src/com/jetbrains/python/psi/stubs/PyTargetExpressionStub.java @@ -2,9 +2,11 @@ package com.jetbrains.python.psi.stubs; import com.intellij.psi.stubs.NamedStub; import com.jetbrains.python.psi.PyTargetExpression; +import com.jetbrains.python.psi.impl.PyQualifiedName; /** * @author yole */ public interface PyTargetExpressionStub extends NamedStub { + PyQualifiedName getInitializer(); } diff --git a/python/testData/stubs/StubStructure.py b/python/testData/stubs/StubStructure.py index 3e67a8f06e21..0dff1ef908e2 100644 --- a/python/testData/stubs/StubStructure.py +++ b/python/testData/stubs/StubStructure.py @@ -2,7 +2,7 @@ def deco(fun): return fun # valid class FooClass: - staticField = 1 + staticField = deco def __init__(self): self.instanceField = 2 diff --git a/python/testSrc/com/jetbrains/python/PyStubsTest.java b/python/testSrc/com/jetbrains/python/PyStubsTest.java index 43202c0f65de..d51594ca7889 100644 --- a/python/testSrc/com/jetbrains/python/PyStubsTest.java +++ b/python/testSrc/com/jetbrains/python/PyStubsTest.java @@ -45,6 +45,7 @@ public class PyStubsTest extends PyLightFixtureTestCase { final PyTargetExpression[] attrs = pyClass.getClassAttributes(); assertEquals(1, attrs.length); assertEquals("staticField", attrs [0].getName()); + assertTrue(attrs [0].getAssignedQName().matches("deco")); final PyFunction[] methods = pyClass.getMethods(); assertEquals(2, methods.length);