diff options
author | Fedor Ihnatkevich <jeffset@yandex-team.ru> | 2022-07-02 17:12:42 +0300 |
---|---|---|
committer | Jiaxiang Chen <roaringacw@gmail.com> | 2022-07-16 22:43:47 +0000 |
commit | beb57bc596bce2b8d8a04ca26d79987539e392fd (patch) | |
tree | 8b27421838e6b58a1a354dc51f90feebf258e592 /test-utils/src/main | |
parent | 25ed6bb8d5592aefae03fba1abf221feeaf488b3 (diff) | |
download | ksp-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.kt | 6 |
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() } } |