如何创建处理局部变量的注释处理器?

我正在尝试为局部变量创建注释。 我知道我不能在生成的字节码中保留注释,但我应该能够通过执行以下操作在编译时访问信息:

@Target({ElementType.LOCAL_VARIABLE}) @Retention(RetentionPolicy.SOURCE) public @interface Junk { String value(); } 

只有当我在下面指定一个支持其类型的“垃圾”的ProcessorFactory时,这不会被apt或javac处理:

 class JunkTester { public static void main(String[] args) { @Junk String tmp = "Hello World"; System.out.println(tmp); } } 

但是,当我在public static之前移动@Junk注释时,它将起作用

思考和/或解决方法?

做了一些快速测试并进行了一些搜索,看起来好像没有真正支持LOCAL_VARIABLE ……但是:

http://forums.sun.com/thread.jspa?threadID=775449
http://www.cs.rice.edu/~mgricken/research/laptjavac/
https://checkerframework.org/jsr308/

可能完全错了,但这就是它的样子……

似乎类型注释规范(JSR 308)将来有望解决这个问题( JDK 8 ?)。

从Java 8开始,局部变量注释存储在类文件中。

标准Java注释处理器不处理方法体。 但是, Checker Framework允许您编写一个处理每个注释的注释处理器,包括局部变量。 它的注释处理器甚至可以检查程序的每个语句,无论是否注释。