我想构建一个注释处理器,它生成一个私有“可变类”字段的公共“非可变类”getter 函数(例如,返回一个字段的LiveData
版本MutableLiveData
)。
我想写的:
class MyClass {
@WithGetNonMutable
private val popup: MutableLiveData<PopupTO?> = MutableLiveData()
}
我想生成什么
class MyClass {
private val popup: MutableLiveData<PopupTO?> = MutableLiveData()
fun getPopup(): LiveData<PopupTO?> = popup
}
生成具有正确返回类型的函数是没有问题的:
val liveDataType = ClassName("android.arch.lifecycle", "LiveData")
val returnType = liveDataType.parameterizedBy(genericDataType)
val function = FunSpec.builder("get${element.simpleName}")
.addModifiers(KModifier.PUBLIC)
.addStatement("return ${element.simpleName}")
.returns(returnType)
.build()
问题是变量 ( popup
) 是私有的 - 所以要访问它,我生成的函数也需要是该类的一部分(它不能是新文件中的简单扩展函数)。KotlinPoet 示例都写入新文件 - 但无法访问私有字段(或者是否存在?)所以我需要在实际的类文件中编写函数?我怎样才能做到这一点?