在注释处理环境中获取静态初始值设定项

Get static initializer in annotation processing environment

这是来自 javax.lang.model.element.ExecutableElement.getSimpleName()

的 javadoc

Returns the simple name of a constructor, method, or initializer. For a constructor, the name "init" is returned, for a static initializer, the name "clinit" is returned, and for an anonymous class or instance initializer, an empty name is returned.

注意粗体部分说 for a static initalizer,这意味着 ExecutableElement 可以表示 static initalizer

那么如何在注解处理环境中获取静态初始化器呢?此外,这是否意味着我们可以在静态块上添加注释(尽管我们不能直到 java8)?

您不能注释静态初始值设定项。但您仍然可以访问它。

表示中的所有元素都可用,无论您如何访问它。

例如如果你注释一个 class,包含静态初始值设定项,你将得到它的 TypeElement 表示,你可以使用 getEnclosedElements().

获得所有字段、方法、构造函数和初始值设定项

在循环中你可以测试元素的种类。 对于静态初始化程序使用:

element.getKind() == ElementKind.STATIC_INIT

例如初始化程序使用

element.getKind() == ElementKind.INSTANCE_INIT

现在一个重要的问题是,你究竟需要达到什么目的。如何使用初始化器。

如果您在注释处理期间访问它,您可能会发现有一个初始化程序,但仅此而已。例如。 body 表示不可用。

如果你想检查初始化器的 body,你必须使用 Java 8 中引入的编译器插件 API,使用 TaskListener.