From 5f3f2e61c252f4a7073d77e8447ae55561142d2a Mon Sep 17 00:00:00 2001 From: LlamaLad7 Date: Wed, 25 Jun 2025 22:11:51 +0100 Subject: [PATCH 1/3] Fix: Run all other completion contributors before `MixinCompletionContributor`. --- .../platform/mixin/completion/MixinCompletionContributor.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt b/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt index 438b82d54..f80311263 100644 --- a/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt +++ b/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt @@ -58,6 +58,9 @@ class MixinCompletionContributor : CompletionContributor() { return } + // Run all the other contributors first + result.runRemainingContributors(parameters, result::passResult) + val superMixin = psiClass.superClass?.takeIf { it.isWritable && it.isMixin } val javaResult = JavaCompletionSorting.addJavaSorting(parameters, result) From bef52802be42df2efccb824f3077bb11aa5711cf Mon Sep 17 00:00:00 2001 From: LlamaLad7 Date: Wed, 25 Jun 2025 22:12:05 +0100 Subject: [PATCH 2/3] Fix: Check progress when adding Mixin completion elements. --- .../platform/mixin/completion/MixinCompletionContributor.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt b/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt index f80311263..f6e7c3522 100644 --- a/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt +++ b/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt @@ -32,6 +32,7 @@ import com.intellij.codeInsight.completion.CompletionType import com.intellij.codeInsight.completion.JavaCompletionContributor import com.intellij.codeInsight.completion.JavaCompletionSorting import com.intellij.codeInsight.completion.LegacyCompletionContributor +import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiClassType import com.intellij.psi.PsiExpression @@ -114,6 +115,7 @@ class MixinCompletionContributor : CompletionContributor() { val name = it.name StringUtil.isJavaIdentifier(name) && prefixMatcher.prefixMatches(name) } + .onEach { ProgressManager.checkCanceled() } .map { it.createLookupElement(psiClass.project) } .filter(filter, position) .toList() From dd1cc6e5eb19d97c00281e39f7634b36046a86d5 Mon Sep 17 00:00:00 2001 From: LlamaLad7 Date: Wed, 25 Jun 2025 22:56:45 +0100 Subject: [PATCH 3/3] Perf: Check `canEverMatch` in MixinSelector.matchMethod/Field --- src/main/kotlin/platform/mixin/reference/MixinSelectors.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/kotlin/platform/mixin/reference/MixinSelectors.kt b/src/main/kotlin/platform/mixin/reference/MixinSelectors.kt index d9bd322e8..1b4ebb5db 100644 --- a/src/main/kotlin/platform/mixin/reference/MixinSelectors.kt +++ b/src/main/kotlin/platform/mixin/reference/MixinSelectors.kt @@ -105,6 +105,9 @@ interface MixinSelector { fun matchMethod(owner: String, name: String, desc: String): Boolean fun matchField(field: PsiField, qualifier: PsiClass): Boolean { + if (!canEverMatch(field.name)) { + return false + } val fqn = qualifier.fullQualifiedName ?: return false val desc = field.descriptor ?: return false return matchField(fqn.replace('.', '/'), field.name, desc) @@ -115,6 +118,9 @@ interface MixinSelector { } fun matchMethod(method: PsiMethod, qualifier: PsiClass): Boolean { + if (!canEverMatch(method.name)) { + return false + } val fqn = qualifier.fullQualifiedName ?: return false val desc = method.descriptor ?: return false return matchMethod(fqn.replace('.', '/'), method.internalName, desc)