private void checkOperation()

in src/main/com/intellij/lang/jsgraphql/types/schema/diff/SchemaDiff.java [103:154]


  private void checkOperation(DiffCtx ctx,
                              String opName,
                              Optional<SchemaDefinition> oldSchemaDef,
                              Optional<SchemaDefinition> newSchemaDef) {
    // if schema declaration is missing then it is assumed to contain Query / Mutation / Subscription
    Optional<OperationTypeDefinition> oldOpTypeDef;
    oldOpTypeDef = oldSchemaDef
      .map(schemaDefinition -> getOpDef(opName, schemaDefinition))
      .orElseGet(() -> synthOperationTypeDefinition(type -> ctx.getOldTypeDef(type, ObjectTypeDefinition.class),
                                                    opName));

    Optional<OperationTypeDefinition> newOpTypeDef;
    newOpTypeDef = newSchemaDef
      .map(schemaDefinition -> getOpDef(opName, schemaDefinition))
      .orElseGet(() -> synthOperationTypeDefinition(type -> ctx.getNewTypeDef(type, ObjectTypeDefinition.class),
                                                    opName));

    // must be new
    if (oldOpTypeDef.isEmpty()) {
      return;
    }

    ctx.report(DiffEvent.apiInfo()
                 .typeName(capitalize(opName))
                 .typeKind(TypeKind.Operation)
                 .components(opName)
                 .reasonMsg("Examining operation '%s' ...", capitalize(opName))
                 .build());

    if (oldOpTypeDef.isPresent() && newOpTypeDef.isEmpty()) {
      ctx.report(DiffEvent.apiBreakage()
                   .category(DiffCategory.MISSING)
                   .typeName(capitalize(opName))
                   .typeKind(TypeKind.Operation)
                   .components(opName)
                   .reasonMsg("The new API no longer has the operation '%s'", opName)
                   .build());
      return;
    }

    OperationTypeDefinition oldOpTypeDefinition = oldOpTypeDef.get();
    OperationTypeDefinition newOpTypeDefinition = newOpTypeDef.get();

    Type oldType = oldOpTypeDefinition.getTypeName();
    //
    // if we have no old op, then it must have been added (which is ok)
    Optional<TypeDefinition> oldTD = ctx.getOldTypeDef(oldType, TypeDefinition.class);
    if (oldTD.isEmpty()) {
      return;
    }
    checkType(ctx, oldType, newOpTypeDefinition.getTypeName());
  }