diff --git a/python/src/com/jetbrains/python/psi/impl/PyQualifiedReferenceImpl.java b/python/src/com/jetbrains/python/psi/impl/PyQualifiedReferenceImpl.java index 270369d7d228..d3c31c2aa62b 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyQualifiedReferenceImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyQualifiedReferenceImpl.java @@ -171,6 +171,7 @@ public class PyQualifiedReferenceImpl extends PyReferenceImpl { final PyClassType classType = new PyClassType(classes.iterator().next(), false); return ((PyReferenceExpressionImpl) myElement).getTypeCompletionVariants(classType); } + return collectSeenMembers(qualifier.getText()); } } return ArrayUtil.EMPTY_OBJECT_ARRAY; @@ -195,6 +196,23 @@ public class PyQualifiedReferenceImpl extends PyReferenceImpl { return result; } + private Object[] collectSeenMembers(final String text) { + final List results = new ArrayList(); + myElement.getContainingFile().accept(new PyRecursiveElementVisitor() { + @Override + public void visitPyReferenceExpression(PyReferenceExpression node) { + super.visitPyReferenceExpression(node); + if (node != myElement) { + final PyExpression qualifier = node.getQualifier(); + if (qualifier != null && qualifier.getText().equals(text)) { + results.add(node.getReferencedName()); + } + } + } + }); + return results.toArray(new Object[results.size()]); + } + private static Collection collectAssignedAttributes(PyQualifiedExpression qualifier) { List qualifier_path = PyResolveUtil.unwindQualifiers(qualifier); if (qualifier_path != null) { diff --git a/python/testData/completion/seenMembers.after.py b/python/testData/completion/seenMembers.after.py new file mode 100644 index 000000000000..f1bc75bcdeb6 --- /dev/null +++ b/python/testData/completion/seenMembers.after.py @@ -0,0 +1,5 @@ +def foo(element): + print(element.children) + +def bar(element): + element.children \ No newline at end of file diff --git a/python/testData/completion/seenMembers.py b/python/testData/completion/seenMembers.py new file mode 100644 index 000000000000..ba886b709c3e --- /dev/null +++ b/python/testData/completion/seenMembers.py @@ -0,0 +1,5 @@ +def foo(element): + print(element.children) + +def bar(element): + element.ch \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java index c4dbc7c3419d..55e02842db80 100644 --- a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java @@ -115,6 +115,10 @@ public class PythonCompletionTest extends PyLightFixtureTestCase { doTest(); } + public void testSeenMembers() throws Exception { // PY-1181 + doTest(); + } + public void testImportModule() throws Exception { final String testName = "completion/" + getTestName(true); myFixture.configureByFiles(testName + ".py", "completion/someModule.py");