public static boolean process(
      @NotNull PropertyProcessor processor, @NotNull JsonSchemaObject startSchema) {
    if (!processForVariants(processor, startSchema.getAnyOf())
        || !processForVariants(processor, startSchema.getOneOf())
        || !processForVariants(processor, startSchema.getAllOf())) {
      return false;
    }

    final Map<String, JsonSchemaObject> properties = startSchema.getProperties();
    for (Map.Entry<String, JsonSchemaObject> entry : properties.entrySet()) {
      if (!processor.process(entry.getKey(), entry.getValue())) {
        return false;
      }
    }

    return true;
  }