aboutsummaryrefslogtreecommitdiff
path: root/test-utils/src/main
diff options
context:
space:
mode:
authorFedor Ihnatkevich <jeffset@yandex-team.ru>2022-07-02 17:12:42 +0300
committerJiaxiang Chen <roaringacw@gmail.com>2022-07-16 22:43:47 +0000
commitbeb57bc596bce2b8d8a04ca26d79987539e392fd (patch)
tree8b27421838e6b58a1a354dc51f90feebf258e592 /test-utils/src/main
parent25ed6bb8d5592aefae03fba1abf221feeaf488b3 (diff)
downloadksp-beb57bc596bce2b8d8a04ca26d79987539e392fd.tar.gz
Fix assignable check for function types with deserialized descriptors.
E.g. a `kotlin.Function0` type is a Kotlin "fictional" type; the real JVM type it is backed by for JVM is `kotlin.jvm.functions.Function0`. Inside the compiler the backing type is always converted into Kotlin's one. Yet for KSP the `kotlin.jvm.functions.Function0` with its deserialized descriptor can be obtained directly (e.g. via `getJavaClassByName`) and used along with the `kotlin.Function0` type. This CL fixes the assignability check between such types.
Diffstat (limited to 'test-utils/src/main')
-rw-r--r--test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaSubtypeProcessor.kt6
1 files changed, 6 insertions, 0 deletions
diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaSubtypeProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaSubtypeProcessor.kt
index 6f220897..f04b2b5e 100644
--- a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaSubtypeProcessor.kt
+++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/JavaSubtypeProcessor.kt
@@ -18,8 +18,10 @@ class JavaSubtypeProcessor : AbstractTestProcessor() {
override fun process(resolver: Resolver): List<KSAnnotated> {
val javaCollection = resolver.getJavaClassByName("kotlin.collections.Collection")!!.asStarProjectedType()
val javaSet = resolver.getJavaClassByName("kotlin.collections.Set")!!.asStarProjectedType()
+ val ktFunctionJava = resolver.getJavaClassByName("kotlin.jvm.functions.Function0")!!.asStarProjectedType()
val ktCollection = resolver.getClassDeclarationByName("kotlin.collections.Collection")!!.asStarProjectedType()
val ktSet = resolver.getClassDeclarationByName("kotlin.collections.Set")!!.asStarProjectedType()
+ val ktFunction = resolver.getClassDeclarationByName("kotlin.jvm.functions.Function0")!!.asStarProjectedType()
val javaCollectionRef = resolver.createKSTypeReferenceFromKSType(javaCollection)
val ktCollectionRef = resolver.createKSTypeReferenceFromKSType(ktCollection)
val javaSetRef = resolver.createKSTypeReferenceFromKSType(javaSet)
@@ -47,6 +49,7 @@ class JavaSubtypeProcessor : AbstractTestProcessor() {
)
val javaStrCollection = javaCollection.replace(listOf(strRef))
val javaStrSet = javaSet.replace(listOf(strRef))
+ val kotlinFunctionImplementorJava = resolver.getClassDeclarationByName("IntSupplier")!!.asStarProjectedType()
isOk = isOk && javaCollection.isAssignableFrom(javaSet)
isOk = isOk && javaCollection.isAssignableFrom(javaStrCollection)
isOk = isOk && !javaStrCollection.isAssignableFrom(javaCollection)
@@ -67,6 +70,9 @@ class JavaSubtypeProcessor : AbstractTestProcessor() {
isOk = isOk && javaCollectionOfKtSet.isAssignableFrom(ktCollectionOfJavaSet)
isOk = isOk && ktCollectionOfJavaCollection.isAssignableFrom(javaSetOfKtCollection)
isOk = isOk && !javaSetOfKtCollection.isAssignableFrom(ktCollectionOfJavaCollection)
+ isOk = isOk && ktFunction.isAssignableFrom(kotlinFunctionImplementorJava)
+ isOk = isOk && ktFunctionJava.isAssignableFrom(ktFunction) && ktFunction.isAssignableFrom(ktFunctionJava)
+ isOk = isOk && ktFunctionJava.isAssignableFrom(kotlinFunctionImplementorJava)
return emptyList()
}
}