我的AbstractProcessor
实现被调用,即使带注释的方法包含导致编译器错误的代码。 (即,处理器以目标为ElementType.METHOD
的注释的存在为触发)。
经过一些实验,我给人的印象是,方法主体中的语法错误导致未触发AbstractProcessor,而fx试图调用无法访问的私有方法的“引用错误”确实导致AbstractProcessor被呼叫。
我很高兴能调用AbstractProcessor,但我需要知道带注释的方法是否包含任何错误。
我有两个问题:
JavaCompiler具有多个运行阶段。您可以从RoundEnvironment.processingOver()
中查看处理是否完成,然后使用TreePathScanner
在树上行走。但是,在批注处理完成之后会发现许多实际错误,并且可以在诊断程序中找到它们。您可能可以通过提供DiagnosticListener
来找到一些信息。
有一些方法可以通过检查符号的Symbol/Type
来检测是否已发生错误。在TreePathScanner
内使用visitMethodInvocatio
,您会期望该符号是一个方法,但是如果该方法不存在,则它可能为null或ClassSymbol
。