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