in compiler/src/main/kotlin/motif/compiler/KotlinTypeWorkaround.kt [39:74]
fun javaToKotlinType(
className: com.squareup.kotlinpoet.ClassName,
env: XProcessingEnv?,
): TypeName = javaToKotlinType(className as TypeName, env)
private fun asTypeName(mirror: XType): TypeName = mirror.typeName.toKTypeName()
/** https://github.com/square/kotlinpoet/issues/236#issuecomment-437961476 */
private fun javaToKotlinType(typeName: TypeName, env: XProcessingEnv?): TypeName =
when (typeName) {
is ParameterizedTypeName ->
(javaToKotlinType(typeName.rawType, null) as com.squareup.kotlinpoet.ClassName)
.parameterizedBy(
*typeName.typeArguments.map { javaToKotlinType(it, env) }.toTypedArray(),
)
is WildcardTypeName ->
when {
typeName.inTypes.isNotEmpty() ->
WildcardTypeName.consumerOf(javaToKotlinType(typeName.inTypes.single(), env))
typeName.outTypes.isNotEmpty() ->
WildcardTypeName.producerOf(javaToKotlinType(typeName.outTypes.single(), env))
else -> throw IllegalStateException()
}
is TypeVariableName -> STAR
else -> {
val className =
JavaToKotlinClassMap.INSTANCE.mapJavaToKotlin(FqName(typeName.toString()))
?.asSingleFqName()
?.asString()
if (className == null) {
typeName.withRawTypeFix(env)
} else {
com.squareup.kotlinpoet.ClassName.bestGuess(className)
}
}
}