mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
Merge branch 'python-fixes'
This commit is contained in:
@@ -1270,7 +1270,7 @@ public class PyClassImpl extends PyBaseElementImpl<PyClassStub> implements PyCla
|
||||
else {
|
||||
final PyTargetExpression attribute = findClassAttribute(PyNames.DUNDER_METACLASS, false);
|
||||
if (attribute != null) {
|
||||
return attribute;
|
||||
return attribute.findAssignedValue();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -196,6 +196,9 @@ public class PyClassTypeImpl extends UserDataHolderBase implements PyClassType {
|
||||
if (inherited) {
|
||||
for (PyClassLikeType type : myClass.getAncestorTypes(context)) {
|
||||
if (type instanceof PyClassType) {
|
||||
if (!myIsDefinition) {
|
||||
type = type.toInstance();
|
||||
}
|
||||
PsiElement superMember = resolveClassMember(((PyClassType)type).getPyClass(), myIsDefinition, name, null);
|
||||
if (superMember != null) {
|
||||
return ResolveResultList.to(superMember);
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
from b import Generic
|
||||
|
||||
|
||||
class C(Generic['foo']):
|
||||
pass
|
||||
|
||||
|
||||
print(C['bar'])
|
||||
c = C()
|
||||
print(c<warning descr="Class 'C' does not define '__getitem__', so the '[]' operator cannot be used on its instances">[</warning>'baz'])
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
class GenericMeta(type):
|
||||
def __getitem__(self, args):
|
||||
pass
|
||||
|
||||
|
||||
class Generic(object):
|
||||
__metaclass__ = GenericMeta
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
class GenericMeta(type):
|
||||
def __getitem__(self, args):
|
||||
pass
|
||||
|
||||
|
||||
class Generic(object):
|
||||
__metaclass__ = GenericMeta
|
||||
|
||||
|
||||
class C(Generic['foo']):
|
||||
pass
|
||||
|
||||
|
||||
print(C['bar'])
|
||||
c = C()
|
||||
print(c<warning descr="Class 'C' does not define '__getitem__', so the '[]' operator cannot be used on its instances">[</warning>'baz'])
|
||||
@@ -418,11 +418,11 @@ public class PyStubsTest extends PyTestCase {
|
||||
final PyFile file = getTestFile();
|
||||
final PyClass c = file.findTopLevelClass("C");
|
||||
assertNotNull(c);
|
||||
assertNotNull(c.getMetaClassExpression());
|
||||
final TypeEvalContext context = TypeEvalContext.codeInsightFallback(myFixture.getProject());
|
||||
assertNotNull(c.getMetaClassType(context));
|
||||
final PyClass d = file.findTopLevelClass("D");
|
||||
assertNotNull(d);
|
||||
assertNull(d.getMetaClassExpression());
|
||||
assertNotNull(d.getMetaClassType(TypeEvalContext.codeInsightFallback(c.getProject())));
|
||||
assertNotNull(d.getMetaClassType(context));
|
||||
assertNotParsed(file);
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -431,6 +431,10 @@ public class PyUnresolvedReferencesInspectionTest extends PyInspectionTestCase {
|
||||
assertTrue(JDOMUtil.writeElement(serialized).contains("foo.Bar.*"));
|
||||
}
|
||||
|
||||
public void testMetaClassMembers() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected Class<? extends PyInspection> getInspectionClass() {
|
||||
|
||||
Reference in New Issue
Block a user