diff --git a/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java b/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java index 1fa26e2e302d..e25943aaa1c0 100644 --- a/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java +++ b/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java @@ -48,6 +48,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; +import java.util.stream.Collectors; /** * @author yole @@ -310,8 +311,11 @@ public class PyClassTypeImpl extends UserDataHolderBase implements PyClassType { final List typeInstanceAttributes = ((PyClassType)typeType).getPyClass().getInstanceAttributes(); if (!ContainerUtil.isEmpty(typeInstanceAttributes)) { - return ContainerUtil - .map(typeInstanceAttributes, member -> new RatedResolveResult(PyReferenceImpl.getRate(member, context), member)); + return typeInstanceAttributes + .stream() + .filter(member -> name.equals(member.getName())) + .map(member -> new RatedResolveResult(PyReferenceImpl.getRate(member, context), member)) + .collect(Collectors.toList()); } } diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection3K/nonexistentMetaclassAttribute.py b/python/testData/inspections/PyUnresolvedReferencesInspection3K/nonexistentMetaclassAttribute.py new file mode 100644 index 000000000000..210603a30141 --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection3K/nonexistentMetaclassAttribute.py @@ -0,0 +1,10 @@ +class Meta(type): + def __new__(cls, name, bases, attrs): + foo = "abc" + + +class A(metaclass=Meta): + pass + + +print(A().bar) diff --git a/python/testSrc/com/jetbrains/python/inspections/Py3UnresolvedReferencesInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/Py3UnresolvedReferencesInspectionTest.java index a864796fe868..3b707ae9c67c 100644 --- a/python/testSrc/com/jetbrains/python/inspections/Py3UnresolvedReferencesInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/Py3UnresolvedReferencesInspectionTest.java @@ -100,6 +100,11 @@ public class Py3UnresolvedReferencesInspectionTest extends PyTestCase { doTest(); } + // PY-19702 + public void testNonexistentMetaclassAttribute() { + doTest(); + } + public void testMetaclassStub() { doMultiFileTest("a.py"); final Project project = myFixture.getProject();