package org.checkerframework.framework.util;

import java.util.Collection;
import javax.lang.model.element.AnnotationMirror;
import org.checkerframework.dataflow.qual.SideEffectFree;

/**
 * Converts AnnotationMirrors to Strings For converting AnnotatedTypeMirrors.
 *
 * @see org.checkerframework.framework.type.AnnotatedTypeFormatter
 */
public interface AnnotationFormatter {

    /**
     * Converts a collection of annotation mirrors into a String.
     *
     * @param annos a collection of annotations to print
     * @param printInvisible whether or not to print "invisible" annotation mirrors
     * @see org.checkerframework.framework.qual.InvisibleQualifier
     * @return a string representation of annos
     */
    @SideEffectFree
    public String formatAnnotationString(
            Collection<? extends AnnotationMirror> annos, boolean printInvisible);

    /**
     * Converts an individual annotation mirror into a String.
     *
     * @param anno the annotation mirror to convert
     * @return a String representation of anno
     */
    @SideEffectFree
    public String formatAnnotationMirror(AnnotationMirror anno);
}
