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

Java 注释处理器生成的错误/警告未显示在Eclipse编辑器或问题视图中,java,eclipse,eclipse-plugin,annotation-processing,Java,Eclipse,Eclipse Plugin,Annotation Processing,我已经编写了一个客户注释处理器来生成各种源文件,包装在Eclipse插件中。作为此过程的一部分,它还使用通常的调用ProcessingEnvironment#getMessager().printmessage(种类、字符串、元素)记录各种错误和警告 我一直在通过在Eclipse中调试插件来测试处理器。在Eclipse的已启动子实例中,处理器的所有工作都按预期进行—编译器会根据需要生成、拾取和解释源文件。生成的和未生成的文件中的任何编译器(即非自定义)错误将按预期显示在编辑器、问题视图等中 然而

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

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

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

  • 如果未指定任何元素,则无论记录错误时指定的类型如何,所有消息都会显示在错误日志的“类型信息”下
  • 如果消息的类型为
    注意
    ,则无论是否指定了元素,它总是出现在错误日志的“类型信息”下
  • 否则,如果指定了一个元素,错误和警告会间歇性地出现在Problems视图和编辑器中;有时它们不会出现在任何地方。无论是
    错误
    还是
    警告
  • 正如上面强调的,真正的问题是第3项——在某些情况下,即使登录了有效的元素,我也无法在编辑器中显示错误。事实上,通过简单地更改生成的特定源文件的名称,我已经成功地可靠地使错误出现,而不是出现

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

    不幸的是,我还没有时间测试这个问题是在部署Eclipse插件时发生的(即在Eclipse的“真实”实例中运行),还是在显式调用
    javac
    或调用Maven构建时发生的

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

    Eclipse版本详细信息:

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

    非常感谢您的帮助:)

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


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

    我注意到Eclipse有自己的类加载器(以及字节码修改实用程序),这些类加载器有时会出现意外行为,主要是为了改善IDE中的用户体验。您可能已经想到了这一点,但是在代码的各个部分添加
    new Throwable(“debug message”).printStackTrace()
    作为调试语句通常是在我无法理解其他任何内容时开始的。