1 import com.google.devtools.ksp.getClassDeclarationByName
2 import com.google.devtools.ksp.processing.*
3 import com.google.devtools.ksp.symbol.*
4 import com.google.devtools.ksp.validate
5 
6 class ValidateProcessor(env: SymbolProcessorEnvironment) : SymbolProcessor {
7     var logger: KSPLogger = env.logger
8 
processnull9     override fun process(resolver: Resolver): List<KSAnnotated> {
10         val javaClass = resolver.getClassDeclarationByName("com.example.JavaClass")!!
11         val nestedClass = javaClass.declarations.filterIsInstance<KSClassDeclaration>()
12             .single { it.simpleName.asString() == "NestedClass" }
13         val provideString = nestedClass.declarations.filterIsInstance<KSFunctionDeclaration>()
14             .single { it.simpleName.asString() == "provideString" }
15 
16         if (provideString.returnType!!.resolve().isError) {
17             logger.error("provideString.returnType: not ok")
18         }
19         if (nestedClass.asStarProjectedType().isError == true) {
20             logger.error("$javaClass.asStarProjectedType(): not ok")
21         }
22         if (!nestedClass.validate()) {
23             logger.error("Failed to validate $nestedClass")
24         }
25         if (!javaClass.validate()) {
26             logger.error("Failed to validate $javaClass")
27         }
28         return emptyList()
29     }
30 }
31 
32 class ValidateProcessorProvider : SymbolProcessorProvider {
createnull33     override fun create(
34         env: SymbolProcessorEnvironment
35     ): SymbolProcessor {
36         return ValidateProcessor(env)
37     }
38 }
39