From cdbb08b5e13866beb619ad69cc50fe14fae02c4e Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 1 Jul 2010 20:44:46 +0400 Subject: [PATCH] show seen members of same qualifier in completion list (PY-1181) --- .../psi/impl/PyQualifiedReferenceImpl.java | 18 ++++++++++++++++++ .../testData/completion/seenMembers.after.py | 5 +++++ python/testData/completion/seenMembers.py | 5 +++++ .../jetbrains/python/PythonCompletionTest.java | 4 ++++ 4 files changed, 32 insertions(+) create mode 100644 python/testData/completion/seenMembers.after.py create mode 100644 python/testData/completion/seenMembers.py 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");