From e2f2bc616f658e6540673de0dd5814d5ee057732 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Thu, 18 Apr 2013 21:16:44 +0400 Subject: [PATCH] Use 'object' for resolving only specific attributes of 'module' (PY-7823) --- .../python/psi/impl/references/PyReferenceImpl.java | 8 +++++--- .../src/com/jetbrains/python/psi/types/PyModuleType.java | 5 +++-- .../unresolvedTopLevelInit.py | 1 + .../inspections/PyUnresolvedReferencesInspectionTest.java | 5 +++++ 4 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 python/testData/inspections/PyUnresolvedReferencesInspection/unresolvedTopLevelInit.py diff --git a/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java b/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java index 14184a573b4f..35b7773b7fe6 100644 --- a/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java @@ -298,10 +298,12 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference PyBuiltinCache builtins_cache = PyBuiltinCache.getInstance(realContext); if (uexpr == null) { // ...as a part of current module - PyType otype = builtins_cache.getObjectType(); // "object" as a closest kin to "module" String name = myElement.getName(); - if (otype != null && name != null) { - ret.addAll(otype.resolveMember(name, null, AccessDirection.READ, myContext)); + if (PyModuleType.MODULE_MEMBERS.contains(name)) { + PyType otype = builtins_cache.getObjectType(); // "object" as a closest kin to "module" + if (otype != null && name != null) { + ret.addAll(otype.resolveMember(name, null, AccessDirection.READ, myContext)); + } } } if (uexpr == null) { diff --git a/python/src/com/jetbrains/python/psi/types/PyModuleType.java b/python/src/com/jetbrains/python/psi/types/PyModuleType.java index 6213aef01a37..6a16835a05c9 100644 --- a/python/src/com/jetbrains/python/psi/types/PyModuleType.java +++ b/python/src/com/jetbrains/python/psi/types/PyModuleType.java @@ -40,7 +40,8 @@ public class PyModuleType implements PyType { // Modules don't descend from obje @NotNull private final PyFile myModule; @Nullable private final PyImportedModule myImportedModule; - protected static ImmutableSet ourPossibleFields = ImmutableSet.of("__name__", "__file__", "__path__", "__doc__", "__dict__", "__package__"); + public static final ImmutableSet MODULE_MEMBERS = ImmutableSet.of( + "__name__", "__file__", "__path__", "__doc__", "__dict__", "__package__"); public PyModuleType(@NotNull PyFile source) { this(source, null); @@ -358,7 +359,7 @@ public class PyModuleType implements PyType { // Modules don't descend from obje @NotNull public static Set getPossibleInstanceMembers() { - return ourPossibleFields; + return MODULE_MEMBERS; } } diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection/unresolvedTopLevelInit.py b/python/testData/inspections/PyUnresolvedReferencesInspection/unresolvedTopLevelInit.py new file mode 100644 index 000000000000..bfaf77fe95ca --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection/unresolvedTopLevelInit.py @@ -0,0 +1 @@ +__init__ diff --git a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java index 9e7f644ee9ba..da626814890c 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java @@ -262,6 +262,11 @@ public class PyUnresolvedReferencesInspectionTest extends PyTestCase { doTest(); } + // PY-7823 + public void testUnresolvedTopLevelInit() { + doTest(); + } + private void doTest() { myFixture.configureByFile(TEST_DIRECTORY + getTestName(true) + ".py"); myFixture.enableInspections(PyUnresolvedReferencesInspection.class);