private void checkEnumType()

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