DiffCategory checkTypeWithNonNullAndList()

in src/main/com/intellij/lang/jsgraphql/types/schema/diff/SchemaDiff.java [840:876]


  DiffCategory checkTypeWithNonNullAndList(Type oldType, Type newType) {
    TypeInfo oldTypeInfo = typeInfo(oldType);
    TypeInfo newTypeInfo = typeInfo(newType);

    if (!oldTypeInfo.getName().equals(newTypeInfo.getName())) {
      return DiffCategory.INVALID;
    }

    while (true) {
      //
      // its allowed to get more less strict in the new but not more strict
      if (oldTypeInfo.isNonNull() && newTypeInfo.isNonNull()) {
        oldTypeInfo = oldTypeInfo.unwrapOne();
        newTypeInfo = newTypeInfo.unwrapOne();
      }
      else if (oldTypeInfo.isNonNull() && !newTypeInfo.isNonNull()) {
        oldTypeInfo = oldTypeInfo.unwrapOne();
      }
      else if (!oldTypeInfo.isNonNull() && newTypeInfo.isNonNull()) {
        return DiffCategory.STRICTER;
      }
      // lists
      if (oldTypeInfo.isList() && !newTypeInfo.isList()) {
        return DiffCategory.INVALID;
      }
      // plain
      if (oldTypeInfo.isPlain()) {
        if (!newTypeInfo.isPlain()) {
          return DiffCategory.INVALID;
        }
        break;
      }
      oldTypeInfo = oldTypeInfo.unwrapOne();
      newTypeInfo = newTypeInfo.unwrapOne();
    }
    return null;
  }