Class AfterInvoke
This injection point searches for INVOKEVIRTUAL, INVOKESTATIC and
INVOKESPECIAL opcodes matching its arguments and returns a list of insns
after the matching instructions, with special handling for methods
invocations which return a value and immediately assign it to a local
variable. It accepts the following parameters from
At:
- target
- A
Target Selectorwhich identifies the target method - ordinal
- The ordinal position of the method invocation to match. For example if the method is invoked 3 times and you want to match the 3rd then you can specify an ordinal of 2 (ordinals are zero-indexed). The default value is -1 which supresses ordinal matching
- named argument: fuzz
- By default, the injection point inspects only the instruction immediately following the matched invocation and will match store instructions. Specifying a higher fuzz increases the search range, skipping instructions as necessary to find a matching store opcode.
- named argument: skip
- When fuzz is specified, a default list of skippable opcodes is
used. The list of skippable opcodes can be overridden by specifying a list
of opcodes (numeric values or constant names from
Opcodescan be used). This can be used to restrict the fuzz behaviour to consume only expected opcodes (eg. CHECKCAST). Note that store opcodes cannot be skipped and specifying them has no effect.
Example:
@At(value = "INVOKE_ASSIGN", target="func_1234_a(III)J")
Note that unlike other standard injection points, this class matches the
insn after the invocation, and after any local variable assignment. Use the
shift specifier to
adjust the matched opcode as necessary.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.spongepowered.asm.mixin.injection.points.BeforeInvoke
BeforeInvoke.SearchTypeNested classes/interfaces inherited from class org.spongepowered.asm.mixin.injection.InjectionPoint
InjectionPoint.AtCode, InjectionPoint.Flags, InjectionPoint.RestrictTargetLevel, InjectionPoint.Specifier -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int[]Default opcodes which are eligible to be skipped (see named argument skip above) if named argument fuzz is increased beyond the default value of 1.Fields inherited from class org.spongepowered.asm.mixin.injection.points.BeforeInvoke
allowPermissive, className, context, logger, mixin, ordinal, targetFields inherited from class org.spongepowered.asm.mixin.injection.InjectionPoint
DEFAULT_ALLOWED_SHIFT_BY, MAX_ALLOWED_SHIFT_BY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected booleanaddInsn(org.objectweb.asm.tree.InsnList insns, Collection<org.objectweb.asm.tree.AbstractInsnNode> nodes, org.objectweb.asm.tree.AbstractInsnNode insn) Methods inherited from class org.spongepowered.asm.mixin.injection.points.BeforeInvoke
find, find, inspectInsn, log, matchesInsn, matchesOrdinal, setLoggingMethods inherited from class org.spongepowered.asm.mixin.injection.InjectionPoint
addMessage, after, and, before, checkPriority, getAtCode, getId, getSlice, getSpecifier, getTargetRestriction, nextNode, or, parse, parse, parse, parse, parse, parse, parse, parse, register, register, setTargetRestriction, shift, toString
-
Field Details
-
DEFAULT_SKIP
public static final int[] DEFAULT_SKIPDefault opcodes which are eligible to be skipped (see named argument skip above) if named argument fuzz is increased beyond the default value of 1.Skipped opcodes: DUP, IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, INEG, LNEG, FNEG, DNEG, ISHL, LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, IINC, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C, I2S, CHECKCAST, INSTANCEOF
-
-
Constructor Details
-
AfterInvoke
-
-
Method Details
-
addInsn
protected boolean addInsn(org.objectweb.asm.tree.InsnList insns, Collection<org.objectweb.asm.tree.AbstractInsnNode> nodes, org.objectweb.asm.tree.AbstractInsnNode insn) - Overrides:
addInsnin classBeforeInvoke
-