aboutsummaryrefslogtreecommitdiff
path: root/integration-tests/src/test/resources/init-plus-provider/provider-processor/src/main/kotlin/TestProcessor.kt
blob: 7bb6d4d44953123ae6580baeac64f1284a12a2b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import com.google.devtools.ksp.processing.*
import com.google.devtools.ksp.symbol.*
import java.io.OutputStream

fun OutputStream.appendText(str: String) {
    this.write(str.toByteArray())
}

class TestProcessor(options: Map<String, String>, val codeGenerator: CodeGenerator) : SymbolProcessor {
    val file: OutputStream = codeGenerator.createNewFile(Dependencies(false), "", "TestProcessor", "log")

    init {
        file.appendText("TestProcessor: init($options)\n")

        val javaFile = codeGenerator.createNewFile(Dependencies(false), "", "GeneratedFromProvider", "java")
        javaFile.appendText("class GeneratedFromProvider {}")
    }

    var invoked = false

    override fun process(resolver: Resolver): List<KSAnnotated> {
        if (invoked) {
            return emptyList()
        }

        val fileKt = codeGenerator.createNewFile(Dependencies(false), "", "HelloFromProvider", "java")

        fileKt.appendText("public class HelloFromProvider{\n")
        fileKt.appendText("  public int foo() { return 5678; }\n")
        fileKt.appendText("}")

        invoked = true
        return emptyList()
    }

    class Provider : SymbolProcessorProvider {
        override fun create(
            environment: SymbolProcessorEnvironment
        ): SymbolProcessor = TestProcessor(environment.options, environment.codeGenerator)
    }
}