diff --git a/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt b/src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt index 438b82d54..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 @@ -58,6 +59,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) @@ -111,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() 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)