/** * @return if method could be made abstract? (that means "create abstract version if method in * parent class") */ private static boolean couldBeAbstract(@NotNull final PyFunction function) { if (PyUtil.isInit(function)) { return false; // Who wants to make __init__ abstract?! } final PyUtil.MethodFlags flags = PyUtil.MethodFlags.of(function); assert flags != null : "Function should be called on method!"; final boolean py3K = LanguageLevel.forElement(function).isPy3K(); // TODO: use strategy because we already has the same check in #addMetaAbcIfNeeded return flags.isInstanceMethod() || py3K; // Any method could be made abstract in py3 }
@NotNull @Override public PyMemberInfo<PyFunction> apply(@NotNull final PyFunction pyFunction) { final PyUtil.MethodFlags flags = PyUtil.MethodFlags.of(pyFunction); assert flags != null : "No flags return while element is function " + pyFunction; final boolean isStatic = flags.isStaticMethod() || flags.isClassMethod(); return new PyMemberInfo<PyFunction>( pyFunction, isStatic, buildDisplayMethodName(pyFunction), isOverrides(pyFunction), this, couldBeAbstract(pyFunction)); }