User: llamalad7 Date: 22 Oct 23 19:36 Revision: ddb9af5e585b8974405a8c8db54ca9dc84397d4a Summary: MixinExtras: Add support for `@WrapOperation`s targeting instantiations. (#2149) TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=8820&personal=false Index: src/main/kotlin/platform/mixin/handlers/mixinextras/MixinExtrasInjectorAnnotationHandler.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/mixinextras/MixinExtrasInjectorAnnotationHandler.kt (revision 84b0da56e07748f6c57233b5152fb41cf876a8df) +++ src/main/kotlin/platform/mixin/handlers/mixinextras/MixinExtrasInjectorAnnotationHandler.kt (revision ddb9af5e585b8974405a8c8db54ca9dc84397d4a) @@ -21,6 +21,7 @@ package com.demonwav.mcdev.platform.mixin.handlers.mixinextras import com.demonwav.mcdev.platform.mixin.handlers.InjectorAnnotationHandler +import com.demonwav.mcdev.platform.mixin.handlers.injectionPoint.NewInsnInjectionPoint import com.demonwav.mcdev.platform.mixin.inspection.injector.MethodSignature import com.demonwav.mcdev.platform.mixin.inspection.injector.ParameterGroup import com.demonwav.mcdev.platform.mixin.util.FieldTargetMember @@ -219,7 +220,7 @@ .resolveAsm(annotation.project) as? MethodTargetMember )?.classAndMethod val parameters = mutableListOf() - if (insn.opcode != Opcodes.INVOKESTATIC) { + if (insn.opcode != Opcodes.INVOKESTATIC && insn.name != "") { val receiver = if (insn.opcode == Opcodes.INVOKESPECIAL && !oldSuperBehavior) { targetClass.name } else { @@ -270,6 +271,10 @@ Opcodes.INSTANCEOF -> listOf(Parameter("object", Type.getType(Any::class.java).toPsiType(elementFactory))) + Opcodes.NEW -> NewInsnInjectionPoint.findInitCall(insn)?.let { + getPsiParameters(it, targetClass, annotation) + } + else -> null } } Index: src/main/kotlin/platform/mixin/handlers/mixinextras/WrapOperationHandler.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/mixinextras/WrapOperationHandler.kt (revision 84b0da56e07748f6c57233b5152fb41cf876a8df) +++ src/main/kotlin/platform/mixin/handlers/mixinextras/WrapOperationHandler.kt (revision ddb9af5e585b8974405a8c8db54ca9dc84397d4a) @@ -35,7 +35,8 @@ class WrapOperationHandler : MixinExtrasInjectorAnnotationHandler() { override val supportedInstructionTypes = listOf( - InstructionType.METHOD_CALL, InstructionType.FIELD_GET, InstructionType.FIELD_SET, InstructionType.INSTANCEOF + InstructionType.METHOD_CALL, InstructionType.FIELD_GET, InstructionType.FIELD_SET, InstructionType.INSTANCEOF, + InstructionType.INSTANTIATION ) override fun getAtKey(annotation: PsiAnnotation): String {