xref: /aosp_15_r20/external/ksp/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/ThrowListProcessor.kt (revision af87fb4bb8e3042070d2a054e912924f599b22b7)
1 package com.google.devtools.ksp.processor
2 
3 import com.google.devtools.ksp.KspExperimental
4 import com.google.devtools.ksp.getClassDeclarationByName
5 import com.google.devtools.ksp.getConstructors
6 import com.google.devtools.ksp.processing.Resolver
7 import com.google.devtools.ksp.symbol.KSAnnotated
8 import com.google.devtools.ksp.symbol.KSFunctionDeclaration
9 import com.google.devtools.ksp.symbol.KSPropertyDeclaration
10 import com.google.devtools.ksp.symbol.KSType
11 
12 @KspExperimental
13 class ThrowListProcessor : AbstractTestProcessor() {
14     val result = mutableListOf<String>()
15 
toResultnull16     override fun toResult(): List<String> {
17         return result
18     }
19 
processnull20     override fun process(resolver: Resolver): List<KSAnnotated> {
21         val klass = resolver.getClassDeclarationByName("ThrowsKt")!!
22         val jlass = resolver.getClassDeclarationByName("ThrowsException")!!
23         result.add(
24             resolver.getJvmCheckedException(
25                 klass.declarations.single {
26                     it.simpleName.asString() == "throwsKT"
27                 } as KSFunctionDeclaration
28             ).toResult()
29         )
30         result.add(
31             resolver.getJvmCheckedException(
32                 (
33                     jlass.declarations.single {
34                         it.simpleName.asString() == "foo"
35                     } as KSFunctionDeclaration
36                     )
37             ).toResult()
38         )
39         val propertyA = klass.declarations.single { it.simpleName.asString() == "a" } as KSPropertyDeclaration
40         result.add(resolver.getJvmCheckedException(propertyA.getter!!).toResult())
41         result.add(resolver.getJvmCheckedException(propertyA.setter!!).toResult())
42         val jlib = resolver.getClassDeclarationByName("JavaLib")!!
43         val klib = resolver.getClassDeclarationByName("KtLib")!!
44         klib.declarations.filter { it.simpleName.asString() == "throwsLibKt" }.map {
45             resolver.getJvmCheckedException(it as KSFunctionDeclaration).toResult()
46         }.forEach { result.add(it) }
47         klib.declarations.filter { it.simpleName.asString() == "getterThrows" }.map {
48             resolver.getJvmCheckedException((it as KSPropertyDeclaration).getter!!).toResult()
49         }.forEach { result.add(it) }
50         klib.declarations.filter { it.simpleName.asString() == "setterThrows" }.map {
51             resolver.getJvmCheckedException((it as KSPropertyDeclaration).setter!!).toResult()
52         }.forEach { result.add(it) }
53         klib.declarations.filter { it.simpleName.asString() == "bothThrows" }.map {
54             resolver.getJvmCheckedException((it as KSPropertyDeclaration).getter!!).toResult()
55         }.forEach { result.add(it) }
56         klib.declarations.filter { it.simpleName.asString() == "bothThrows" }.map {
57             resolver.getJvmCheckedException((it as KSPropertyDeclaration).setter!!).toResult()
58         }.forEach { result.add(it) }
59         jlib.declarations.filter { it.simpleName.asString() == "foo" }.map {
60             resolver.getJvmCheckedException(it as KSFunctionDeclaration).toResult()
61         }.forEach { result.add(it) }
62         jlib.getConstructors().map {
63             resolver.getJvmCheckedException(it).toResult()
64         }.forEach { result.add(it) }
65         return emptyList()
66     }
67 
<lambda>null68     private fun Sequence<KSType>.toResult() = this.joinToString(separator = ",") {
69         it.declaration.qualifiedName!!.asString()
70     }
71 }
72