Nam*_*rel 5 gradle annotation-processing kotlin kapt
我有一个自定义注释处理器,大致执行以下操作:
到目前为止,这在 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 {
//...
kotlinOptions {
jvmTarget = '1.8'
}
}
kapt {
correctErrorTypes = true
}
dependencies {
kapt 'custom.annotation.processor'
implementation "androidx.core:core-ktx:+"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.41"
//...
}
Run Code Online (Sandbox Code Playgroud)
SO 上还有其他 人遇到过 这个问题 ,但是那里建议的解决方案都没有为我解决。
编辑:我做了一些更多的测试,发现生成的类型仅在该类型用作注释时才会被替换error.NonExistentClass(作为对象类型甚至泛型参数,它工作得很好)。此时我相信这可能只是一个kapt 错误。
| 归档时间: |
|
| 查看次数: |
5737 次 |
| 最近记录: |