User: rednesto Date: 17 Dec 23 12:20 Revision: fcdec7137c8d282e3b39dca75fe5745d3e343cca Summary: Fix minecraft-dev/mcdev-error-report#1648 The previous "manual" way didn't take implicit parameters into account TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=8910&personal=false Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt (revision fe53edc23f885e90e1cd69ff99b8232ba9d54d4c) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt (revision fcdec7137c8d282e3b39dca75fe5745d3e343cca) @@ -23,13 +23,14 @@ import com.demonwav.mcdev.platform.mixin.reference.MixinSelector import com.demonwav.mcdev.platform.mixin.reference.MixinSelectorParser import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations.AT +import com.demonwav.mcdev.platform.mixin.util.findClassNodeByPsiClass +import com.demonwav.mcdev.platform.mixin.util.findMethod import com.demonwav.mcdev.platform.mixin.util.shortName import com.demonwav.mcdev.util.MemberReference import com.demonwav.mcdev.util.constantStringValue import com.demonwav.mcdev.util.descriptor import com.demonwav.mcdev.util.fullQualifiedName import com.demonwav.mcdev.util.internalName -import com.demonwav.mcdev.util.mapToArray import com.demonwav.mcdev.util.shortName import com.intellij.codeInsight.completion.JavaLookupElementBuilder import com.intellij.codeInsight.lookup.LookupElementBuilder @@ -40,12 +41,10 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiMember import com.intellij.psi.PsiMethod -import com.intellij.psi.PsiModifier import com.intellij.psi.PsiNewExpression import com.intellij.psi.PsiSubstitutor import com.intellij.psi.util.parentOfType import org.objectweb.asm.Opcodes -import org.objectweb.asm.Type import org.objectweb.asm.tree.AbstractInsnNode import org.objectweb.asm.tree.ClassNode import org.objectweb.asm.tree.MethodInsnNode @@ -109,18 +108,11 @@ private val selector: MixinSelector, ) : NavigationVisitor() { override fun visitNewExpression(expression: PsiNewExpression) { - val anonymousName = expression.anonymousClass?.fullQualifiedName?.replace('.', '/') + val anonymousClass = expression.anonymousClass + val anonymousName = anonymousClass?.fullQualifiedName?.replace('.', '/') if (anonymousName != null) { - // guess descriptor - val hasThis = expression.parentOfType()?.hasModifierProperty(PsiModifier.STATIC) == false - val thisType = if (hasThis) expression.parentOfType()?.internalName else null - val argTypes = expression.argumentList?.expressionTypes?.map { it.descriptor } ?: emptyList() - val bytecodeArgTypes = if (thisType != null) listOf(thisType) + argTypes else argTypes - val methodDesc = Type.getMethodDescriptor( - Type.VOID_TYPE, - *bytecodeArgTypes.mapToArray { Type.getType(it) }, - ) - if (selector.matchMethod(anonymousName, "", methodDesc)) { + val method = findClassNodeByPsiClass(anonymousClass)?.findMethod(selector) + if (method != null && selector.matchMethod(anonymousName, method.name, method.desc)) { addResult(expression) } } else {