diff --git a/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java b/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java index fc60616b5fe7..6c062b02b35a 100644 --- a/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java @@ -21,6 +21,7 @@ import com.intellij.codeInspection.ProblemsHolder; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.PsiPolyVariantReference; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; @@ -58,7 +59,14 @@ public class PyDeprecationInspection extends PyInspection { final PyExpression exceptClass = exceptPart.getExceptClass(); if (exceptClass != null && "ImportError".equals(exceptClass.getText())) return; } - PsiElement resolveResult = node.getReference(getResolveContext()).resolve(); + final PsiPolyVariantReference reference = node.getReference(getResolveContext()); + if (reference == null) return; + final PsiElement resolveResult = reference.resolve(); + final PyFromImportStatement importStatement = PsiTreeUtil.getParentOfType(node, PyFromImportStatement.class); + if (importStatement != null) { + final PsiElement element = importStatement.resolveImportSource(); + if (resolveResult != null && element != resolveResult.getContainingFile()) return; + } String deprecationMessage = null; if (resolveResult instanceof PyFunction) { deprecationMessage = ((PyFunction) resolveResult).getDeprecationMessage(); diff --git a/python/testData/deprecation/deprecatedAsFallback.py b/python/testData/deprecation/deprecatedAsFallback.py index 5302aeca7437..f5f87643d0fa 100644 --- a/python/testData/deprecation/deprecatedAsFallback.py +++ b/python/testData/deprecation/deprecatedAsFallback.py @@ -1,4 +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 + from tmp import bar \ No newline at end of file diff --git a/python/testData/deprecation/deprecatedFallback2.py b/python/testData/deprecation/deprecatedFallback2.py new file mode 100644 index 000000000000..02621d265d9a --- /dev/null +++ b/python/testData/deprecation/deprecatedFallback2.py @@ -0,0 +1 @@ +from deprecatedAsFallback import bar \ No newline at end of file diff --git a/python/testData/deprecation/tmp.py b/python/testData/deprecation/tmp.py new file mode 100644 index 000000000000..c0b74311e133 --- /dev/null +++ b/python/testData/deprecation/tmp.py @@ -0,0 +1,3 @@ +def bar(): + import warnings + warnings.warn("this is deprecated", DeprecationWarning, 2) diff --git a/python/testSrc/com/jetbrains/python/PyDeprecationTest.java b/python/testSrc/com/jetbrains/python/PyDeprecationTest.java index dffa4bc8bb04..595a8bd9f462 100644 --- a/python/testSrc/com/jetbrains/python/PyDeprecationTest.java +++ b/python/testSrc/com/jetbrains/python/PyDeprecationTest.java @@ -55,7 +55,13 @@ public class PyDeprecationTest extends PyTestCase { public void testDeprecatedAsFallback() { myFixture.enableInspections(PyDeprecationInspection.class); - myFixture.configureByFile("deprecation/deprecatedAsFallback.py"); + myFixture.configureByFiles("deprecation/deprecatedAsFallback.py", "deprecation/tmp.py"); + myFixture.checkHighlighting(true, false, false); + } + + public void testDeprecatedFallback2() { + myFixture.enableInspections(PyDeprecationInspection.class); + myFixture.configureByFiles("deprecation/deprecatedFallback2.py", "deprecation/tmp.py", "deprecation/deprecatedAsFallback.py"); myFixture.checkHighlighting(true, false, false); }