使用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部分下的任何内容)
有没有人可以举例说明如何用kotlinpoter元数据代码替换TypeMirror.asTypeName()来获取TypeName,这样我就可以创建PropertySpec了?
发布于 2021-06-05 17:29:49
不太确定这是否与弃用消息的意图一致,但这就是我让它工作的原因。
首先,我必须添加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")然后使用com.squareup.kotlinpoet.metadata.specs.internal.ClassInspectorUtil中的util方法创建className。
val packageName = getPackage(element).qualifiedName.toString()
val typeMetadata = element.getAnnotation(Metadata::class.java)
val kmClass = typeMetadata.toImmutableKmClass()
val className = ClassInspectorUtil.createClassName(kmClass.name)然后使用
val funSpec = FunSpec.builder("allNullableSet")
.receiver(className)
.returns(Boolean::class.java)
.addStatement(statement)
.build()https://stackoverflow.com/questions/67078665
复制相似问题