<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