diff --git a/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java b/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java index aaf3b581ef62..3ae566990e02 100644 --- a/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java +++ b/python/src/com/jetbrains/python/psi/types/PyClassTypeImpl.java @@ -12,7 +12,6 @@ import com.intellij.psi.PsiInvalidElementAccessException; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.QualifiedName; import com.intellij.util.ArrayUtil; -import com.intellij.util.ObjectUtils; import com.intellij.util.ProcessingContext; import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtil; @@ -681,7 +680,9 @@ public class PyClassTypeImpl extends UserDataHolderBase implements PyClassType { result.add(expression.getName()); } - result.addAll(ObjectUtils.notNull(myClass.getSlots(context), Collections.emptyList())); + if (myClass.isNewStyleClass(context)) { + result.addAll(ContainerUtil.notNullize(myClass.getOwnSlots())); + } for (PyClassMembersProvider provider : Extensions.getExtensions(PyClassMembersProvider.EP_NAME)) { for (PyCustomMember member : provider.getMembers(this, null, context)) { diff --git a/python/testData/inspections/PyTypeCheckerInspection/PassClassWithDunderSlotsToMethodThatUsesSlottedAttribute.py b/python/testData/inspections/PyTypeCheckerInspection/PassClassWithDunderSlotsToMethodThatUsesSlottedAttribute.py index 1bbb6b6d2a53..f4e689152c8f 100644 --- a/python/testData/inspections/PyTypeCheckerInspection/PassClassWithDunderSlotsToMethodThatUsesSlottedAttribute.py +++ b/python/testData/inspections/PyTypeCheckerInspection/PassClassWithDunderSlotsToMethodThatUsesSlottedAttribute.py @@ -2,8 +2,29 @@ class A(object): __slots__ = 'x', 'y' +class B(object): + __slots__ = ['x'] + +class C(B): + pass + + +class D(object): + pass + +class E(D): + __slots__ = ['x'] + + +class F: + __slots__ = ['x'] + + def copy_values(a): print(a.x) -copy_values(A()) \ No newline at end of file +copy_values(A()) +copy_values(C()) +copy_values(E()) +copy_values(D()) \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java index e2d22ab1d7cf..ae11e6b6da44 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java @@ -344,7 +344,7 @@ public class PyTypeCheckerInspectionTest extends PyInspectionTestCase { doTest(); } - // PY-22222 + // PY-22222, PY-29233 public void testPassClassWithDunderSlotsToMethodThatUsesSlottedAttribute() { doTest(); }