private Conflict checkListAndNonNullConflict()

in src/main/com/intellij/lang/jsgraphql/types/validation/rules/OverlappingFieldsCanBeMerged.java [163:188]


  private Conflict checkListAndNonNullConflict(String responseName, FieldAndType fieldAndTypeA, FieldAndType fieldAndTypeB) {

    GraphQLType typeA = fieldAndTypeA.graphQLType;
    GraphQLType typeB = fieldAndTypeB.graphQLType;

    while (true) {
      if (isNonNull(typeA) || isNonNull(typeB)) {
        if (isNullable(typeA) || isNullable(typeB)) {
          String reason = format("%s: fields have different nullability shapes", responseName);
          return new Conflict(responseName, reason, fieldAndTypeA.field, fieldAndTypeB.field);
        }
      }
      if (isList(typeA) || isList(typeB)) {
        if (!isList(typeA) || !isList(typeB)) {
          String reason = format("%s: fields have different list shapes", responseName);
          return new Conflict(responseName, reason, fieldAndTypeA.field, fieldAndTypeB.field);
        }
      }
      if (isNotWrapped(typeA) && isNotWrapped(typeB)) {
        break;
      }
      typeA = unwrapOne(typeA);
      typeB = unwrapOne(typeB);
    }
    return null;
  }