1 import com.google.devtools.ksp.processing.*
2 import com.google.devtools.ksp.symbol.*
3 import com.google.devtools.ksp.validate
4 
5 class TestProcessor(
6     val codeGenerator: CodeGenerator,
7     val logger: KSPLogger
8 ) : SymbolProcessor {
9     var rounds = 0
processnull10     override fun process(resolver: Resolver): List<KSAnnotated> {
11         rounds++
12 
13         val syms = resolver.getSymbolsWithAnnotation("com.example.Anno").toList()
14 
15         syms.forEach {
16             val v = it.validate()
17             if (rounds == 2 && v == false) {
18                 logger.error("validation failed: $it")
19             }
20         }
21 
22         if (rounds == 1) {
23             codeGenerator.createNewFile(Dependencies(true), "com.example", "Foo1").use {
24                 it.write("package com.example\n\ninterface Foo1\n".toByteArray())
25             }
26             codeGenerator.createNewFile(Dependencies(true), "com.example", "Foo2", "java").use {
27                 it.write("package com.example;\n\npublic interface Foo2{}\n".toByteArray())
28             }
29             return syms.toList()
30         }
31 
32         return emptyList()
33     }
34 }
35 
36 class TestProcessorProvider : SymbolProcessorProvider {
createnull37     override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
38         return TestProcessor(environment.codeGenerator, environment.logger)
39     }
40 }
41