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());
}