diff options
author | Linnea Gräf <nea@nea.moe> | 2025-03-18 13:24:57 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2025-03-18 13:24:57 +0100 |
commit | 5e0940a9691f373a6fda16b19e4d15724324829b (patch) | |
tree | 709ea68ba3fcabb4e5ca59385975e491daff41aa /gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations | |
parent | 771fd47da4ed55b69755c83fdc515057766b4053 (diff) | |
download | mcautotranslations-master.tar.gz mcautotranslations-master.tar.bz2 mcautotranslations-master.zip |
Diffstat (limited to 'gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations')
2 files changed, 44 insertions, 5 deletions
diff --git a/gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations/gradle/MCAutoTranslationsGradlePlugin.kt b/gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations/gradle/MCAutoTranslationsGradlePlugin.kt index 60079f0..1a9d36c 100644 --- a/gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations/gradle/MCAutoTranslationsGradlePlugin.kt +++ b/gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations/gradle/MCAutoTranslationsGradlePlugin.kt @@ -2,6 +2,7 @@ package moe.nea.mcautotranslations.gradle import moe.nea.mcautotranslation.`gradle-plugin`.BuildConfig import org.gradle.api.Project +import org.gradle.api.problems.ProblemGroup import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin @@ -9,6 +10,10 @@ import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact import org.jetbrains.kotlin.gradle.plugin.SubpluginOption class MCAutoTranslationsGradlePlugin : KotlinCompilerPluginSupportPlugin { + companion object { + val PROBLEM_GROUP = ProblemGroup.create("mc-auto-translations", "MC Auto Translations") + } + override fun apply(target: Project) { println("Applying plugin to project") target.extensions.create("mcAutoTranslations", MCAutoTranslationsExtension::class.java, target) diff --git a/gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations/gradle/MergeTranslations.kt b/gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations/gradle/MergeTranslations.kt index c69ee85..82d64b0 100644 --- a/gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations/gradle/MergeTranslations.kt +++ b/gradle-plugin/src/main/kotlin/moe/nea/mcautotranslations/gradle/MergeTranslations.kt @@ -7,6 +7,10 @@ import org.gradle.api.DefaultTask import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.RegularFile import org.gradle.api.file.RegularFileProperty +import org.gradle.api.problems.ProblemGroup +import org.gradle.api.problems.ProblemId +import org.gradle.api.problems.Problems +import org.gradle.api.problems.Severity import org.gradle.api.provider.Provider import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.Internal @@ -19,6 +23,7 @@ import org.gradle.work.InputChanges import org.objectweb.asm.ClassReader import java.io.File import java.util.TreeMap +import javax.inject.Inject abstract class CollectTranslations : DefaultTask() { @get:InputFiles @@ -36,6 +41,9 @@ abstract class CollectTranslations : DefaultTask() { @get:OutputFile abstract val outputFile: RegularFileProperty + @get:Inject + abstract val problems: Problems + init { cacheFile.convention(project.layout.buildDirectory.file("mergeTranslations/incremental/${this.name}.json")) // TODO: should this second convention be changed? @@ -57,6 +65,10 @@ abstract class CollectTranslations : DefaultTask() { companion object { val gson = Gson() + val PROBLEM_DUPLICATE_TRANSLATION = ProblemId.create( + "merge-translations/duplicate-translation", + "Duplicate Translation", + MCAutoTranslationsGradlePlugin.PROBLEM_GROUP) val mapType: TypeToken<TreeMap<String, String>> = object : TypeToken<TreeMap<String, String>>() {} } @@ -101,14 +113,36 @@ abstract class CollectTranslations : DefaultTask() { } private fun toKVMap(translations: Translations): TreeMap<String, String> { - return (translations.baseTranslation.values.asSequence() - + translations.inlineTranslations.values.asSequence()) - .fold(TreeMap()) { acc, x -> - acc.putAll(x) // TODO: warn on duplicate properties (possibly with error enum configuration) - acc + val acc = TreeMap<String, TranslationWithProvenance>() + for ((source, map) in (translations.baseTranslation.asSequence() + translations.inlineTranslations.asSequence())) { + for ((key, value) in map) { + val provenatedValue = TranslationWithProvenance(source, value) + val existing = acc[key] + if (existing != null) + warnForDuplicate(key, provenatedValue, existing) + acc[key] = provenatedValue } + } + return acc.mapValuesTo(TreeMap()) { it.value.value } + } + + fun warnForDuplicate( + key: String, + left: TranslationWithProvenance, + right: TranslationWithProvenance + ) { + problems.reporter.report(PROBLEM_DUPLICATE_TRANSLATION) { + it.severity(Severity.WARNING) + it.fileLocation(left.source) + it.fileLocation(right.source) + it.solution("Try creating a helper method that is used by both code paths.") + it.solution("Alternatively try changing the name of one of the translations.") + it.details("The translation key $key is specified by both ${left.source} (as \"${left.value}\") and by ${right.source} (as \"${right.value}\"). Only one location may specify a translation.") + } } + data class TranslationWithProvenance(val source: String, val value: String) + private fun parseClassAnnotations(file: File): TreeMap<String, String> { val map = TreeMap<String, String>() kotlin.runCatching { |