我目前在一个项目中处理Java的自定义注释。我想强制注释的用户,如果他用@Foo注释了方法,他必须在方法参数列表中声明至少一个final boolean b
。所以它应该是这样的:
@Foo
public void foo(final boolean b) { }
@Foo
public void bar() { } // This should result in an error
使用注释处理器,我可以检索变量的类型,但不能检索最终的修饰符。如果我想检索下面代码中所示的修改器集,那么该集将始终为空,尽管最后一个修改器出现在参数上。
for (VariableElement parameter : method.getParameters()) {
Set<Modifier> modifiers = parameter.getModifiers(); // This set is always empty
}
有什么想法,为什么会这样?
不幸的是,javax似乎没有忠实地表示参数的
类。final
修饰符(即,根据源文件)。lang.modeljavax的文档。朗。模型。元素
包装上写着(加粗):
当在注释处理的上下文中使用时,必须返回所表示元素的准确模型。由于这是一个语言模型,源代码提供了所讨论的构造的基准(引用)表示,而不是像类文件这样的可执行输出中的表示。可执行输出可以作为创建建模元素的基础。然而,将源代码转换为可执行输出的过程可能不允许恢复源代码表示的某些方面。例如,无法从类文件中恢复具有源保留的注释,并且类文件可能无法提供源位置信息。参数的名称可能无法从类文件中恢复。元素上的修饰语在某些情况下可能不同,包括:
strictfp
final
关于参数的设置我正在尝试使用注释处理器来验证注释,并且作为这项工作的一部分,我正在尝试弄清楚如何使用API来确定可执行文件的参数是否是参数化类型(例如List 除了解析ve.asType(). toString()给出的字符串之外,还有什么方法可以做到这一点吗?其中VariableElement ve是ExecutableElemente.getParameters()的一个元素?对这些类型有一个比简单的字符串
我创建了自定义注释。我将用它来注释方法参数。 我在这里找到了一些示例代码,展示了如何创建针对自定义注释的切入点。 所以现在,我创建了一个带切入点的方面。但是我不知道如何获得用注释的参数值。
问题内容: 我有一个名为@Pojo的自定义注释,可用于自动生成Wiki文档: 我这样使用它: 注释资源方法,以便注释处理器可以自动生成描述所需资源和类型的Wiki页面。 我需要在注释处理器中读取该字段的值,但出现运行时错误。 在我的处理器的源代码中,我有以下几行: 但实际的类不适用于处理器。我认为我需要一个替代品来代替实际课程。我不确定该怎么买。 我得到的错误是: 该是我的一个提到的一类注释。 不
我正在使用注释处理来生成一些类...我有两个模块,处理器本身和使用它的“客户端”模块。我想通过客户端向处理器传递一个参数,我可以这样做 如何在处理器端检索此参数?
我写的代码有一个错误消息。一切都应该是好的,因为这些例子都有相同的代码,但是不知何故我得到了一个错误。错误消息说: 期望令牌上 ")",; 语法错误-参数onOptionsItem选择的非法修饰符;只允许最终-期望令牌 "(",; 语法错误
问题内容: 我正在编写我的第一个注释处理器,但遇到一些琐碎的问题,但找不到任何有关它的信息。 我有一个带有注释的元素 当我将此属性作为处理器中的元素获取时,我似乎无法以任何方式获取元素的类型。在这种情况下,可能要获取代表String的Class或TypeElement实例。 我尝试使用实例化容器类型的类对象,但它引发了ClassNotFoundException。我认为这是因为我无法访问包含该类的