<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