<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