default boolean processChangedClasses(DifferentiateContext context, Iterable<Difference.Change<JvmClass, JvmClass.Diff>> changed, Utils future, Utils present) {
    for (Difference.Change<JvmClass, JvmClass.Diff> change : changed) {
      if (!processChangedClass(context, change, future, present)) {
        return false;
      }

      JvmClass changedClass = change.getPast();

      Difference.Specifier<JvmMethod, JvmMethod.Diff> methodsDiff = change.getDiff().methods();
      if (!methodsDiff.unchanged()) {
        if (!processRemovedMethods(context, change, methodsDiff.removed(), future, present)) {
          return false;
        }
        if (!processAddedMethods(context, change, methodsDiff.added(), future, present)) {
          return false;
        }
        if (!processChangedMethods(context, change, methodsDiff.changed(), future, present)) {
          return false;
        }
      }

      Difference.Specifier<JvmField, JvmField.Diff> fieldsDiff = change.getDiff().fields();
      if (!fieldsDiff.unchanged()) {
        if (!processRemovedFields(context, change, fieldsDiff.removed(), future, present)) {
          return false;
        }
        if (!processAddedFields(context, change, fieldsDiff.added(), future, present)) {
          return false;
        }
        if (!processChangedFields(context, change, fieldsDiff.changed(), future, present)) {
          return false;
        }
      }
    }
    return true;
  }
default boolean processChangedClasses(DifferentiateContext context, Iterable<Difference.Change<JvmClass, JvmClass.Diff>> changed, Utils future, Utils present)