diff options
Diffstat (limited to 'integration-tests/src/test/resources/incremental-multi-chain/processors/src/main/kotlin/Aggregator.kt')
-rw-r--r-- | integration-tests/src/test/resources/incremental-multi-chain/processors/src/main/kotlin/Aggregator.kt | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/integration-tests/src/test/resources/incremental-multi-chain/processors/src/main/kotlin/Aggregator.kt b/integration-tests/src/test/resources/incremental-multi-chain/processors/src/main/kotlin/Aggregator.kt new file mode 100644 index 00000000..d7c25217 --- /dev/null +++ b/integration-tests/src/test/resources/incremental-multi-chain/processors/src/main/kotlin/Aggregator.kt @@ -0,0 +1,46 @@ +import com.google.devtools.ksp.processing.* +import com.google.devtools.ksp.symbol.* +import java.io.OutputStreamWriter + +class Aggregator : SymbolProcessor { + lateinit var codeGenerator: CodeGenerator + lateinit var logger: KSPLogger + + fun init( + options: Map<String, String>, + kotlinVersion: KotlinVersion, + codeGenerator: CodeGenerator, + logger: KSPLogger, + ) { + this.codeGenerator = codeGenerator + this.logger = logger + } + + override fun process(resolver: Resolver): List<KSAnnotated> { + val impls = resolver.getSymbolsWithAnnotation("Impl").map { it as KSDeclaration }.toList() + if (impls.isNotEmpty()) { + val names = impls.map { it.simpleName.asString() }.sorted() + OutputStreamWriter( + codeGenerator.createNewFile( + Dependencies(true), "", "AllImpls" + ) + ).use { + it.write("class AllImpls {\n") + it.write(" override fun toString() = \"$names\"\n") + it.write("}\n") + } + codeGenerator.associate(impls.map { it.containingFile!! }.toList(), "", "AllImpls") + } + return emptyList() + } +} + +class AggregatorProvider : SymbolProcessorProvider { + override fun create( + env: SymbolProcessorEnvironment, + ): SymbolProcessor { + return Aggregator().apply { + init(env.options, env.kotlinVersion, env.codeGenerator, env.logger) + } + } +} |