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