blob: 08bd6be7a8523ed7d3bf61c94eac266eb025e542 [file] [log] [blame]
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>&#64;Foo</code> even though the subannotation definition is
* logically part of the {@link AnnotationAFT}. This is because the
* subannotation field type appears as <code>&#64;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);
}
}