为什么 IntelliJ 需要 Lombok 插件?

Why IntelliJ needs Lombok plugin?

据我了解,Lombok 使用 Java 的注释处理器来生成其他方法。

使用 Maven 3.5,无需添加任何额外配置即可完美运行,只需添加对 Lombok 的依赖并添加一些注释,如 @Getter@Setter

但是,如果我在 IntelliJ IDEA 2018.2 中打开此项目,生成的 getters/setters 的所有用法都会突出显示为错误。我打开了注释处理,我尝试在 IntelliJ 中构建项目或在 Maven 中构建然后在 IntelliJ 中使用,但它仍然需要 Lombok 插件来避免错误。

这是某种错误吗?工作流程错误?或者,也许 Lombok 不仅使用注释处理器,还使用其他一些我不知道的东西,这就是为什么 IntelliJ + javac 无法弄清楚如何处理它?这很奇怪,因为 javac 本身编译这些文件没有错误

我知道有很多问题 "I have errors while using Lombok" 和类似 "use the plugin" 的答案。我不是在问我是否应该使用插件,而是我为什么要使用它,为什么 IntelliJ 不能在没有插件的情况下处理它,而 javac 可以

IntelliJ 的代码分析引擎不使用 javac 或 运行 注释处理器。相反,IntelliJ 使用自己的 Java 解析器和引用解析逻辑,并构建自己的代码模型。 Lombok 插件扩展代码模型以提供有关 Lombok 注释处理器生成的声明的信息。

这是因为 IDEA 语法高亮器使用内部 Java 解析器。如果 IDEA 仅使用 javac,那么它无法在您键入时突出显示语法错误。它还提供了关于错误代码的更好提示,因此每个 Java 构造、功能或注释都必须由 JetBrains 团队实现,或者像这种情况一样有插件。

注释处理选项仅适用于通过 javac 完成的构建项目,但不适用于语法高亮显示。

Ale IDE 使用 lombok 插件 intelij-ideaeclipsejavac 可以正常工作 - 但请记住,例如当您使用 mvn clean package 构建项目时它可以工作。 然后当你有你的 IDE - 它的工作方式不同 - 代码不像在构建任务中那样处理。

插件让它知道 IDE 这个注释是什么以及它在底层生成什么代码而不需要 javac