<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