diff --git a/python/src/com/jetbrains/python/inspections/PyCompatibilityInspection.java b/python/src/com/jetbrains/python/inspections/PyCompatibilityInspection.java index 9110eb405eea..d2976190b2ff 100644 --- a/python/src/com/jetbrains/python/inspections/PyCompatibilityInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyCompatibilityInspection.java @@ -10,7 +10,6 @@ import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; import com.jetbrains.python.PyBundle; -import com.jetbrains.python.actions.ReplaceBuiltinsQuickFix; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyQualifiedName; import com.jetbrains.python.validation.CompatibilityVisitor; @@ -171,14 +170,14 @@ public class PyCompatibilityInspection extends PyInspection { LanguageLevel languageLevel = myVersionsToProcess.get(i); for (PyImportElement importElement : importElements) { final PyQualifiedName qName = importElement.getImportedQName(); - if (qName != null) { + if (qName != null && !qName.matches("builtins") && !qName.matches("__builtin__")) { moduleName = qName.toString(); if (UnsupportedFeaturesUtil.MODULES.get(languageLevel).contains(moduleName)) len = appendLanguageLevel(message, len, languageLevel); } } } - commonRegisterProblem(message, " not have module " + moduleName, len, node, new ReplaceBuiltinsQuickFix()); + commonRegisterProblem(message, " not have module " + moduleName, len, node, null); } @Override diff --git a/python/src/com/jetbrains/python/validation/CompatibilityVisitor.java b/python/src/com/jetbrains/python/validation/CompatibilityVisitor.java index 24918d973fc7..b37e2e7bfbed 100644 --- a/python/src/com/jetbrains/python/validation/CompatibilityVisitor.java +++ b/python/src/com/jetbrains/python/validation/CompatibilityVisitor.java @@ -7,6 +7,7 @@ import com.jetbrains.python.PyNames; import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.actions.*; import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.impl.PyQualifiedName; import java.util.HashSet; import java.util.List; @@ -99,6 +100,36 @@ public abstract class CompatibilityVisitor extends PyAnnotator { } } + @Override + public void visitPyImportStatement(PyImportStatement node) { + super.visitPyImportStatement(node); + PyImportElement[] importElements = node.getImportElements(); + int len = 0; + String moduleName = ""; + StringBuilder message = new StringBuilder(myCommonMessage); + for (int i = 0; i != myVersionsToProcess.size(); ++i) { + LanguageLevel languageLevel = myVersionsToProcess.get(i); + for (PyImportElement importElement : importElements) { + final PyQualifiedName qName = importElement.getImportedQName(); + if (qName != null) { + if (!languageLevel.isPy3K()) { + if (qName.matches("builtins")) { + len = appendLanguageLevel(message, len, languageLevel); + moduleName = "builtins"; + } + } + else { + if (qName.matches("__builtin__")) { + len = appendLanguageLevel(message, len, languageLevel); + moduleName = "__builtin__"; + } + } + } + } + } + commonRegisterProblem(message, " not have module " + moduleName, len, node, new ReplaceBuiltinsQuickFix()); + } + @Override public void visitPyStarExpression(PyStarExpression node) { super.visitPyStarExpression(node); diff --git a/python/testData/inspections/PyCompatibilityInspection/importStatement.py b/python/testData/inspections/PyCompatibilityInspection/importStatement.py index 975aa8b43bff..0e20e9214b4c 100644 --- a/python/testData/inspections/PyCompatibilityInspection/importStatement.py +++ b/python/testData/inspections/PyCompatibilityInspection/importStatement.py @@ -1,3 +1,3 @@ -import builtins +import builtins import __builtin__ \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java index 16dfd45df177..141fbc13e8db 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyCompatibilityInspectionTest.java @@ -28,6 +28,7 @@ public class PyCompatibilityInspectionTest extends PyLightFixtureTestCase { } public void testImportStatement() { + setLanguageLevel(LanguageLevel.PYTHON27); doTest(); }