<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