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

时间:2010-07-19 22:38:26

标签: java annotations

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

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

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

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

当我在public static

之前移动@Junk注释时,它会起作用

思考和/或解决方法?

3 个答案:

答案 0 :(得分:8)

做了一些快速测试并进行了一些搜索,看起来好像挂钩LOCAL_VARIABLE并不支持......但是:

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

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

答案 1 :(得分:5)

似乎Type Annotations Specification (JSR 308),希望将来可以解决这个问题(JDK 8?)。

答案 2 :(得分:2)

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

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