Dap*_*app 8 kotlin kapt kotlinpoet
使用 KotlinPoet,为了生成用于向类和构造函数添加属性的 PropertySpec,您需要一个 TypeName 对象。
TypeMirror.asTypeName() KotlinPoet 函数已弃用,因为它并不总是对 Kotlin 类型正确工作。
但我找不到一个关于如何使用 kotlinpoet-metadata API 获取 Kotlin 类(例如 kotlin.String)的正确 TypeName 的示例,正如弃用消息所述的那样。
kotlinpoet-metadata API 的文档似乎也完全损坏(转到https://square.github.io/kotlinpoet/interop-kotlinx-metadata/#interop-with-kotlinx-metadata并单击 API 部分下的任何内容)
有谁有如何用一些 kotlinpoet-metadata 代码替换 TypeMirror.asTypeName() 来获取 TypeName 的示例,以便我可以创建 PropertySpec?
不太确定这是否符合弃用消息的意图,但这就是我让它发挥作用的原因。
我首先必须添加 kotlinpoet-metadata-specs。
implementation("com.squareup:kotlinpoet:1.7.1")
implementation("com.squareup:kotlinpoet-metadata:1.7.1")
implementation("com.squareup:kotlinpoet-metadata-specs:1.7.1")
Run Code Online (Sandbox Code Playgroud)
然后使用 util 方法来com.squareup.kotlinpoet.metadata.specs.internal.ClassInspectorUtil创建 className。
val packageName = getPackage(element).qualifiedName.toString()
val typeMetadata = element.getAnnotation(Metadata::class.java)
val kmClass = typeMetadata.toImmutableKmClass()
val className = ClassInspectorUtil.createClassName(kmClass.name)
Run Code Online (Sandbox Code Playgroud)
然后使用
val funSpec = FunSpec.builder("allNullableSet")
.receiver(className)
.returns(Boolean::class.java)
.addStatement(statement)
.build()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1428 次 |
| 最近记录: |