[JSR308] help on a simple example

Mahmood Ali mahmood at MIT.EDU
Tue Oct 28 11:33:41 EDT 2008


Greetings Florin,

Thanks for describing your problem better.  Supplying the necessary  
files helps us reproduce the behavior and understand the problem.

The compiler here is behaving as expected actually.  As you have  
observed, the compiler is not emitting a syntax error for  
'List<@def.Annotation String>'.  This indicates that your setup and  
configuration is correct.

The problem here is your reliance on  
RoundEnvironment.getElementsAnnotatedWith().  Type annotations (e.g.  
within type argument, method receivers, etc) do not annotate elements,  
but rather annotate types.  Hence, .getElementsAnnotatedWith() would  
only return elements that are annotated in pre-JSR308 manner (e.g.  
annotations on class declaration).

Try the following checker:

@TypeQualifiers({def.Annotation.class})
public class MyAnnotationProcessor extends SourceChecker {
   @Override
   protected SourceVisitor<?,?>  
createSourceVisitor(CompilationUnitTree tree) {
     return new SourceVisitor<Void, Void>(this, tree) {
       @Override
       public Void visitAnnotatedType(AnnotatedTypeTree node, Void p) {
           System.out.println("found: " + node);
           return super.visitAnnotatedType(node, p);
       }
     };
   }
}

The provided checker has a tree visitor that traverse your code (i.e.  
AST nodes) looking for annotated types, so it should print 'found:  
@def.Annotation String' on your input.

Regards,
Mahmood





More information about the JSR308 mailing list