User: joe Date: 25 Jun 25 18:53 Revision: b3c73c5154a3df69f178c1fa16537481e3b470b4 Summary: Do prefix matching before creating shadow lookup elements TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=10089&personal=false Index: src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt =================================================================== --- src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt (revision 5519c363e28c8e8030c9e25b5dbe6736c79f8a02) +++ src/main/kotlin/platform/mixin/completion/MixinCompletionContributor.kt (revision b3c73c5154a3df69f178c1fa16537481e3b470b4) @@ -32,7 +32,7 @@ import com.intellij.codeInsight.completion.JavaCompletionContributor import com.intellij.codeInsight.completion.JavaCompletionSorting import com.intellij.codeInsight.completion.LegacyCompletionContributor -import com.intellij.codeInsight.completion.PrioritizedLookupElement +import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiClassType import com.intellij.psi.PsiExpression import com.intellij.psi.PsiJavaReference @@ -107,8 +107,11 @@ // Process methods and fields from target class val elements = findShadowTargets(psiClass, start, superMixin != null) + .filter { + val name = it.name + StringUtil.isJavaIdentifier(name) && prefixMatcher.prefixMatches(name) + } .map { it.createLookupElement(psiClass.project) } - .filter { prefixMatcher.prefixMatches(it) } .filter(filter, position) .toList() Index: src/main/kotlin/platform/mixin/util/TargetClass.kt =================================================================== --- src/main/kotlin/platform/mixin/util/TargetClass.kt (revision 5519c363e28c8e8030c9e25b5dbe6736c79f8a02) +++ src/main/kotlin/platform/mixin/util/TargetClass.kt (revision b3c73c5154a3df69f178c1fa16537481e3b470b4) @@ -120,6 +120,7 @@ sealed class MixinTargetMember(val mixin: PsiClass?) { abstract val access: Int + abstract val name: String abstract fun findSourceElement( project: Project, @@ -138,6 +139,7 @@ constructor(clazz: ClassNode, field: FieldNode) : this(ClassAndFieldNode(clazz, field)) override val access = classAndField.field.access + override val name: String = classAndField.field.name override fun findSourceElement(project: Project, scope: GlobalSearchScope, canDecompile: Boolean) = classAndField.field.findSourceField(classAndField.clazz, project, scope, canDecompile) @@ -153,6 +155,7 @@ constructor(clazz: ClassNode, method: MethodNode) : this(ClassAndMethodNode(clazz, method)) override val access = classAndMethod.method.access + override val name: String = classAndMethod.method.name override fun findSourceElement(project: Project, scope: GlobalSearchScope, canDecompile: Boolean) = classAndMethod.method.findSourceElement(classAndMethod.clazz, project, scope, canDecompile)