Hello! The following code: ```internal fun List<KS...
# ksp
g
Hello! The following code:
Copy code
internal 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:
Copy code
>>>>>>>>>> KSValueParameter: p1
>>>>>>>>>> KSValueParameter type: (Long) -> Unit
but if I enable KSP2 (
ksp.useKSP2=true
), this is what I get:
Copy code
>>>>>>>>>> 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)?
This solves it, but it looks to much 🔨 😅:
Copy code
internal 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