<lambda>null1 import com.google.devtools.ksp.processing.*
2 import com.google.devtools.ksp.symbol.*
3 import com.google.devtools.ksp.validate
4 import com.google.devtools.ksp.visitor.KSDefaultVisitor
5 import java.io.OutputStreamWriter
6 
7 class Validator : SymbolProcessor {
8     lateinit var codeGenerator: CodeGenerator
9     lateinit var logger: KSPLogger
10     var processed = false
11 
12     fun init(
13         options: Map<String, String>,
14         kotlinVersion: KotlinVersion,
15         codeGenerator: CodeGenerator,
16         logger: KSPLogger,
17     ) {
18         this.codeGenerator = codeGenerator
19         this.logger = logger
20     }
21 
22     override fun process(resolver: Resolver): List<KSAnnotated> {
23         if (processed) {
24             return emptyList()
25         }
26         val validator = object : KSDefaultVisitor<OutputStreamWriter, Unit>() {
27             override fun defaultHandler(node: KSNode, data: OutputStreamWriter) = Unit
28 
29             override fun visitDeclaration(declaration: KSDeclaration, data: OutputStreamWriter) {
30                 data.write(declaration.qualifiedName?.asString() ?: declaration.simpleName.asString())
31                 declaration.validate()
32             }
33         }
34 
35         val files = resolver.getAllFiles()
36         files.forEach { file ->
37             logger.warn("${file.packageName.asString()}/${file.fileName}")
38             val output = OutputStreamWriter(
39                 codeGenerator.createNewFile(
40                     Dependencies(false, file),
41                     file.packageName.asString(), file.fileName, "log"
42                 )
43             )
44             file.declarations.forEach {
45                 it.accept(validator, output)
46             }
47             output.close()
48         }
49         processed = true
50         return emptyList()
51     }
52 }
53 
54 class TestProcessorProvider : SymbolProcessorProvider {
createnull55     override fun create(
56         env: SymbolProcessorEnvironment,
57     ): SymbolProcessor {
58         return Validator().apply {
59             init(env.options, env.kotlinVersion, env.codeGenerator, env.logger)
60         }
61     }
62 }
63