[JSR308] Receiver on field initializers
    Artemus Harper 
    subanark at gmail.com
       
    Fri May  9 15:21:54 EDT 2008
    
    
  
What exactly is the annotations on the receiver of a field initializer?
The problem is that although a constructor can have its receiver annotated,
it will implicitly initialize fields (for those that have an initializer).
The initializer for those fields may refer to this.
E.g.
public class Test {
   public String s = test();
   public Test() @SomeAnnotation {
   }
   public String test()
   {
      //Uses 'this'
      return "Test";
   }
}
Also, when I tried to ask the API for the receiver I got an exception (In my
case I'm doing escape analysis):
public class EscapeVisitor extends BaseTypeVisitor<Void, Void> {
    @Override
    public Void visitVariable(VariableTree node, Void p) {
        AnnotatedTypeMirror type =
factory.getReceiver(node.getInitializer()); //throws exception
    }
}
Stack Trace:
java.lang.IllegalArgumentException: null tree
        at
checkers.types.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:540)
        at
checkers.types.AnnotatedTypeFactory.getCurrentMethodReceiver(AnnotatedTypeFactory.java:669)
        at
checkers.types.AnnotatedTypeFactory.getSelfType(AnnotatedTypeFactory.java:681)
        at
checkers.types.AnnotatedTypeFactory.getReceiver(AnnotatedTypeFactory.java:722)
getSelfType seems to assume that the expression is in a method.
-- 
Artemus Harper
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.csail.mit.edu/pipermail/jsr308/attachments/20080509/6a08fe4a/attachment.htm 
    
    
More information about the JSR308
mailing list