package annotations.field;
/*>>>
import org.checkerframework.checker.nullness.qual.*;
*/
import annotations.Annotation;
import annotations.el.AnnotationDef;
/**
* An {@link AnnotationAFT} represents a subannotation as the type of an
* annotation field and contains the definition of the subannotation.
*/
public final class AnnotationAFT extends ScalarAFT {
/**
* The definition of the subannotation.
*/
public final AnnotationDef annotationDef;
/**
* Constructs a new {@link AnnotationAFT} for a subannotation of the
* given definition.
*/
public AnnotationAFT(AnnotationDef annotationDef) {
this.annotationDef = annotationDef;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isValidValue(Object o) {
return o instanceof Annotation;
}
/**
* The string representation of an {@link AnnotationAFT} looks like
* <code>@Foo</code> even though the subannotation definition is
* logically part of the {@link AnnotationAFT}. This is because the
* subannotation field type appears as <code>@Foo</code> in an
* index file and the subannotation definition is written separately.
*/
@Override
public String toString() {
return "annotation-field " + annotationDef.name;
}
/**
* {@inheritDoc}
*/
@Override
public String format(Object o) {
return o.toString();
}
@Override
public <R, T> R accept(AFTVisitor<R, T> v, T arg) {
return v.visitAnnotationAFT(this, arg);
}
}