<lambda>null1 import com.google.devtools.ksp.processing.*
2 import com.google.devtools.ksp.symbol.*
3 import java.io.OutputStreamWriter
4 
5 class TestProcessor(
6     val codeGenerator: CodeGenerator,
7     val logger: KSPLogger
8 ) : SymbolProcessor {
9     // FIXME: use getSymbolsWithAnnotation after it is fixed.
10     var rounds = 0
11     override fun process(resolver: Resolver): List<KSAnnotated> {
12         rounds++
13         logger.warn("$rounds: ${resolver.getNewFiles().toList().sortedBy { it.fileName }}")
14 
15         // Would fail if "Bar.kt" isn't dirty.
16         val barKt = resolver.getAllFiles().single { it.fileName == "Bar.kt" }
17         val bazKt = resolver.getAllFiles().single { it.fileName == "Baz.kt" }
18 
19         if (rounds == 1) {
20             codeGenerator.createNewFile(Dependencies(false), "", "Foo", "kt").use { output ->
21                 OutputStreamWriter(output).use { writer ->
22                     writer.write("package com.example\n\n")
23                     writer.write("open class Foo\n")
24                 }
25             }
26         }
27 
28         if (rounds == 2) {
29             val fooKt = resolver.getAllFiles().single { it.fileName == "Foo.kt" }
30             codeGenerator.createNewFile(Dependencies(false, fooKt, barKt), "", "FooBar", "kt").use { output ->
31                 OutputStreamWriter(output).use { writer ->
32                     writer.write("package com.example\n\n")
33                     writer.write("open class FooBar\n")
34                 }
35             }
36             codeGenerator.createNewFile(Dependencies(false, fooKt, bazKt), "", "FooBaz", "kt").use { output ->
37                 OutputStreamWriter(output).use { writer ->
38                     writer.write("package com.example\n\n")
39                     writer.write("open class FooBaz\n")
40                 }
41             }
42         }
43 
44         return emptyList()
45     }
46 }
47 
48 class TestProcessorProvider : SymbolProcessorProvider {
createnull49     override fun create(
50         environment: SymbolProcessorEnvironment
51     ): SymbolProcessor {
52         return TestProcessor(environment.codeGenerator, environment.logger)
53     }
54 }
55