protected void addFields(Cell column, String name, ColumnDefinition columnDefinition, List<Field> fields) {
boolean isObject = options.isObject(name);
if (isObject) {
String value = UTF8Type.instance.compose(column.value());
JsonDocument document = new StreamingJsonDocument(value, options.primary, name);
fields.addAll(document.getFields());
} else if (column.name().isCollectionCell()) {
List<Field> fieldsForField = collectionFields((CollectionType) columnDefinition.type, name, column);
fields.addAll(fieldsForField);
} else {
FieldType fieldType = options.fieldTypes.get(name);
Type type = options.types.get(name);
addField(type, columnDefinition, name, fieldType, column.value(), fields);
if (options.containsDocValues()) {
FieldType docValueType = options.fieldDocValueTypes.get(name);
if (docValueType != null) {
Field docValueField = Fields.docValueField(name, columnDefinition.type, column.value(), docValueType);
fields.add(docValueField);
}
}
}
}