boolean (Processor<? super PyTargetExpression> processor, boolean inherited, @Nullable final TypeEvalContext context) { List<PyTargetExpression> methods = getClassAttributes(); if (!ContainerUtil.process(methods, processor)) return false; if (inherited) { for (PyClass ancestor : getAncestorClasses(context)) { if (!ancestor.visitClassAttributes(processor, false, context)) { return false; } } } return true; // NOTE: sorry, not enough metaprogramming to generalize visitMethods and visitClassAttributes }