注释处理器生成的错误/警告未显示在 Eclipse 编辑器或问题视图中

我已经编写了一个客户注释处理器来生成各种源文件,这些文件包装在Eclipse插件中。作为此过程的一部分,它还使用通常的调用记录各种错误和警告。ProcessingEnvironment#getMessager().printMesssage(Kind, String, Element)

我一直在通过在Eclipse中调试插件来测试处理器。在启动的 Eclipse 子实例中,处理器全部按预期工作 - 源文件由编译器根据需要生成、拾取和解释。生成和非生成的编译器(即非自定义)错误都会按预期显示在编辑器,问题视图等中。

但是,在自定义错误和警告的显示方式方面,我看到了很多不一致的地方。我看到的行为如下:

  1. 如果未指定任何 Element,则所有消息都显示在“信息”类型的“错误日志”中,而不考虑在记录错误时指定的“种类”。
  2. 如果消息是“种类”,则无论是否指定了“元素”,它始终显示在“信息”类型的“错误日志”中。NOTE
  3. 否则,如果指定了 Element,则错误和警告会间歇性地出现在“问题”视图和编辑器中;有时它们不会出现在任何地方。它们永远不会出现在错误日志中,无论种类是还是ERRORWARNING

根据上面的强调,真正的问题是第3项 - 在某些情况下,尽管记录了有效的元素,但我根本无法在编辑器中显示错误。实际上,我已经设法通过简单地更改特定生成的源文件的名称来可靠地显示错误而不是显示错误。

当然,问题不在于文件名本身,但肯定是这样,生成具有与代码中已有的引用匹配的名称的类会导致错误被隐藏,而使用不同的名称(或根本不生成)生成它会导致错误显示(以及由缺少类引起的所有常规编译器错误)。最奇怪的是,与其他任何类(其中有很多)相比,这个生成的类没有任何根本的不同,尽管它在结构和引用方式上是独一无二的。它也相当长(大约400种方法),但人为缩短它没有任何区别。其他生成的类在代码中也具有现有引用,并且不禁止显示错误。

不幸的是,我也没有时间测试在部署Eclipse插件时是否会发生此问题(即在Eclipse的“真实”实例中运行),或者是否确实在显式调用或调用Maven构建时出现问题。javac

在没有发布插件的完整代码的情况下,我不期望任何人能够直接提供帮助,但是如果有人遇到注释处理器生成的错误的问题,我非常愿意接受任何建议或建议。在我看来,它就像Eclipse中的一个错误,但我无法在网上找到任何关于它的引用。我也无法在基础Eclipse实例或Eclipse的启动子实例的.metadata/.log文件中找到任何错误。最后,我确保注释处理器代码中没有禁止显示或报告的异常。

Eclipse 版本详细信息:

Version: Luna Service Release 1a (4.4.1)
Build id: 20150109-0600

任何帮助赞赏,并提前感谢:)


答案 1

如果必须在 Eclipse 问题视图中显示问题/错误,则需要在特定资源(文件/文件夹/项目)上创建一个标记。请参阅以下链接,了解如何在 Eclipse 插件中创建标记:

https://wiki.eclipse.org/FAQ_How_do_I_create_problem_markers_for_my_compiler%3F https://www.eclipse.org/articles/Article-Mark%20My%20Words/mark-my-words.html

就自定义错误/警告的显示方式而言,“问题”视图(或通用 MarkersView)可以完全灵活地显示/隐藏某些元素。查看“配置内容...”菜单,以获得更多想法。


答案 2

推荐