小编Nam*_*rel的帖子

尽管启用了 kapt. CorrectErrorTypes,kapt 仍将生成的类引用替换为 error.NonExistentClass

我有一个自定义注释处理器,大致执行以下操作:

  • 生成注释类型(使用此类型的类被推迟到后面的轮次)
  • 在后面的一轮中,使用这种类型处理类并为它们生成更多文件

到目前为止,这在 Java 中运行良好。但最近,我将一些类从 Java 转换为 Kotlin。设置仍然相同。但是当我使用生成的注释类型将类转换为 Kotlin 时,会弹出以下错误:

错误:不兼容的类型:NonExistentClass 无法转换为注释 @error.NonExistentClass()

值得注意的是,只有当文件位于 Kotlin 中时才会发生这种情况 - 其他(Java)文件也使用相同的注释,并且当我从 Kotlin 文件中删除注释时它们不会产生错误。

经过一番谷歌搜索后,我发现推荐的解决方案是向以下添加一个选项build.gradle

kapt {
 correctErrorTypes = true 
} 
Run Code Online (Sandbox Code Playgroud)

然而,使用这个并没有解决问题。我查看了生成的存根文件,很明显,尽管设置如下,但它kapt仍然继续放入error.NonExistentClass其中:

kapt {
 correctErrorTypes = true 
} 
Run Code Online (Sandbox Code Playgroud)

我认为值得注意的是:

  • 存根保留了生成注释的正确导入
  • kapt将注释移至静态方法,而原始生成的注释仅支持字段

MyClass看起来像这样:

package my.pckg

import my.pckg.GeneratedAnnotation

class MyClass {

    @GeneratedAnnotation
    var myAnnotatedField: Int = 0

    //...
}

Run Code Online (Sandbox Code Playgroud)

这是build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android { …
Run Code Online (Sandbox Code Playgroud)

gradle annotation-processing kotlin kapt

5
推荐指数
0
解决办法
5737
查看次数

标签 统计

annotation-processing ×1

gradle ×1

kapt ×1

kotlin ×1