mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-06 06:21:16 +07:00
Check __metaclass__ attribute only for Python 2.x
This commit is contained in:
@@ -1172,27 +1172,8 @@ public class PyClassImpl extends PyPresentableElementImpl<PyClassStub> implement
|
||||
@Nullable
|
||||
@Override
|
||||
public PyClassLikeType getMetaClassType(@NotNull TypeEvalContext context) {
|
||||
final PyTargetExpression metaClassAttribute = findClassAttribute(PyNames.DUNDER_METACLASS, false);
|
||||
if (metaClassAttribute != null) {
|
||||
final PyExpression expression = metaClassAttribute.findAssignedValue();
|
||||
final PyClass metaclass = getMetaFromExpression(expression);
|
||||
if (metaclass != null) {
|
||||
return new PyClassTypeImpl(metaclass, false);
|
||||
}
|
||||
}
|
||||
final PsiFile containingFile = getContainingFile();
|
||||
if (containingFile instanceof PyFile) {
|
||||
final PsiElement element = ((PyFile)containingFile).getElementNamed(PyNames.DUNDER_METACLASS);
|
||||
if (element instanceof PyTargetExpression) {
|
||||
final PyExpression expression = ((PyTargetExpression)element).findAssignedValue();
|
||||
final PyClass metaclass = getMetaFromExpression(expression);
|
||||
if (metaclass != null) {
|
||||
return new PyClassTypeImpl(metaclass, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (LanguageLevel.forElement(this).isPy3K()) {
|
||||
final LanguageLevel level = LanguageLevel.forElement(this);
|
||||
if (level.isAtLeast(LanguageLevel.PYTHON30)) {
|
||||
final PyExpression[] superClassExpressions = getSuperClassExpressions();
|
||||
for (PyExpression superClassExpression : superClassExpressions) {
|
||||
if (superClassExpression instanceof PyKeywordArgument &&
|
||||
@@ -1205,6 +1186,27 @@ public class PyClassImpl extends PyPresentableElementImpl<PyClassStub> implement
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
final PyTargetExpression metaClassAttribute = findClassAttribute(PyNames.DUNDER_METACLASS, false);
|
||||
if (metaClassAttribute != null) {
|
||||
final PyExpression expression = metaClassAttribute.findAssignedValue();
|
||||
final PyClass metaclass = getMetaFromExpression(expression);
|
||||
if (metaclass != null) {
|
||||
return new PyClassTypeImpl(metaclass, false);
|
||||
}
|
||||
}
|
||||
final PsiFile containingFile = getContainingFile();
|
||||
if (containingFile instanceof PyFile) {
|
||||
final PsiElement element = ((PyFile)containingFile).getElementNamed(PyNames.DUNDER_METACLASS);
|
||||
if (element instanceof PyTargetExpression) {
|
||||
final PyExpression expression = ((PyTargetExpression)element).findAssignedValue();
|
||||
final PyClass metaclass = getMetaFromExpression(expression);
|
||||
if (metaclass != null) {
|
||||
return new PyClassTypeImpl(metaclass, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user