2121package com.demonwav.mcdev.platform.mixin.handlers.injectionPoint
2222
2323import com.demonwav.mcdev.platform.mixin.reference.MixinSelector
24- import com.demonwav.mcdev.platform.mixin.reference.toMixinString
2524import com.demonwav.mcdev.platform.mixin.util.InjectionPointSpecifier
2625import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations.SLICE
2726import com.demonwav.mcdev.platform.mixin.util.SourceCodeLocationInfo
@@ -32,7 +31,6 @@ import com.demonwav.mcdev.util.constantValue
3231import com.demonwav.mcdev.util.createLiteralExpression
3332import com.demonwav.mcdev.util.findAnnotations
3433import com.demonwav.mcdev.util.fullQualifiedName
35- import com.demonwav.mcdev.util.getQualifiedMemberReference
3634import com.demonwav.mcdev.util.internalName
3735import com.demonwav.mcdev.util.memoized
3836import com.demonwav.mcdev.util.realName
@@ -132,30 +130,32 @@ abstract class InjectionPoint<T : PsiElement> {
132130 return doCreateCollectVisitor(at, target, targetClass, mode)?.also {
133131 val isInsideSlice = at.parentOfType<PsiAnnotation >()?.hasQualifiedName(SLICE ) == true
134132 val defaultSpecifier = if (isInsideSlice) InjectionPointSpecifier .FIRST else InjectionPointSpecifier .ALL
135- addFilters(at, targetClass, it, defaultSpecifier)
133+ addFilters(at, targetClass, it, defaultSpecifier, mode )
136134 }
137135 }
138136
139137 protected open fun addFilters (
140138 at : PsiAnnotation ,
141139 targetClass : ClassNode ,
142140 collectVisitor : CollectVisitor <T >,
143- defaultSpecifier : InjectionPointSpecifier
141+ defaultSpecifier : InjectionPointSpecifier ,
142+ mode : CollectVisitor .Mode ,
144143 ) {
145- addStandardFilters(at, targetClass, collectVisitor, defaultSpecifier)
144+ addStandardFilters(at, targetClass, collectVisitor, defaultSpecifier, mode )
146145 }
147146
148147 fun addStandardFilters (
149148 at : PsiAnnotation ,
150149 targetClass : ClassNode ,
151150 collectVisitor : CollectVisitor <T >,
152- defaultSpecifier : InjectionPointSpecifier
151+ defaultSpecifier : InjectionPointSpecifier ,
152+ mode : CollectVisitor .Mode ,
153153 ) {
154154 addShiftSupport(at, targetClass, collectVisitor)
155155 addSliceFilter(at, targetClass, collectVisitor)
156156 // make sure the ordinal filter is last, so that the ordinal only increments once the other filters have passed
157157 addOrdinalFilter(at, targetClass, collectVisitor)
158- addSpecifierFilter(at, targetClass, collectVisitor, defaultSpecifier)
158+ addSpecifierFilter(at, targetClass, collectVisitor, defaultSpecifier, mode )
159159 }
160160
161161 protected open fun addShiftSupport (at : PsiAnnotation , targetClass : ClassNode , collectVisitor : CollectVisitor <* >) {
@@ -215,8 +215,13 @@ abstract class InjectionPoint<T : PsiElement> {
215215 at : PsiAnnotation ,
216216 targetClass : ClassNode ,
217217 collectVisitor : CollectVisitor <T >,
218- defaultSpecifier : InjectionPointSpecifier
218+ defaultSpecifier : InjectionPointSpecifier ,
219+ mode : CollectVisitor .Mode ,
219220 ) {
221+ if (mode == CollectVisitor .Mode .COMPLETION ) {
222+ // Ignore the specifier, we want to show all results
223+ return
224+ }
220225 val point = at.findDeclaredAttributeValue(" value" )?.constantStringValue ? : return
221226 val specifier = InjectionPointSpecifier .entries.firstOrNull { point.endsWith(" :$it " ) } ? : defaultSpecifier
222227 collectVisitor.addResultFilter(" specifier" ) { results, _ ->
@@ -262,7 +267,7 @@ abstract class QualifiedInjectionPoint<T : PsiMember> : InjectionPoint<T>() {
262267
263268 final override fun usesMemberReference () = true
264269
265- protected abstract fun createLookup (targetClass : ClassNode , m : T , owner : String ): LookupElementBuilder
270+ protected abstract fun createLookup (targetClass : ClassNode , m : T , insn : AbstractInsnNode ): LookupElementBuilder
266271
267272 protected open fun getInternalName (m : T ): String {
268273 return m.realName ? : m.name!!
@@ -273,7 +278,7 @@ abstract class QualifiedInjectionPoint<T : PsiMember> : InjectionPoint<T>() {
273278 result : CollectVisitor .Result <T >,
274279 ): LookupElementBuilder {
275280 return qualifyLookup(
276- createLookup(targetClass, result.target, result.qualifier ? : targetClass.name ),
281+ createLookup(targetClass, result.target, result.originalInsn ),
277282 targetClass,
278283 result.target,
279284 )
@@ -296,10 +301,11 @@ abstract class QualifiedInjectionPoint<T : PsiMember> : InjectionPoint<T>() {
296301
297302abstract class AbstractMethodInjectionPoint : QualifiedInjectionPoint <PsiMethod >() {
298303
299- override fun createLookup (targetClass : ClassNode , m : PsiMethod , owner : String ): LookupElementBuilder {
304+ override fun createLookup (targetClass : ClassNode , m : PsiMethod , insn : AbstractInsnNode ): LookupElementBuilder {
305+ insn as MethodInsnNode
300306 return JavaLookupElementBuilder .forMethod(
301307 m,
302- m.getQualifiedMemberReference( owner).toMixinString() ,
308+ " L ${insn. owner} ; ${insn.name}${insn.desc} " ,
303309 PsiSubstitutor .EMPTY ,
304310 null ,
305311 )
0 commit comments