I think it is implemented this way because it must support an unresolved
annotation. That is, you may have a transform that runs before ResolveVisitor
fills in all the type information. The transform can only ask for what is
present in the AST. If it wants to use the default values of any annotation
method, it can supply the annotation class. You can get the default value by
reflection like this and that could be passed as the default to return or you
could use ?: logic.
// excerpt of void visit(ASTNode[] nodes, SourceUnit source)
AnnotationNode node = (AnnotationNode) nodes[0];
String value = getMemberStringValue(node, "name",
AnnoType.class.getMethod("name").getDefaultValue());