diff options
Diffstat (limited to 'examples/multiplatform/test-processor/src/main/kotlin/TestProcessor.kt')
-rw-r--r-- | examples/multiplatform/test-processor/src/main/kotlin/TestProcessor.kt | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/examples/multiplatform/test-processor/src/main/kotlin/TestProcessor.kt b/examples/multiplatform/test-processor/src/main/kotlin/TestProcessor.kt new file mode 100644 index 00000000..0a06826d --- /dev/null +++ b/examples/multiplatform/test-processor/src/main/kotlin/TestProcessor.kt @@ -0,0 +1,52 @@ +import com.google.devtools.ksp.processing.* +import com.google.devtools.ksp.symbol.* +import com.google.devtools.ksp.visitor.KSTopDownVisitor +import java.io.OutputStreamWriter + +class TestProcessor(val codeGenerator: CodeGenerator, val logger: KSPLogger) : SymbolProcessor { + var invoked = false + + override fun process(resolver: Resolver): List<KSAnnotated> { + val allFiles = resolver.getAllFiles().map { it.fileName } + logger.warn(allFiles.toList().toString()) + if (invoked) { + return emptyList() + } + invoked = true + + codeGenerator.createNewFile(Dependencies(false), "", "Foo", "kt").use { output -> + OutputStreamWriter(output).use { writer -> + writer.write("package com.example\n\n") + writer.write("class Foo {\n") + + val visitor = ClassVisitor() + resolver.getAllFiles().forEach { + it.accept(visitor, writer) + } + + writer.write("}\n") + } + } + return emptyList() + } +} + +class ClassVisitor : KSTopDownVisitor<OutputStreamWriter, Unit>() { + override fun defaultHandler(node: KSNode, data: OutputStreamWriter) { + } + + override fun visitClassDeclaration( + classDeclaration: KSClassDeclaration, + data: OutputStreamWriter + ) { + super.visitClassDeclaration(classDeclaration, data) + val symbolName = classDeclaration.simpleName.asString().lowercase() + data.write(" val $symbolName = true\n") + } +} + +class TestProcessorProvider : SymbolProcessorProvider { + override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor { + return TestProcessor(environment.codeGenerator, environment.logger) + } +} |