Guilherme Delgado
11/05/2024, 1:24 PMinternal fun List<KSValueParameter>.joinToStringDeclaration(separator: CharSequence = ", "): String = joinToString(separator) {
println(">>>>>>>>>> KSValueParameter: ${it}")
println(">>>>>>>>>> KSValueParameter type: ${it.type}")
"${it.name!!.getShortName()}: ${it.type}"
}
will produce, as expected, for example this:
>>>>>>>>>> KSValueParameter: p1
>>>>>>>>>> KSValueParameter type: (Long) -> Unit
but if I enable KSP2 (ksp.useKSP2=true
), this is what I get:
>>>>>>>>>> KSValueParameter: p1
>>>>>>>>>> KSValueParameter type: com.google.devtools.ksp.impl.symbol.kotlin.KSCallableReferenceImpl@22a9bc06
How can I achieve the type like (Long) -> Unit
just like when KSP2 is off (with it ON)?Guilherme Delgado
11/05/2024, 1:42 PMinternal fun List<KSValueParameter>.joinToStringDeclaration(separator: CharSequence = ", "): String = joinToString(separator) {
println(">>>>>>>>>> KSValueParameter: ${it}")
println(">>>>>>>>>> KSValueParameter type: ${it.resolveType()}")
"${it.name!!.getShortName()}: ${it.resolveType()}"
}
internal fun KSValueParameter.resolveType(): String {
val resolvedType = type.resolve()
return if (resolvedType.isFunctionType) {
buildString {
append("(")
append(resolvedType.arguments.dropLast(1).joinToString(", ") { arg ->
arg.type?.resolve()?.declaration?.simpleName?.asString() ?: "Unknown"
})
append(") -> ")
append(resolvedType.arguments.last().type?.resolve()?.declaration?.simpleName?.asString() ?: "Unit")
}
} else {
resolvedType.declaration.simpleName.asString()
}
}
>>>>>>>>>> KSValueParameter: p1
>>>>>>>>>> KSValueParameter type: (Long) -> Unit