in src/main/com/intellij/lang/jsgraphql/types/schema/diff/SchemaDiff.java [400:456]
private void checkEnumType(DiffCtx ctx, EnumTypeDefinition oldDef, EnumTypeDefinition newDef) {
Map<String, EnumValueDefinition> oldDefinitionMap = sortedMap(oldDef.getEnumValueDefinitions(),
EnumValueDefinition::getName);
Map<String, EnumValueDefinition> newDefinitionMap = sortedMap(newDef.getEnumValueDefinitions(),
EnumValueDefinition::getName);
for (String enumName : oldDefinitionMap.keySet()) {
EnumValueDefinition oldEnum = oldDefinitionMap.get(enumName);
Optional<EnumValueDefinition> newEnum = Optional.ofNullable(newDefinitionMap.get(enumName));
if (newEnum.isEmpty()) {
DiffCategory category;
String message;
if (isDeprecated(oldEnum)) {
category = DiffCategory.DEPRECATION_REMOVED;
message = "The new API has removed a deprecated enum value '%s'";
}
else {
category = DiffCategory.MISSING;
message = "The new API is missing an enum value '%s'";
}
ctx.report(DiffEvent.apiBreakage()
.category(category)
.typeName(oldDef.getName())
.typeKind(getTypeKind(oldDef))
.components(oldEnum.getName())
.reasonMsg(message, oldEnum.getName())
.build());
}
else {
checkDirectives(ctx, oldDef, oldEnum.getDirectives(), newEnum.get().getDirectives());
}
}
for (String enumName : newDefinitionMap.keySet()) {
EnumValueDefinition oldEnum = oldDefinitionMap.get(enumName);
if (oldEnum == null) {
ctx.report(DiffEvent.apiDanger()
.category(DiffCategory.ADDITION)
.typeName(oldDef.getName())
.typeKind(getTypeKind(oldDef))
.components(enumName)
.reasonMsg("The new API has added a new enum value '%s'", enumName)
.build());
}
else if (isDeprecated(newDefinitionMap.get(enumName))) {
ctx.report(DiffEvent.apiDanger()
.category(DiffCategory.DEPRECATION_ADDED)
.typeName(oldDef.getName())
.typeKind(getTypeKind(oldDef))
.components(enumName)
.reasonMsg("The new API has deprecated an enum value '%s'", enumName)
.build());
}
}
checkDirectives(ctx, oldDef, newDef);
}