User: kyle wood Date: 14 Oct 22 03:15 Revision: cd35faf457749409437b94b77ff0c27e59057c7b Summary: Run translation reference search in a read action Fixes #1902 TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=8161&personal=false Index: build.gradle.kts =================================================================== --- build.gradle.kts (revision dfc2ff09488f3b0d93bb9915794d406b62d6fda5) +++ build.gradle.kts (revision cd35faf457749409437b94b77ff0c27e59057c7b) @@ -17,7 +17,7 @@ import org.jlleitschuh.gradle.ktlint.tasks.BaseKtLintCheckTask plugins { - kotlin("jvm") version "1.7.10" + kotlin("jvm") version "1.7.20" java mcdev groovy Index: src/main/kotlin/inspection/IsCancelled.kt =================================================================== --- src/main/kotlin/inspection/IsCancelled.kt (revision dfc2ff09488f3b0d93bb9915794d406b62d6fda5) +++ src/main/kotlin/inspection/IsCancelled.kt (revision cd35faf457749409437b94b77ff0c27e59057c7b) @@ -24,7 +24,7 @@ this.buildFix = object : InspectionGadgetsFix() { override fun doFix(project: Project, descriptor: ProblemDescriptor) = fix(descriptor) override fun getName() = "Simplify" - override fun getFamilyName() = "Useless IsCancelled Check" + override fun getFamilyName() = "Useless isCancelled check" } } } Index: src/main/kotlin/inspection/IsCancelledInspection.kt =================================================================== --- src/main/kotlin/inspection/IsCancelledInspection.kt (revision dfc2ff09488f3b0d93bb9915794d406b62d6fda5) +++ src/main/kotlin/inspection/IsCancelledInspection.kt (revision cd35faf457749409437b94b77ff0c27e59057c7b) @@ -21,7 +21,7 @@ class IsCancelledInspection : BaseInspection() { @Nls - override fun getDisplayName() = "Useless event is cancelled check" + override fun getDisplayName() = "Useless event isCancelled check" override fun getStaticDescription(): String = "Reports useless event cancellation checks" Index: src/main/kotlin/translations/reference/TranslationReferenceSearch.kt =================================================================== --- src/main/kotlin/translations/reference/TranslationReferenceSearch.kt (revision dfc2ff09488f3b0d93bb9915794d406b62d6fda5) +++ src/main/kotlin/translations/reference/TranslationReferenceSearch.kt (revision cd35faf457749409437b94b77ff0c27e59057c7b) @@ -25,29 +25,30 @@ override fun execute(parameters: ReferencesSearch.SearchParameters, consumer: Processor): Boolean { val entry = parameters.elementToSearch - val key = runReadAction { TranslationFiles.toTranslation(entry)?.key } + val key = runReadAction { TranslationFiles.toTranslation(entry)?.key } ?: return true - if (key != null) { - fun power(start: List): Set> { - tailrec fun pwr(s: List, acc: Set>): Set> = - if (s.isEmpty()) { - acc - } else { - pwr(s.takeLast(s.size - 1), acc + acc.map { it + s.first() }) - } - return pwr(start, setOf(emptyList())) - } + fun power(start: List): Set> { + tailrec fun pwr(s: List, acc: Set>): Set> = + if (s.isEmpty()) { + acc + } else { + pwr(s.takeLast(s.size - 1), acc + acc.map { it + s.first() }) + } + return pwr(start, setOf(emptyList())) + } - val model = FindModel() - model.customScope = parameters.effectiveSearchScope - model.isCaseSensitive = true - model.searchContext = FindModel.SearchContext.IN_STRING_LITERALS - model.isRegularExpressions = true - // Enables custom translations functions (for auto-prefixing calls, for instance) - model.stringToFind = power(key.split('.')) - .map { it.joinToString(".") } - .filter { it.isNotEmpty() } - .joinToString("|") { "(${Regex.escape(it)})" } + val model = FindModel() + model.customScope = parameters.effectiveSearchScope + model.isCaseSensitive = true + model.searchContext = FindModel.SearchContext.IN_STRING_LITERALS + model.isRegularExpressions = true + // Enables custom translations functions (for auto-prefixing calls, for instance) + model.stringToFind = power(key.split('.')) + .map { it.joinToString(".") } + .filter { it.isNotEmpty() } + .joinToString("|") { "(${Regex.escape(it)})" } + + runReadAction { FindInProjectUtil.findUsages( model, parameters.project, Index: src/main/kotlin/util/psi-utils.kt =================================================================== --- src/main/kotlin/util/psi-utils.kt (revision dfc2ff09488f3b0d93bb9915794d406b62d6fda5) +++ src/main/kotlin/util/psi-utils.kt (revision cd35faf457749409437b94b77ff0c27e59057c7b) @@ -63,11 +63,11 @@ fun PsiElement.findReferencedClass(): PsiClass? = findParent(resolveReferences = true) -fun PsiElement.findReferencedMember(): PsiMember? = findParent({ it is PsiClass }, resolveReferences = true) +fun PsiElement.findReferencedMember(): PsiMember? = findParent(resolveReferences = true) { it is PsiClass } -fun PsiElement.findContainingMember(): PsiMember? = findParent({ it is PsiClass }, resolveReferences = false) +fun PsiElement.findContainingMember(): PsiMember? = findParent(resolveReferences = false) { it is PsiClass } -fun PsiElement.findContainingMethod(): PsiMethod? = findParent({ it is PsiClass }, resolveReferences = false) +fun PsiElement.findContainingMethod(): PsiMethod? = findParent(resolveReferences = false) { it is PsiClass } private val PsiElement.ancestors: Sequence get() = generateSequence(this) { if (it is PsiFile) null else it.parent } @@ -75,12 +75,12 @@ fun PsiElement.isAncestorOf(child: PsiElement): Boolean = child.ancestors.contains(this) private inline fun PsiElement.findParent(resolveReferences: Boolean): T? { - return findParent({ false }, resolveReferences) + return findParent(resolveReferences) { false } } private inline fun PsiElement.findParent( + resolveReferences: Boolean, stop: (PsiElement) -> Boolean, - resolveReferences: Boolean ): T? { var el: PsiElement = this @@ -251,6 +251,7 @@ } } +@Suppress("PrivatePropertyName") private val REAL_NAME_KEY = Key("mcdev.real_name") var PsiMember.realName: String?