From 5bb6011d6d7dddcfe5a381d03218f8f6054f7bbc Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Mon, 24 Nov 2014 19:06:35 +0300 Subject: [PATCH] Fixed completion of PyCustomMembers whose names don't match the names of resolved references (PY-14519) --- .../jetbrains/python/psi/types/PyModuleType.java | 13 +++++++++---- python/testData/completion/osPath/a.after.py | 3 +++ python/testData/completion/osPath/a.py | 3 +++ python/testData/completion/osPath/ntpath.py | 1 + python/testData/completion/osPath/os.py | 1 + python/testData/completion/osPath/posixpath.py | 1 + .../com/jetbrains/python/PythonCompletionTest.java | 10 ++++++++++ 7 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 python/testData/completion/osPath/a.after.py create mode 100644 python/testData/completion/osPath/a.py create mode 100644 python/testData/completion/osPath/ntpath.py create mode 100644 python/testData/completion/osPath/os.py create mode 100644 python/testData/completion/osPath/posixpath.py diff --git a/python/src/com/jetbrains/python/psi/types/PyModuleType.java b/python/src/com/jetbrains/python/psi/types/PyModuleType.java index 3fedadfd29c4..320d2880837e 100644 --- a/python/src/com/jetbrains/python/psi/types/PyModuleType.java +++ b/python/src/com/jetbrains/python/psi/types/PyModuleType.java @@ -305,11 +305,16 @@ public class PyModuleType implements PyType { // Modules don't descend from obje final PsiElement resolved = member.resolve(location); if (resolved != null) { processor.execute(resolved, ResolveState.initial()); - result.addAll(processor.getResultList()); - } - else { - result.add(LookupElementBuilder.create(name).withIcon(member.getIcon()).withTypeText(member.getShortType())); + final List lookupList = processor.getResultList(); + if (!lookupList.isEmpty()) { + final LookupElement element = lookupList.get(0); + if (name.equals(element.getLookupString())) { + result.add(element); + continue; + } + } } + result.add(LookupElementBuilder.create(name).withIcon(member.getIcon()).withTypeText(member.getShortType())); } } if (point == PointInImport.NONE || point == PointInImport.AS_NAME) { // when not imported from, add regular attributes diff --git a/python/testData/completion/osPath/a.after.py b/python/testData/completion/osPath/a.after.py new file mode 100644 index 000000000000..2e927028da70 --- /dev/null +++ b/python/testData/completion/osPath/a.after.py @@ -0,0 +1,3 @@ +import os + +os.path diff --git a/python/testData/completion/osPath/a.py b/python/testData/completion/osPath/a.py new file mode 100644 index 000000000000..d0ceb4315866 --- /dev/null +++ b/python/testData/completion/osPath/a.py @@ -0,0 +1,3 @@ +import os + +os.pat diff --git a/python/testData/completion/osPath/ntpath.py b/python/testData/completion/osPath/ntpath.py new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/python/testData/completion/osPath/ntpath.py @@ -0,0 +1 @@ + diff --git a/python/testData/completion/osPath/os.py b/python/testData/completion/osPath/os.py new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/python/testData/completion/osPath/os.py @@ -0,0 +1 @@ + diff --git a/python/testData/completion/osPath/posixpath.py b/python/testData/completion/osPath/posixpath.py new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/python/testData/completion/osPath/posixpath.py @@ -0,0 +1 @@ + diff --git a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java index c6a66f4f9fb0..10ec287648d0 100644 --- a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java @@ -722,4 +722,14 @@ public class PythonCompletionTest extends PyTestCase { assertNotNull(suggested); assertSameElements(suggested, "VAR", "subpkg1"); } + + // PY-14519 + public void testOsPath() { + myFixture.copyDirectoryToProject("completion/" + getTestName(true), ""); + myFixture.configureByFile("a.py"); + myFixture.completeBasic(); + final List suggested = myFixture.getLookupElementStrings(); + assertNotNull(suggested); + assertContainsElements(suggested, "path"); + } }