class FulltextIndexer implements ValueIndexer<String> {

    private final Reference ref;
    private final FieldType fieldType;

    public FulltextIndexer(Reference ref, FieldType fieldType) {
        this.ref = ref;
        this.fieldType = fieldType;
    }

    @Override
    public void indexValue(String value,
                           XContentBuilder xcontentBuilder,
                           Consumer<? super IndexableField> addField,
                           Map<ColumnIdent, Indexer.Synthetic> synthetics,
                           Map<ColumnIdent, Indexer.ColumnConstraint> toValidate) throws IOException {<FILL_FUNCTION_BODY>}
}

        xcontentBuilder.value(value);
        if (value == null) {
            return;
        }
        String name = ref.storageIdent();
        if (fieldType.indexOptions() != IndexOptions.NONE || fieldType.stored()) {
            Field field = new Field(name, value, fieldType);
            addField.accept(field);

            if (fieldType.omitNorms()) {
                addField.accept(new Field(
                    FieldNamesFieldMapper.NAME,
                    name,
                    FieldNamesFieldMapper.Defaults.FIELD_TYPE));
            }
        }
    
<no_super_class>