@Override
public TypeBuilder<?> handle(Schema schema, BaseTypeBuilder root, HandlerManager handlerManager,
ParsingContext parsingContext) {
final CombinedSchema combinedSchema = (CombinedSchema) schema;
final Collection<Schema> subschemas = combinedSchema.getSubschemas();
if (combinedSchema.getCriterion() == CombinedSchema.ANY_CRITERION
|| combinedSchema.getCriterion() == CombinedSchema.ONE_CRITERION) {
final UnionTypeBuilder unionType = root.unionType();
for (Schema subschema : subschemas) {
unionType.of(handlerManager.handle(subschema, parsingContext));
}
return unionType;
} else if (combinedSchema.getCriterion() == CombinedSchema.ALL_CRITERION) {
final IntersectionTypeBuilder intersectionType = root.intersectionType();
for (Schema subschema : subschemas) {
intersectionType.of(handlerManager.handle(subschema, parsingContext));
}
return intersectionType;
}
return root.anyType();
}
}