无法解析注释处理器生成的方法

Posted

技术标签:

【中文标题】无法解析注释处理器生成的方法【英文标题】:Cannot resolve method generated by annotation processor 【发布时间】:2022-01-10 12:21:03 【问题描述】:

我有两个项目。其中之一是projectA 一个用于注释的处理器。第二个,projectB 使用 projectA 作为依赖。现在这个处理器在最终编译之前将toJson 方法添加到现有类。一切正常。当我编译projectB 我的projectA 运行并修改存在的源文件并添加toJson 方法。此外,intellij 会自动检测此处理器并自动将我的自定义处理器配置到处理器路径。但编辑给出错误Cannot resolve method 'toJson' in 'CacheData'。我该如何解决这个问题?

下图是我的 intellij 配置。如您所见,IDEA 会自动从我的 pom.xml 中检测到我的处理器,但编辑器无法识别生成的代码

我使用IntelliJ IDEA 2021.3 (Ultimate Edition)maven-3.8.1jdk-1.8 表示处理器(projectA),jdk-11 表示projectB

【问题讨论】:

如果两个项目都使用同一个 JDK 可以吗? @roccobaroccoSC 用于处理器,因为tools.jar,我在 jdk8 之后无法使用。但我认为问题不是因为 jdk。因为我的项目编译成功并且当我解码类方法时就在那里。我不知道 lombok 插件是如何工作的,但这正是我所需要的。 【参考方案1】:

终于解决了我的问题。似乎当前版本的 Intellij 仅支持自动生成的类。但是,如果您使用 annotation processor Intellij 编辑器修改现有文件,则无法识别您的更改并显示为错误。非常感谢@mplushnikov 的lombok-intellij-plugin。我只是为 IntellIJ 创建自己的插件并添加依赖项。完成此操作后,您需要覆盖一些入口类并添加您自己的注释及其处理器处理程序并从AbstractClassProcessor扩展它

让我分享一些例子,如果有这个问题的人可以使用它。

IntellIJ Plugin tutorial 适合初学者

以下代码 sn-ps 来自我的plugin.xml。首先你需要为你的插件添加一些依赖项

<depends>com.intellij.modules.lang</depends>
<depends>com.intellij.modules.platform</depends>
<depends>com.intellij.modules.java</depends>
<depends>Lombook Plugin</depends> <!-- this is the lombok-intellij-plugin-->

第二步是为您的插件添加所需的扩展,如下所示

 <extensions defaultExtensionNs="com.intellij">
  <!-- Add your own custom processor. because lombok plugin default search only lombok package and own annotations -->
  <lang.psiAugmentProvider implementation="your_package.AugmentProviderImpl"/>
  <!-- if you packaged your classes other than lombok   -->
  <codeInsight.externalLibraryResolver implementation="your_package.ExternalLibraryImpl"/>
  <implicitUsageProvider implementation="your_package. ImplicitUsageProviderImpl"/>

  <!-- Add your custom annotation processor handler and extend it from   AbstractClassProcessor -->
  <applicationService serviceImplementation="your_package.CustomAnnotationProcessor"/>
 </extensions>

就是这样。按照这些步骤,构建您的插件并安装它。重新启动后,由您自己的注释生成的类的方法将被 intellij 识别。

实现类并不难。只需查看lombok-intellij-plugin 源代码并复制所需文件并对其进行修改即可。

【讨论】:

以上是关于无法解析注释处理器生成的方法的主要内容,如果未能解决你的问题,请参考以下文章

无法解析符号“注释”[重复]

XSD 到 jaxb 注释类给出了无法解析 xml 元素错误

无法解析 graphql 生成的类上的符号

Spring Boot 注释和导入无法在 Intellij IDE 上解析

Grails 3.0.2 无法解析控制器中的@Secured 注释

DNS服务器配置转发无法解析问题