class AnnotationView implements Transform<Annotation, String>,
        HasJavadocView<Annotation>,
        HasAnnotationUsageView<Annotation>,
        HasNameView<Annotation> {

    @Override
    public Optional<String> transform(Generator gen, Annotation model) {<FILL_FUNCTION_BODY>}
}

        requireNonNulls(gen, model);

        return Optional.of(
            renderAnnotations(gen, model)
            + renderAnnotations(gen, model)
            + "@interface "
            + renderName(gen, model)
            + block(
                model.getFields().stream().map(f
                    -> // Field javadoc (optional)
                    renderJavadoc(gen, model)
                    + // Field declaration
                    gen.on(f.getType()) + " " + f.getName() + "()"
                    + // Default value (optional)
                    ifelse(gen.on(f.getValue()), v -> " default " + v, "")
                    + ";"
                ).collect(joining(dnl()))
            )
        );
    
<no_super_class>