From 0a7e0a6063cffb653e873e1bc48a356559f29aca Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 25 Apr 2012 19:41:11 +0200 Subject: [PATCH] don't try to append any import elements to a star import (PY-6302) --- .../python/codeInsight/imports/AddImportHelper.java | 5 ++++- .../inspections/importFromModuleStar/source.py | 4 ++++ .../inspections/importFromModuleStar/source_after.py | 5 +++++ .../inspections/importFromModuleStar/target.py | 4 ++++ .../testSrc/com/jetbrains/python/PyQuickFixTest.java | 11 +++++++++++ 5 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 python/testData/inspections/importFromModuleStar/source.py create mode 100644 python/testData/inspections/importFromModuleStar/source_after.py create mode 100644 python/testData/inspections/importFromModuleStar/target.py diff --git a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java index e76c4ab5f56c..7b4cd06c6d35 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java @@ -191,6 +191,9 @@ public class AddImportHelper { if (target != null && existingImport.getTextRange().getStartOffset() > target.getTextRange().getStartOffset()) { continue; } + if (existingImport.isStarImport()) { + continue; + } final PyQualifiedName qName = existingImport.getImportSourceQName(); if (qName != null && qName.toString().equals(path)) { for (PyImportElement el : existingImport.getImportElements()) { @@ -220,7 +223,7 @@ public class AddImportHelper { else if (useQualified) { addImportStatement(file, path, null, priority); final PyElementGenerator elementGenerator = PyElementGenerator.getInstance(file.getProject()); - element.replace(elementGenerator.createExpressionFromText(qName + "." + target.getName())); + element.replace(elementGenerator.createExpressionFromText(LanguageLevel.forElement(target), qName + "." + target.getName())); } else { addImportFrom(file, null, path, target.getName(), null, priority); diff --git a/python/testData/inspections/importFromModuleStar/source.py b/python/testData/inspections/importFromModuleStar/source.py new file mode 100644 index 000000000000..55c27e1fb049 --- /dev/null +++ b/python/testData/inspections/importFromModuleStar/source.py @@ -0,0 +1,4 @@ +from target import * + +xyzzy +shazam() diff --git a/python/testData/inspections/importFromModuleStar/source_after.py b/python/testData/inspections/importFromModuleStar/source_after.py new file mode 100644 index 000000000000..b118609972b6 --- /dev/null +++ b/python/testData/inspections/importFromModuleStar/source_after.py @@ -0,0 +1,5 @@ +from target import * +from target import xyzzy + +xyzzy +shazam() diff --git a/python/testData/inspections/importFromModuleStar/target.py b/python/testData/inspections/importFromModuleStar/target.py new file mode 100644 index 000000000000..2214231d716c --- /dev/null +++ b/python/testData/inspections/importFromModuleStar/target.py @@ -0,0 +1,4 @@ +__all__ = ['shazam'] + +def shazam(): pass +def xyzzy(): pass diff --git a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java index dd8aac6b309b..c0758fc44ae9 100644 --- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java @@ -36,6 +36,17 @@ public class PyQuickFixTest extends PyTestCase { PyUnresolvedReferencesInspection.class, PyBundle.message("ACT.NAME.use.import"), true, true); } + public void testImportFromModuleStar() { // PY-6302 + myFixture.enableInspections(PyUnresolvedReferencesInspection.class); + myFixture.copyDirectoryToProject("importFromModuleStar", ""); + myFixture.configureFromTempProjectFile("source.py"); + myFixture.checkHighlighting(true, false, false); + final IntentionAction intentionAction = myFixture.findSingleIntention(PyBundle.message("ACT.NAME.use.import")); + assertNotNull(intentionAction); + myFixture.launchAction(intentionAction); + myFixture.checkResultByFile("importFromModuleStar/source_after.py"); + } + public void testQualifyByImport() { final PyCodeInsightSettings settings = PyCodeInsightSettings.getInstance(); boolean oldPreferFrom = settings.PREFER_FROM_IMPORT;