From 81672ebe207ec0d72711bfe912219c3bf75b6eb4 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Thu, 30 Aug 2012 16:58:53 +0400 Subject: [PATCH] Fixed unresolved __qualname__ for instances and functions in Python 3.3 (PY-6745) --- .../inspections/PyUnresolvedReferencesInspection.java | 5 +++++ .../qualNameAttribute.py | 10 ++++++++++ .../PyUnresolvedReferencesInspectionTest.java | 11 +++++++++++ 3 files changed, 26 insertions(+) create mode 100644 python/testData/inspections/PyUnresolvedReferencesInspection/qualNameAttribute.py diff --git a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java index 03dab57430dc..35f927ce0e4a 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java @@ -449,6 +449,11 @@ public class PyUnresolvedReferencesInspection extends PyInspection { if (description == null) { boolean marked_qualified = false; if (element instanceof PyQualifiedExpression) { + // TODO: Add __qualname__ for Python 3.3 to the skeleton of , introduce a pseudo-class skeleton for + // + if ("__qualname__".equals(ref_text) && LanguageLevel.forElement(element).isAtLeast(LanguageLevel.PYTHON33)) { + return; + } final PyQualifiedExpression qexpr = (PyQualifiedExpression)element; if (PyNames.COMPARISON_OPERATORS.contains(qexpr.getReferencedName()) || refname == null) { return; diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection/qualNameAttribute.py b/python/testData/inspections/PyUnresolvedReferencesInspection/qualNameAttribute.py new file mode 100644 index 000000000000..f1bb4a6e0d01 --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection/qualNameAttribute.py @@ -0,0 +1,10 @@ +class C: + pass + +def f(x): + x.__qualname__ #pass + +C.__qualname__ #pass +c = C() +c.__qualname__ #pass +f.__qualname__ #pass diff --git a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java index a5bbed89e7b9..71642e4d361f 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java @@ -1,6 +1,7 @@ package com.jetbrains.python.inspections; import com.jetbrains.python.fixtures.PyTestCase; +import com.jetbrains.python.psi.LanguageLevel; import org.jetbrains.annotations.NotNull; /** @@ -190,6 +191,16 @@ public class PyUnresolvedReferencesInspectionTest extends PyTestCase { doTest(); } + // PY-6745 + public void testQualNameAttribute() { + runWithLanguageLevel(LanguageLevel.PYTHON33, new Runnable() { + @Override + public void run() { + doTest(); + } + }); + } + private void doTest() { myFixture.configureByFile(TEST_DIRECTORY + getTestName(true) + ".py"); myFixture.enableInspections(PyUnresolvedReferencesInspection.class);