<lambda>null1 import com.google.devtools.ksp.containingFile
2 import com.google.devtools.ksp.processing.*
3 import com.google.devtools.ksp.symbol.*
4 import java.io.OutputStreamWriter
5
6 class TestProcessor : SymbolProcessor {
7 lateinit var codeGenerator: CodeGenerator
8 lateinit var logger: KSPLogger
9 var processed = false
10
11 fun init(
12 options: Map<String, String>,
13 kotlinVersion: KotlinVersion,
14 codeGenerator: CodeGenerator,
15 logger: KSPLogger,
16 ) {
17 this.codeGenerator = codeGenerator
18 this.logger = logger
19 }
20
21 override fun process(resolver: Resolver): List<KSAnnotated> {
22 if (processed) {
23 return emptyList()
24 }
25 fun outputForAnno(anno: String) {
26 val annoFiles =
27 resolver.getSymbolsWithAnnotation(anno).map { (it as KSDeclaration).containingFile!! }.toList()
28 codeGenerator.createNewFile(Dependencies(false, *annoFiles.toTypedArray()), "", anno, "log").use { output ->
29 OutputStreamWriter(output).use { writer ->
30 writer.write(annoFiles.map { it.fileName }.joinToString(", "))
31 }
32 }
33 }
34
35 outputForAnno("p1.Anno1")
36 outputForAnno("p1.Anno2")
37
38 resolver.getNewFiles().forEach { file ->
39 logger.warn("${file.packageName.asString()}/${file.fileName}")
40 val outputBaseFN = file.fileName.replace(".kt", "Generated").replace(".java", "Generated")
41 codeGenerator.createNewFile(Dependencies(false, file), file.packageName.asString(), outputBaseFN, "kt")
42 .use { output ->
43 OutputStreamWriter(output).use { writer ->
44 writer.write("private val unused = \"unused\"")
45 }
46 }
47 }
48 processed = true
49 return emptyList()
50 }
51 }
52
53 class TestProcessorProvider : SymbolProcessorProvider {
createnull54 override fun create(
55 env: SymbolProcessorEnvironment,
56 ): SymbolProcessor {
57 return TestProcessor().apply {
58 init(env.options, env.kotlinVersion, env.codeGenerator, env.logger)
59 }
60 }
61 }
62