private Comparator comparingDefinitions()

in src/main/com/intellij/lang/jsgraphql/types/language/AstSorter.java [280:345]


  private Comparator<Definition> comparingDefinitions() {
    Function<Definition, String> byName = d -> {
      if (d instanceof OperationDefinition) {
        String name = ((OperationDefinition)d).getName();
        return name == null ? "" : name;
      }
      if (d instanceof FragmentDefinition) {
        return ((FragmentDefinition)d).getName();
      }
      if (d instanceof DirectiveDefinition) {
        return ((DirectiveDefinition)d).getName();
      }
      if (d instanceof TypeDefinition) {
        return ((TypeDefinition)d).getName();
      }
      return "";
    };
    Function<Definition, Integer> byType = d -> {
      if (d instanceof OperationDefinition) {
        OperationDefinition.Operation operation = ((OperationDefinition)d).getOperation();
        if (OperationDefinition.Operation.QUERY == operation || operation == null) {
          return 101;
        }
        if (OperationDefinition.Operation.MUTATION == operation) {
          return 102;
        }
        if (OperationDefinition.Operation.SUBSCRIPTION == operation) {
          return 104;
        }
        return 100;
      }
      if (d instanceof FragmentDefinition) {
        return 200;
      }
      // SDL
      if (d instanceof DirectiveDefinition) {
        return 300;
      }
      if (d instanceof SchemaDefinition) {
        return 400;
      }
      if (d instanceof TypeDefinition) {
        if (d instanceof ObjectTypeDefinition) {
          return 501;
        }
        if (d instanceof InterfaceTypeDefinition) {
          return 502;
        }
        if (d instanceof UnionTypeDefinition) {
          return 503;
        }
        if (d instanceof EnumTypeDefinition) {
          return 504;
        }
        if (d instanceof ScalarTypeDefinition) {
          return 505;
        }
        if (d instanceof InputObjectTypeDefinition) {
          return 506;
        }
        return 500;
      }
      return -1;
    };
    return comparing(byType).thenComparing(byName);
  }