mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Add tests about matching __slots__ against structural type (PY-29233)
This commit is contained in:
@@ -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)) {
|
||||
|
||||
+22
-1
@@ -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())
|
||||
copy_values(A())
|
||||
copy_values(C())
|
||||
copy_values(E())
|
||||
copy_values(<warning descr="Type 'D' doesn't have expected attribute 'x'">D()</warning>)
|
||||
@@ -344,7 +344,7 @@ public class PyTypeCheckerInspectionTest extends PyInspectionTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
// PY-22222
|
||||
// PY-22222, PY-29233
|
||||
public void testPassClassWithDunderSlotsToMethodThatUsesSlottedAttribute() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user