in java/avro-converter/src/main/java/com/microsoft/azure/schemaregistry/kafka/connect/avro/AvroConverterUtils.java [1036:1072]
private static boolean schemaEquals(Schema src, Schema that,
Map<Pair<Schema, Schema>, Boolean> cache) {
if (src == that) {
return true;
} else if (src == null || that == null) {
return false;
}
Pair<Schema, Schema> sp = Pair.of(src, that);
Boolean cacheHit = cache.putIfAbsent(sp, true);
if (cacheHit != null) {
return cacheHit;
}
boolean equals = Objects.equals(src.isOptional(), that.isOptional())
&& Objects.equals(src.version(), that.version()) && Objects.equals(src.name(), that.name())
&& Objects.equals(src.doc(), that.doc()) && Objects.equals(src.type(), that.type())
&& Objects.deepEquals(src.defaultValue(), that.defaultValue())
&& Objects.equals(src.parameters(), that.parameters());
switch (src.type()) {
case STRUCT:
equals = equals && fieldListEquals(src.fields(), that.fields(), cache);
break;
case ARRAY:
equals = equals && schemaEquals(src.valueSchema(), that.valueSchema(), cache);
break;
case MAP:
equals = equals && schemaEquals(src.valueSchema(), that.valueSchema(), cache)
&& schemaEquals(src.keySchema(), that.keySchema(), cache);
break;
default:
break;
}
cache.put(sp, equals);
return equals;
}