xref: /aosp_15_r20/external/ksp/examples/multiplatform/test-processor/src/main/kotlin/TestProcessor.kt (revision af87fb4bb8e3042070d2a054e912924f599b22b7)

<lambda>null1 import com.google.devtools.ksp.processing.*
2 import com.google.devtools.ksp.symbol.*
3 import com.google.devtools.ksp.visitor.KSTopDownVisitor
4 import java.io.OutputStreamWriter
5 
6 class TestProcessor(val codeGenerator: CodeGenerator, val logger: KSPLogger) : SymbolProcessor {
7     var invoked = false
8 
9     override fun process(resolver: Resolver): List<KSAnnotated> {
10         val allFiles = resolver.getAllFiles().map { it.fileName }
11         logger.warn(allFiles.toList().toString())
12         if (invoked) {
13             return emptyList()
14         }
15         invoked = true
16 
17         codeGenerator.createNewFile(Dependencies(false), "", "Foo", "kt").use { output ->
18             OutputStreamWriter(output).use { writer ->
19                 writer.write("package com.example\n\n")
20                 writer.write("class Foo {\n")
21 
22                 val visitor = ClassVisitor()
23                 resolver.getAllFiles().forEach {
24                     it.accept(visitor, writer)
25                 }
26 
27                 writer.write("}\n")
28             }
29         }
30         return emptyList()
31     }
32 }
33 
34 class ClassVisitor : KSTopDownVisitor<OutputStreamWriter, Unit>() {
defaultHandlernull35     override fun defaultHandler(node: KSNode, data: OutputStreamWriter) {
36     }
37 
visitClassDeclarationnull38     override fun visitClassDeclaration(
39         classDeclaration: KSClassDeclaration,
40         data: OutputStreamWriter
41     ) {
42         super.visitClassDeclaration(classDeclaration, data)
43         val symbolName = classDeclaration.simpleName.asString().lowercase()
44         data.write("    val $symbolName = true\n")
45     }
46 }
47 
48 class TestProcessorProvider : SymbolProcessorProvider {
createnull49     override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
50         return TestProcessor(environment.codeGenerator, environment.logger)
51     }
52 }
53