mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Don't use function annotations in overridden functions in Python 2
Python stubs use Python 3 syntax so it could be the case that a Python 2 class inherits a Python 3 class.
This commit is contained in:
@@ -204,14 +204,38 @@ public class PyOverrideImplementUtil {
|
||||
pyFunctionBuilder.decorate(PyNames.PROPERTY);
|
||||
}
|
||||
}
|
||||
final LanguageLevel level = LanguageLevel.forElement(pyClass);
|
||||
PyAnnotation anno = baseFunction.getAnnotation();
|
||||
if (anno != null) {
|
||||
if (anno != null && level.isAtLeast(LanguageLevel.PYTHON30)) {
|
||||
pyFunctionBuilder.annotation(anno.getText());
|
||||
}
|
||||
final TypeEvalContext context = TypeEvalContext.userInitiated(baseFunction.getProject(), baseFunction.getContainingFile());
|
||||
final List<PyParameter> baseParams = PyUtil.getParameters(baseFunction, context);
|
||||
for (PyParameter parameter : baseParams) {
|
||||
pyFunctionBuilder.parameter(parameter.getText());
|
||||
final PyNamedParameter namedParameter = parameter.getAsNamed();
|
||||
if (namedParameter != null) {
|
||||
final StringBuilder parameterBuilder = new StringBuilder();
|
||||
if (namedParameter.isPositionalContainer()) {
|
||||
parameterBuilder.append("*");
|
||||
}
|
||||
else if (namedParameter.isKeywordContainer()) {
|
||||
parameterBuilder.append("**");
|
||||
}
|
||||
parameterBuilder.append(namedParameter.getName());
|
||||
final PyAnnotation annotation = namedParameter.getAnnotation();
|
||||
if (annotation != null && level.isAtLeast(LanguageLevel.PYTHON30)) {
|
||||
parameterBuilder.append(annotation.getText());
|
||||
}
|
||||
final PyExpression defaultValue = namedParameter.getDefaultValue();
|
||||
if (defaultValue != null) {
|
||||
parameterBuilder.append("=");
|
||||
parameterBuilder.append(defaultValue.getText());
|
||||
}
|
||||
pyFunctionBuilder.parameter(parameterBuilder.toString());
|
||||
}
|
||||
else {
|
||||
pyFunctionBuilder.parameter(parameter.getText());
|
||||
}
|
||||
}
|
||||
|
||||
PyClass baseClass = baseFunction.getContainingClass();
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
class MyType(type):
|
||||
def __instancecheck__(cls, instance):
|
||||
<selection>return super(MyType, cls).__instancecheck__(instance)</selection>
|
||||
def __instancecheck__(self, instance):
|
||||
<selection>return super(MyType, self).__instancecheck__(instance)</selection>
|
||||
|
||||
Reference in New Issue
Block a user