From 0a411c19604852277ae8cd81cb6702c83081fcea Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 18 Nov 2014 01:02:36 +0300 Subject: [PATCH] PY-14365 Do not show object and __Classobj in AutoImportQuickFix Excluded them from the list of base classes that may be shown in description and list items in the quick fix UI. --- .../imports/ImportCandidateHolder.java | 20 +++++++++++-------- .../main.py | 1 + .../module.py | 2 ++ .../com/jetbrains/python/PyQuickFixTest.java | 10 ++++++++++ 4 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 python/testData/inspections/objectBaseIsNotShownInAutoImportQuickfix/main.py create mode 100644 python/testData/inspections/objectBaseIsNotShownInAutoImportQuickfix/module.py diff --git a/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java b/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java index e62910144b45..a5c9a10d0454 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java @@ -25,10 +25,14 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileSystemItem; import com.intellij.psi.util.QualifiedName; +import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + /** * An immutable holder of information for one auto-import candidate. *

@@ -131,15 +135,15 @@ class ImportCandidateHolder implements Comparable { sb.append(((PyFunction)myImportable).getParameterList().getPresentableText(false)); } else if (myImportable instanceof PyClass) { - final PyClass[] supers = ((PyClass)myImportable).getSuperClasses(); - if (supers.length > 0) { + final List supers = ContainerUtil.mapNotNull(((PyClass)myImportable).getSuperClasses(), new Function() { + @Override + public String fun(PyClass cls) { + return PyUtil.isObjectClass(cls) ? null : cls.getName(); + } + }); + if (!supers.isEmpty()) { sb.append("("); - // ", ".join(x.getName() for x in getSuperClasses()) - final String[] superNames = new String[supers.length]; - for (int i = 0; i < supers.length; i += 1) { - superNames[i] = supers[i].getName(); - } - sb.append(StringUtil.join(superNames, ", ")); + StringUtil.join(supers, ", ", sb); sb.append(")"); } } diff --git a/python/testData/inspections/objectBaseIsNotShownInAutoImportQuickfix/main.py b/python/testData/inspections/objectBaseIsNotShownInAutoImportQuickfix/main.py new file mode 100644 index 000000000000..b5e5da256cfa --- /dev/null +++ b/python/testData/inspections/objectBaseIsNotShownInAutoImportQuickfix/main.py @@ -0,0 +1 @@ +MyOldStyleClass diff --git a/python/testData/inspections/objectBaseIsNotShownInAutoImportQuickfix/module.py b/python/testData/inspections/objectBaseIsNotShownInAutoImportQuickfix/module.py new file mode 100644 index 000000000000..4652e3d0f87e --- /dev/null +++ b/python/testData/inspections/objectBaseIsNotShownInAutoImportQuickfix/module.py @@ -0,0 +1,2 @@ +class MyOldStyleClass: + pass diff --git a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java index 6cc2e578fb30..4b9b5ca42e0c 100644 --- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java @@ -50,6 +50,16 @@ public class PyQuickFixTest extends PyTestCase { PyUnresolvedReferencesInspection.class, "Import 'importFromModule.foo.baz'", true, true); } + // PY-14365 + public void testObjectBaseIsNotShownInAutoImportQuickfix() { + myFixture.copyDirectoryToProject("objectBaseIsNotShownInAutoImportQuickfix", ""); + myFixture.configureByFile("main.py"); + myFixture.enableInspections(PyUnresolvedReferencesInspection.class); + final IntentionAction intention = myFixture.findSingleIntention("Import"); + assertNotNull(intention); + assertEquals("Import 'module.MyOldStyleClass'", intention.getText()); + } + public void testImportFromModuleStar() { // PY-6302 myFixture.enableInspections(PyUnresolvedReferencesInspection.class); myFixture.copyDirectoryToProject("importFromModuleStar", "");