diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-09-14 16:37:57 +0200 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-09-14 16:37:57 +0200 |
| commit | 9abe9f46f04f188037687adb2740b32220ad21b2 (patch) | |
| tree | 48dbd9cdf48c59853310c0b2e9bc59801522400e /symbols | |
| parent | 2851c1d6834fafdaeb009dce2a3485df1388907e (diff) | |
| download | Firmament-9abe9f46f04f188037687adb2740b32220ad21b2.tar.gz Firmament-9abe9f46f04f188037687adb2740b32220ad21b2.tar.bz2 Firmament-9abe9f46f04f188037687adb2740b32220ad21b2.zip | |
snapshot
Diffstat (limited to 'symbols')
| -rw-r--r-- | symbols/src/main/kotlin/process/CompatMetaProcessor.kt | 1 | ||||
| -rw-r--r-- | symbols/src/main/kotlin/process/ConfigAnnotationProcessor.kt | 73 |
2 files changed, 74 insertions, 0 deletions
diff --git a/symbols/src/main/kotlin/process/CompatMetaProcessor.kt b/symbols/src/main/kotlin/process/CompatMetaProcessor.kt index 0753e4c..6f32b85 100644 --- a/symbols/src/main/kotlin/process/CompatMetaProcessor.kt +++ b/symbols/src/main/kotlin/process/CompatMetaProcessor.kt @@ -1,6 +1,7 @@ package moe.nea.firmament.annotations.process import com.google.auto.service.AutoService +import com.google.devtools.ksp.getClassDeclarationByName import com.google.devtools.ksp.processing.CodeGenerator import com.google.devtools.ksp.processing.Dependencies import com.google.devtools.ksp.processing.KSPLogger diff --git a/symbols/src/main/kotlin/process/ConfigAnnotationProcessor.kt b/symbols/src/main/kotlin/process/ConfigAnnotationProcessor.kt new file mode 100644 index 0000000..028f386 --- /dev/null +++ b/symbols/src/main/kotlin/process/ConfigAnnotationProcessor.kt @@ -0,0 +1,73 @@ +package moe.nea.firmament.annotations.process + +import com.google.auto.service.AutoService +import com.google.devtools.ksp.processing.CodeGenerator +import com.google.devtools.ksp.processing.Dependencies +import com.google.devtools.ksp.processing.KSPLogger +import com.google.devtools.ksp.processing.Resolver +import com.google.devtools.ksp.processing.SymbolProcessor +import com.google.devtools.ksp.processing.SymbolProcessorEnvironment +import com.google.devtools.ksp.processing.SymbolProcessorProvider +import com.google.devtools.ksp.symbol.KSAnnotated +import com.google.devtools.ksp.symbol.KSClassDeclaration +import com.google.devtools.ksp.symbol.KSFile +import com.google.devtools.ksp.symbol.KSName + +class ConfigAnnotationProcessor( + val logger: KSPLogger, val codeGenerator: CodeGenerator, val sourceSetName: String +) : SymbolProcessor { + val configs = mutableSetOf<Pair<KSName, KSFile>>() + override fun process(resolver: Resolver): List<KSAnnotated> { + resolver.getSymbolsWithAnnotation("moe.nea.firmament.util.data.Config") + .map { it as KSClassDeclaration } + .mapTo(configs) { + it.qualifiedName!! to it.containingFile!! + } + return listOf() + } + + override fun finish() { + val dependencies = Dependencies( + aggregating = true, + *configs.map { it.second }.toTypedArray() + ) + val generatedFileName = "ConfigProvider" + val compatFile = + codeGenerator.createNewFile( + dependencies, + "moe.nea.firmament.annotations.generated.$sourceSetName", + generatedFileName + ) + .bufferedWriter() + compatFile.appendLine("// This file is @generated by ConfigAnnotationProcessor") + compatFile.appendLine("// Do not edit") + compatFile.appendLine("package moe.nea.firmament.annotations.generated.$sourceSetName") + compatFile.appendLine("class $generatedFileName : moe.nea.firmament.util.data.IConfigProvider {") + compatFile.appendLine( + """ + override val configs: List<moe.nea.firmament.util.data.IDataHolder<*>> = listOf(${configs.joinToString { it.first.asString() }}) + """ + ) + compatFile.appendLine("}") + compatFile.close() + val metaInf = codeGenerator.createNewFileByPath( + dependencies, + "META-INF/services/moe.nea.firmament.util.data.IConfigProvider", extensionName = "" + ) + .bufferedWriter() + metaInf.append("moe.nea.firmament.annotations.generated.$sourceSetName.") + metaInf.appendLine(generatedFileName) + metaInf.close() + } + + @AutoService(SymbolProcessorProvider::class) + class Provider : SymbolProcessorProvider { + override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor { + return ConfigAnnotationProcessor( + environment.logger, + environment.codeGenerator, + environment.options["firmament.sourceset"] ?: "main" + ) + } + } +} |
