2 回答
TA贡献1765条经验 获得超5个赞
Java Annotation Processing (APT) 插件旨在基于其他类生成代码。这些类最终位于生成的源文件夹中,该文件夹随后也会被编译。这些 APT 插件是从类路径/构建工具配置中发现的,并且也由 IntelliJ 编译器运行。请记住:APT 用于生成源代码,根本不是用于替换现有类。Lombok 仍然能够这样做的唯一原因是因为他们非常深入地侵入了编译器,并且通过这种方式能够在编译下操作类的 AST。
由于这种方法在未来的 Java 版本中存在很大争议并且容易出错,因此任何人都极不可能尝试构建基于 APT 的类替换框架或能够做到这一点的 Lombok 扩展(我们不是这是因为 Lombok 是唯一可以被视为此类 APT 使用的“框架”的工具,而 Lombok 本身根本不是以可扩展的方式构建的)。
总之:APT 可能是可行的方法,但您的处理器必须创建一个新类,而不是尝试修改现有类。
我不确定为什么您当前的注释处理器没有与您的编译器正确关联。如果您使用的是 Maven,则可以尝试在本地为您的处理器安装工件,并将其作为编译依赖项添加到您的其他项目中。
在 Java 中没有修改编译类的真正方法,所以如果你真的必须在同一个类中使用该方法,那么不幸的是,这意味着它无法完成。
TA贡献1863条经验 获得超2个赞
您可以像 Lombok 一样修改抽象语法树 (AST),而不是实际创建文件并写入文件。不建议这样做,不同的编译器以不同的方式实现 AST,但您可以从 github ( https://github.com/rzwitserloot/lombok )扩展 Lombok 源代码,并在需要时制作注释处理程序。但是,它有点难,因此请确保您确实需要它。
抱歉,我没有正确阅读您的问题。要注册它,您需要在使用注释和注释处理器的项目中创建一个 META-INF\services 目录。在该目录中,制作一个名为“javax.annotation.processing.Processor”的 txt 文件,其中包含处理器的名称,例如 mypackage.SuggestProcessor。如果您决定使用 java 9,您还可以在 module-info 文件中声明处理器。处理器的模块必须包含“provides javax.annotation.processing.Processor with something.SuggestProcessor”,使用注释的模块必须包含“uses javax.annotation.processing.Processor”。这就是 javac 注册注释处理器的方式。
添加回答
举报