<lambda>null1 import com.google.devtools.ksp.processing.*
2 import com.google.devtools.ksp.symbol.*
3 import com.google.devtools.ksp.validate
4 import java.io.OutputStreamWriter
5 
6 class Validator : SymbolProcessor {
7     lateinit var codeGenerator: CodeGenerator
8     lateinit var logger: KSPLogger
9 
10     fun init(
11         options: Map<String, String>,
12         kotlinVersion: KotlinVersion,
13         codeGenerator: CodeGenerator,
14         logger: KSPLogger,
15     ) {
16         this.codeGenerator = codeGenerator
17         this.logger = logger
18     }
19 
20     override fun process(resolver: Resolver): List<KSAnnotated> {
21         resolver.getSymbolsWithAnnotation("p1.MyAnnotation").singleOrNull()?.let { decl ->
22             decl as KSClassDeclaration
23             val file = decl.containingFile!!
24             OutputStreamWriter(
25                 codeGenerator.createNewFile(
26                     Dependencies(false, file),
27                     "p1", "Foo"
28                 )
29             ).use {
30                 it.write("package p1\n\nclass Foo : Bar { override fun s() = \"generated\" }\n")
31             }
32         }
33         resolver.getNewFiles().forEach {
34             it.validate()
35         }
36         return emptyList()
37     }
38 }
39 
40 class TestProcessorProvider : SymbolProcessorProvider {
createnull41     override fun create(
42         env: SymbolProcessorEnvironment,
43     ): SymbolProcessor {
44         return Validator().apply {
45             init(env.options, env.kotlinVersion, env.codeGenerator, env.logger)
46         }
47     }
48 }
49