User: joe Date: 18 Feb 25 03:53 Revision: 043bd58ccc4bba1a25fbed1134b42a7277ce582a Summary: Don't use regex to identify lang files, improving performance TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9818&personal=false Index: src/main/kotlin/translations/TranslationFiles.kt =================================================================== --- src/main/kotlin/translations/TranslationFiles.kt (revision 5a6e07f62892b23a45af83ca2d1dff4ebdbd5e55) +++ src/main/kotlin/translations/TranslationFiles.kt (revision 043bd58ccc4bba1a25fbed1134b42a7277ce582a) @@ -62,9 +62,10 @@ object TranslationFiles { private val MC_1_12_2 = SemanticVersion.release(1, 12, 2) - fun isTranslationFile(file: VirtualFile?) = - file?.mcDomain != null && file.mcPath?.startsWith("lang/") == true && - file.fileType in listOf(LangFileType, JsonFileType.INSTANCE) + fun isTranslationFile(file: VirtualFile?): Boolean { + val mcPath = file?.mcPath ?: return false + return mcPath.startsWith("lang/") && file.fileType in listOf(LangFileType, JsonFileType.INSTANCE) + } fun getLocale(file: VirtualFile?) = file?.nameWithoutExtension?.lowercase(Locale.ENGLISH) Index: src/main/kotlin/util/files.kt =================================================================== --- src/main/kotlin/util/files.kt (revision 5a6e07f62892b23a45af83ca2d1dff4ebdbd5e55) +++ src/main/kotlin/util/files.kt (revision 043bd58ccc4bba1a25fbed1134b42a7277ce582a) @@ -48,13 +48,31 @@ null } -// Technically resource domains are much more restricted ([a-z0-9_-]+) in modern versions, but we want to support as much as possible -private val RESOURCE_LOCATION_PATTERN = Regex("^.*?/(assets|data)/([^/]+)/(.*?)$") - val VirtualFile.mcDomain: String? - get() = RESOURCE_LOCATION_PATTERN.matchEntire(this.path)?.groupValues?.get(2) + get() = mcDomainAndPath?.first val VirtualFile.mcPath: String? - get() = RESOURCE_LOCATION_PATTERN.matchEntire(this.path)?.groupValues?.get(3) + get() = mcDomainAndPath?.second +val VirtualFile.mcDomainAndPath: Pair? + get() { + var domain: String? = null + val path = mutableListOf() + var vf: VirtualFile? = this + while (vf != null) { + val name = vf.name + if (name == "assets" || name == "data") { + break + } + domain?.let(path::add) + domain = name + vf = vf.parent + } + if (vf == null || domain == null) { + // if vf is null, we never found "assets" or "data", if domain is null our file path was too short. + return null + } + path.reverse() + return domain to path.joinToString("/") + } operator fun Manifest.get(attribute: String): String? = mainAttributes.getValue(attribute) operator fun Manifest.get(attribute: Attributes.Name): String? = mainAttributes.getValue(attribute)