private void collectUsedTypes()

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