gpt4 book ai didi

java - AbstractProcessor 可以检测带注释的方法是否存在编译错误?

转载 作者:行者123 更新时间:2023-12-02 10:52:51 26 4
gpt4 key购买 nike

我的 AbstractProcessor即使带注释的方法包含导致编译器错误的代码,也会调用实现。 (即,处理器由目标为 ElementType.METHOD 的注释的存在触发)。

经过一番试验,我得到的印象是方法主体中的语法错误导致 AbstractProcessor 没有被触发,而“引用错误”,即 fx 试图调用无法访问的私有(private)方法,确实会导致 AbstractProcessor 被调用.

我很高兴 AbstractProcessor 被调用,但我需要知道带注释的方法是否包含任何错误。

我有两个问题:

  • 我的 AbstractProcessor 代码如何知道我的方法所在的 ExecutableElement 是否包含错误?我知道 Google Auto 的 SuperficialValidation ,但我无法让它检测到这些错误 - 也许它只适用于 TypeElements?
  • 我能否确定所有编译器版本在处理各种错误时都具有相同的行为,从而阻止了 AbstractProcessor 被调用,哪些会让它执行其逻辑?
  • 最佳答案

    JavaCompiler 有多个运行阶段。
    您可以从RoundEnvironment.processingOver() 中查看处理是否完成并使用 TreePathScanner 在树上行走.
    然而,在注释处理完成后会发现许多实际错误,并且可以在诊断中找到。您可以通过提供 DiagnosticListener 找到一些信息。 .

    有一些方法可以通过检查 Symbol/Type 来检测是否发生了错误。的符号。
    使用 TreePathScanner里面visitMethodInvocatio您可能希望该符号是一种方法,但如果该方法不存在,则它可能为 null 或 ClassSymbol .

    关于java - AbstractProcessor 可以检测带注释的方法是否存在编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62086430/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com