in src/main/com/intellij/lang/jsgraphql/types/schema/diff/SchemaDiff.java [686:754]
private void checkFieldArg(DiffCtx ctx,
TypeDefinition oldDef,
FieldDefinition oldField,
InputValueDefinition oldArg,
InputValueDefinition newArg) {
Type oldArgType = oldArg.getType();
Type newArgType = newArg.getType();
DiffCategory category = checkTypeWithNonNullAndList(oldArgType, newArgType);
if (category != null) {
ctx.report(DiffEvent.apiBreakage()
.category(category)
.typeName(oldDef.getName())
.typeKind(getTypeKind(oldDef))
.fieldName(oldField.getName())
.components(getAstDesc(oldArgType), getAstDesc(newArgType))
.reasonMsg("The new API has changed field '%s' argument '%s' from type '%s' to '%s'",
mkDotName(oldDef.getName(), oldField.getName()), oldArg.getName(), getAstDesc(oldArgType),
getAstDesc(newArgType))
.build());
}
else {
//
// and down we go again recursively via arg types
//
checkType(ctx, oldArgType, newArgType);
}
boolean changedDefaultValue = false;
Value oldValue = oldArg.getDefaultValue();
Value newValue = newArg.getDefaultValue();
if (oldValue != null && newValue != null) {
if (!oldValue.getClass().equals(newValue.getClass())) {
ctx.report(DiffEvent.apiBreakage()
.category(DiffCategory.INVALID)
.typeName(oldDef.getName())
.typeKind(getTypeKind(oldDef))
.fieldName(oldField.getName())
.components(oldArg.getName())
.reasonMsg(
"The new API has changed default value types on argument named '%s' on field '%s' of type '%s",
oldArg.getName(), mkDotName(oldDef.getName(), oldField.getName()), oldDef.getName())
.build());
}
if (!oldValue.isEqualTo(newValue)) {
changedDefaultValue = true;
}
}
if (oldValue == null && newValue != null) {
changedDefaultValue = true;
}
if (oldValue != null && newValue == null) {
changedDefaultValue = true;
}
if (changedDefaultValue) {
ctx.report(DiffEvent.apiDanger()
.category(DiffCategory.DIFFERENT)
.typeName(oldDef.getName())
.typeKind(getTypeKind(oldDef))
.fieldName(oldField.getName())
.components(oldArg.getName())
.reasonMsg("The new API has changed default value on argument named '%s' on field '%s' of type '%s",
oldArg.getName(), mkDotName(oldDef.getName(), oldField.getName()), oldDef.getName())
.build());
}
checkDirectives(ctx, oldDef, oldArg.getDirectives(), newArg.getDirectives());
}