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

时间:2015-03-04 17:20:54

标签: java eclipse eclipse-plugin annotation-processing

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

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

但是,我发现自定义错误和警告的显示方式存在很多不一致之处。我看到的行为如下:

  1. 如果未指定任何元素,则无论在记录错误时指定的种类如何,所有消息都会显示在“信息”类型下的“错误日志”中。
  2. 如果邮件属于NOTE种类,则无论是否指定了元素,它都会始终显示在“信息”类型下的“错误日志”中。
  3. 否则,如果指定了元素,则会在“问题”视图和编辑器中间歇性地显示错误和警告;有时他们不会出现在任何地方。它们永远不会出现在错误日志中,无论种类是ERROR还是WARNING
  4. 根据上面的重点,真正的问题是第3项 - 在某些情况下,尽管登录了有效的元素,我仍然无法在编辑器中出现错误。实际上,我已经成功地通过简单地更改特定生成的源文件的名称来可靠地显示错误而不会出现。

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

    不幸的是,我还没有时间测试是否在部署Eclipse插件时发生了这个问题(即在真实的Eclipse实例中运行),或者确实在调用时出现问题javac明确地或调用Maven构建。

    如果没有发布插件的完整代码,我不希望任何人能够直接提供帮助,但如果有任何人在注释处理器生成的错误中遇到任何问题,我会对任何建议或建议持开放态度。在我看来,这似乎是Eclipse中的一个错误,但我无法在线找到它的任何引用。我也无法在底层Eclipse实例或Eclipse的已启动子实例的.metadata / .log文件中找到任何错误。最后,我确保在注释处理器代码中没有抑制或报告异常。

    Eclipse版本详细信息:

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

    任何帮助表示感谢,并提前多多感谢:)

1 个答案:

答案 0 :(得分:1)

如果必须在Eclipse Problems视图中显示问题/错误,则需要在特定资源(文件/文件夹/项目)上创建标记。请参阅以下有关如何在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)可以完全灵活地显示/隐藏某些元素。查看“问题”视图中的“配置内容...”菜单以获得更多想法。