Check __metaclass__ attribute only for Python 2.x

This commit is contained in:
Andrey Vlasovskikh
2014-01-20 23:33:51 +04:00
parent bf9a384d08
commit 92107d2468
@@ -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;
}