| package annotations; |
| |
| /*>>> |
| import org.checkerframework.checker.nullness.qual.*; |
| */ |
| |
| import java.util.Map; |
| import java.util.Set; |
| |
| import annotations.el.AnnotationDef; |
| |
| /** |
| * A very simple {@link annotations.AnnotationFactory AnnotationFactory} that |
| * creates {@link Annotation}s. It is interested in all annotations and |
| * determines their definitions automatically from the fields supplied. Use the |
| * singleton {@link #saf}. |
| */ |
| public final class AnnotationFactory { |
| private AnnotationFactory() { |
| } |
| |
| /** |
| * The singleton {@link AnnotationFactory}. |
| */ |
| public static final AnnotationFactory saf = new AnnotationFactory(); |
| |
| /** |
| * Returns an {@link AnnotationBuilder} appropriate for building a |
| * {@link Annotation} of the given type name. |
| */ |
| public AnnotationBuilder beginAnnotation(AnnotationDef def) { |
| return new AnnotationBuilder(def); |
| } |
| |
| /** |
| * Returns an {@link AnnotationBuilder}. |
| * Tries to look up the AnnotationDef in adefs; if not found, inserts in adefs. |
| */ |
| public AnnotationBuilder beginAnnotation(java.lang.annotation.Annotation a, Map<String, AnnotationDef> adefs) { |
| AnnotationDef def = AnnotationDef.fromClass(a.getClass(), adefs); |
| return new AnnotationBuilder(def); |
| } |
| |
| /** |
| * Returns an {@link AnnotationBuilder} appropriate for building a |
| * {@link Annotation} of the given type name. |
| */ |
| public AnnotationBuilder beginAnnotation(String typeName, Set<Annotation> tlAnnotationsHere) { |
| assert typeName != null; |
| return new AnnotationBuilder(typeName, tlAnnotationsHere); |
| } |
| } |