From 35ee12fefa91a7d167aef030b6645733a9c94aa4 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 15 Jan 2013 16:55:40 +0400 Subject: [PATCH] fixed PY-8151 Don't highlight deprecation on symbols imported as fallbacks after ImportError --- .../python/inspections/PyDeprecationInspection.java | 10 +++++++--- python/testData/deprecation/deprecatedAsFallback.py | 4 ++++ .../com/jetbrains/python/PyDeprecationTest.java | 6 ++++++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 python/testData/deprecation/deprecatedAsFallback.py diff --git a/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java b/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java index a119489b548e..f6ec90fa9d3b 100644 --- a/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java @@ -6,9 +6,8 @@ import com.intellij.codeInspection.ProblemsHolder; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; -import com.jetbrains.python.psi.PyFile; -import com.jetbrains.python.psi.PyFunction; -import com.jetbrains.python.psi.PyReferenceExpression; +import com.intellij.psi.util.PsiTreeUtil; +import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -39,6 +38,11 @@ public class PyDeprecationInspection extends PyInspection { @Override public void visitPyReferenceExpression(PyReferenceExpression node) { + final PyExceptPart exceptPart = PsiTreeUtil.getParentOfType(node, PyExceptPart.class); + if (exceptPart != null) { + final PyExpression exceptClass = exceptPart.getExceptClass(); + if (exceptClass != null && "ImportError".equals(exceptClass.getText())) return; + } PsiElement resolveResult = node.getReference(resolveWithoutImplicits()).resolve(); String deprecationMessage = null; if (resolveResult instanceof PyFunction) { diff --git a/python/testData/deprecation/deprecatedAsFallback.py b/python/testData/deprecation/deprecatedAsFallback.py new file mode 100644 index 000000000000..5302aeca7437 --- /dev/null +++ b/python/testData/deprecation/deprecatedAsFallback.py @@ -0,0 +1,4 @@ +try: + from urlparse import parse_qs, parse_qsl +except ImportError: + from cgi import parse_qs, parse_qsl \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyDeprecationTest.java b/python/testSrc/com/jetbrains/python/PyDeprecationTest.java index abb10de9c0f8..3a63d62acf6f 100644 --- a/python/testSrc/com/jetbrains/python/PyDeprecationTest.java +++ b/python/testSrc/com/jetbrains/python/PyDeprecationTest.java @@ -27,6 +27,12 @@ public class PyDeprecationTest extends PyTestCase { assertNotParsed((PyFile) myFixture.getFile()); } + public void testDeprecatedAsFallback() { + myFixture.enableInspections(PyDeprecationInspection.class); + myFixture.configureByFile("deprecation/deprecatedAsFallback.py"); + myFixture.checkHighlighting(true, false, false); + } + public void testDeprecatedProperty() { myFixture.enableInspections(PyDeprecationInspection.class); myFixture.configureByFile("deprecation/deprecatedProperty.py");