aboutsummaryrefslogtreecommitdiff
path: root/examples/multiplatform/test-processor/src/main/kotlin/TestProcessor.kt
diff options
context:
space:
mode:
Diffstat (limited to 'examples/multiplatform/test-processor/src/main/kotlin/TestProcessor.kt')
-rw-r--r--examples/multiplatform/test-processor/src/main/kotlin/TestProcessor.kt52
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)
+ }
+}