KSP生成代码时包名含data出现反引号的问题求助
问题解答
这明显不正常,data作为Kotlin关键字确实可以合法出现在包名中,KSP生成文件时自动给它加反引号属于没必要的过度转义,直接导致IDE无法正常识别包路径。
解决方法很简单,不要直接把字符串格式的包名传给FileSpec.builder,改用PackageName对象来构建包路径,让KotlinPoet(FileSpec属于KotlinPoet库)按照包名的规则处理标识符,而非普通代码标识符:
import com.squareup.kotlinpoet.PackageName // 将字符串包名转换为PackageName对象 val pkg = PackageName.fromString(packageName) // 用PackageName对象构建FileSpec val fileSpec = FileSpec.builder(pkg, "name").build()
或者拆分包名的各个部分来构建PackageName:
val pkgParts = packageName.split(".") val pkg = PackageName(pkgParts) val fileSpec = FileSpec.builder(pkg, "name").build()
原理是:当你直接传字符串包名时,KotlinPoet会把包名的每个段都当作普通代码标识符检查,遇到data这类关键字就自动加反引号;但包名的标识符规则允许使用关键字,通过PackageName对象构建时,它会遵循包名的特殊规则,不会对关键字段进行转义处理。
内容的提问来源于stack exchange,提问作者Olivier
相关产品推荐
相关产品推荐

