我有一些带有自定义注释的接口(interface),用于添加元数据。具体来说,这些接口(interface)代表数据库中的表,注释说明接口(interface)应映射到哪个表以及属性是什么列。
我使用注释处理来生成代码文件,这些文件执行一些工作,例如从数据库加载数据等。我还有一个 ValidationProcessor
,如果所有需要的元数据都可用,它应该验证接口(interface)等等。当我验证注释时,我想显示警告和错误,以便清楚什么不正确以及问题发生在哪里。
为了打印消息,我使用 Messager API。这是我使用的代码,其中 kind
是例如Kind.ERROR
,msg 是消息,element 是发生错误的元素(它是实现 Element
接口(interface)的 Type)。
processingEnv.getMessager().printMessage(kind, msg, element, null, null);
根据我的互联网研究(包括 stackoverflow 上的类似文章),这应该是正确显示消息的方式。然而,消息并未显示。
我的问题是,有人知道可能出了什么问题吗?
最佳答案
您创建消息的方式是正确的,尽管您可以只使用
printMessage(kind, msg, element);
如果您不想显示有关注释或注释值的消息。重写处理器的 init
方法时,请确保调用 super.init(processingEnv)
以便正确设置。
听起来处理器由于执行中的一些错误而发生故障。如果存在未捕获的异常,处理器将默默地失败,然后不会显示任何消息。要调试注释处理器,请激活错误日志 View :
在此 View 中,您应该看到消息发送器发送的每条消息以及处理器抛出的任何未捕获的异常。堆栈跟踪应该可以帮助您找到错误。
关于Java 注解处理 Messager API 消息未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18440301/