in lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java [352:397]
private void collectUsedTypes(Schema schema, Set<Conversion<?>> conversionResults,
Set<LogicalType> logicalTypeResults, Set<Schema> seenSchemas) {
if (seenSchemas.contains(schema)) {
return;
}
final LogicalType logicalType = LogicalTypes.fromSchemaIgnoreInvalid(schema);
if (logicalTypeResults != null && logicalType != null)
logicalTypeResults.add(logicalType);
final Conversion<?> conversion = specificData.getConversionFor(logicalType);
if (conversionResults != null && conversion != null)
conversionResults.add(conversion);
seenSchemas.add(schema);
switch (schema.getType()) {
case RECORD:
for (Schema.Field field : schema.getFields()) {
collectUsedTypes(field.schema(), conversionResults, logicalTypeResults, seenSchemas);
}
break;
case MAP:
collectUsedTypes(schema.getValueType(), conversionResults, logicalTypeResults, seenSchemas);
break;
case ARRAY:
collectUsedTypes(schema.getElementType(), conversionResults, logicalTypeResults, seenSchemas);
break;
case UNION:
for (Schema s : schema.getTypes())
collectUsedTypes(s, conversionResults, logicalTypeResults, seenSchemas);
break;
case NULL:
case ENUM:
case FIXED:
case STRING:
case BYTES:
case INT:
case LONG:
case FLOAT:
case DOUBLE:
case BOOLEAN:
break;
default:
throw new RuntimeException("Unknown type: " + schema);
}
}