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

Java 如何创建处理局部变量的注释处理器?,java,annotations,Java,Annotations,我正在尝试为局部变量创建注释。我知道我不能在生成的字节码中保留注释,但我应该能够在编译时通过以下操作访问信息: @Target({ElementType.LOCAL_VARIABLE}) @Retention(RetentionPolicy.SOURCE) public @interface Junk { String value(); } 只是,当我在下面指定了一个ProcessorFactory,该ProcessorFactory在其支持的类型中包含“垃圾”时,apt或javac不会处

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

@Target({ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface Junk {
  String value();
}
只是,当我在下面指定了一个ProcessorFactory,该ProcessorFactory在其支持的类型中包含“垃圾”时,apt或javac不会处理这个问题:

class JunkTester {
    public static void main(String[] args) {
        @Junk String tmp = "Hello World";
        System.out.println(tmp);
    }
}
但是,当我将@Junk注释移到public static之前时,它将起作用


想法和/或解决方法?

做了一些快速测试并进行了一些搜索,它看起来像是挂接到了
局部变量中,但实际上并不支持该变量。




可能是完全错误的,但它看起来就是这样的…

似乎,希望将来能够解决这个问题(?)

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

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

好奇:你想用@Junk注释局部变量做什么?@Junk显然只是一个例子,但最终我想从真正的注释生成代码。是的,但如果你这样做,您正在操作方法内部的代码,对吗?在注释处理器中,这似乎相当困难。我想在编译时提取一些信息,以创建一个静态对象,其中包含运行时相关的信息。@不可修复-您不能操作现有代码,但可以基于注释生成新代码。这也是我的发现。我不确定除了像laptjavac这样的新编译器之外,是否还有其他的解决方法。我还看到,
@SuppressWarnings
,根据有效的Java工作,它作为
局部变量
注释,在javac中是一种特殊情况,因此看起来不太好。正确。从Java8开始,局部变量注释存储在类文件中。