From a000306af320cea896f0476c231d02065b993d4b Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Fri, 21 Jan 2011 19:52:25 +0300 Subject: [PATCH] Fixed failed test for completion of inherited class attributes. --- .../PySuperAttributesCompletionContributor.java | 12 +++--------- .../completion/superClassAttributes.after.py | 6 ++++++ python/testData/completion/superClassAttributes.py | 6 ++++++ .../superClassAttributesNoCompletionInFunc.after.py | 7 +++++++ .../superClassAttributesNoCompletionInFunc.py | 7 +++++++ .../com/jetbrains/python/PythonCompletionTest.java | 8 ++++++++ 6 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 python/testData/completion/superClassAttributes.after.py create mode 100644 python/testData/completion/superClassAttributes.py create mode 100644 python/testData/completion/superClassAttributesNoCompletionInFunc.after.py create mode 100644 python/testData/completion/superClassAttributesNoCompletionInFunc.py diff --git a/python/src/com/jetbrains/python/codeInsight/PySuperAttributesCompletionContributor.java b/python/src/com/jetbrains/python/codeInsight/PySuperAttributesCompletionContributor.java index 7b8606722994..c6903c023876 100644 --- a/python/src/com/jetbrains/python/codeInsight/PySuperAttributesCompletionContributor.java +++ b/python/src/com/jetbrains/python/codeInsight/PySuperAttributesCompletionContributor.java @@ -22,7 +22,7 @@ import java.util.List; public class PySuperAttributesCompletionContributor extends CompletionContributor { public PySuperAttributesCompletionContributor() { extend(CompletionType.BASIC, - PlatformPatterns.psiElement().withParent(PyReferenceExpression.class), + PlatformPatterns.psiElement().withParents(PyReferenceExpression.class, PyExpressionStatement.class, PyStatementList.class, PyClass.class), new CompletionProvider() { @Override protected void addCompletions(@NotNull CompletionParameters parameters, @@ -30,17 +30,11 @@ public class PySuperAttributesCompletionContributor extends CompletionContributo @NotNull CompletionResultSet result) { PsiElement position = parameters.getOriginalPosition(); PyClass containingClass = PsiTreeUtil.getParentOfType(position, PyClass.class); - if (containingClass == null && position instanceof PsiWhiteSpace) { - position = PsiTreeUtil.prevLeaf(position); - containingClass = PsiTreeUtil.getParentOfType(position, PyClass.class); - } + if (containingClass == null) { return; } - PyFunction func = PsiTreeUtil.getParentOfType(position, PyFunction.class); - if (func != null) { - return; - } + List seenNames = Lists.newArrayList(); for (PyTargetExpression expr : containingClass.getClassAttributes()) { seenNames.add(expr.getName()); diff --git a/python/testData/completion/superClassAttributes.after.py b/python/testData/completion/superClassAttributes.after.py new file mode 100644 index 000000000000..f2e61a2d9707 --- /dev/null +++ b/python/testData/completion/superClassAttributes.after.py @@ -0,0 +1,6 @@ +class Foo: + attribute = 1 + + +class Boo(Foo): + attribute = \ No newline at end of file diff --git a/python/testData/completion/superClassAttributes.py b/python/testData/completion/superClassAttributes.py new file mode 100644 index 000000000000..a1977688577a --- /dev/null +++ b/python/testData/completion/superClassAttributes.py @@ -0,0 +1,6 @@ +class Foo: + attribute = 1 + + +class Boo(Foo): + attr \ No newline at end of file diff --git a/python/testData/completion/superClassAttributesNoCompletionInFunc.after.py b/python/testData/completion/superClassAttributesNoCompletionInFunc.after.py new file mode 100644 index 000000000000..3da0a2c45e28 --- /dev/null +++ b/python/testData/completion/superClassAttributesNoCompletionInFunc.after.py @@ -0,0 +1,7 @@ +class Foo: + attribute = 1 + + +class Boo(Foo): + def f(self): + attr \ No newline at end of file diff --git a/python/testData/completion/superClassAttributesNoCompletionInFunc.py b/python/testData/completion/superClassAttributesNoCompletionInFunc.py new file mode 100644 index 000000000000..3da0a2c45e28 --- /dev/null +++ b/python/testData/completion/superClassAttributesNoCompletionInFunc.py @@ -0,0 +1,7 @@ +class Foo: + attribute = 1 + + +class Boo(Foo): + def f(self): + attr \ 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 49f607d25a03..49b45ee1daf6 100644 --- a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java @@ -267,4 +267,12 @@ public class PythonCompletionTest extends PyLightFixtureTestCase { public void testNoIdentifiersInImport() { doTest(); } + + public void testSuperClassAttributes() { + doTest(); + } + + public void testSuperClassAttributesNoCompletionInFunc() { + doTest(); + } }