public class RedirectInjector extends InvokeInjector
A bytecode injector which allows a method call, field access or new object creation to be redirected to the annotated handler method. For method redirects, the handler method signature must match the hooked method precisely but prepended with an arg of the owning object's type to accept the object instance the method was going to be invoked upon. For example when hooking the following call:
int abc = 0; int def = 1; Foo someObject = new Foo(); // Hooking this method boolean xyz = someObject.bar(abc, def);
The signature of the redirected method should be:
public boolean barProxy(Foo someObject, int abc, int def)
For obvious reasons this does not apply for static methods, for static methods it is sufficient that the signature simply match the hooked method.
For field redirections, see the details in Redirect for the
required signature of the handler method.
For constructor redirections, the signature of the handler method should match the constructor itself, return type should be of the type of object being created.
Injector.InjectorData, Injector.TargetNode| Modifier and Type | Field and Description |
|---|---|
protected org.spongepowered.asm.mixin.injection.invoke.RedirectInjector.Meta |
meta
Meta is used to decorate the target node with information about this
injection
|
annotationType, classNode, info, isStatic, logger, methodArgs, methodNode, returnType| Modifier | Constructor and Description |
|---|---|
|
RedirectInjector(InjectionInfo info) |
protected |
RedirectInjector(InjectionInfo info,
java.lang.String annotationType) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
addTargetNode(Target target,
java.util.List<InjectionNodes.InjectionNode> myNodes,
org.objectweb.asm.tree.AbstractInsnNode insn,
java.util.Set<InjectionPoint> nominators) |
protected void |
checkTarget(Target target)
Sanity checks on target
|
protected void |
inject(Target target,
InjectionNodes.InjectionNode node) |
protected void |
injectAtConstructor(Target target,
InjectionNodes.InjectionNode node) |
protected void |
injectAtInstanceOf(Target target,
InjectionNodes.InjectionNode node) |
protected void |
injectAtInstanceOf(Target target,
org.objectweb.asm.tree.TypeInsnNode typeNode) |
protected void |
injectAtInvoke(Target target,
InjectionNodes.InjectionNode node)
Redirect a method invocation
|
protected void |
postInject(Target target,
InjectionNodes.InjectionNode node) |
protected boolean |
preInject(InjectionNodes.InjectionNode node) |
sanityCheckcanCoerce, canCoerce, canCoerce, checkCoerce, checkTargetForNode, checkTargetModifiers, find, findTargetNodes, inject, invokeHandler, invokeHandler, invokeHandlerWithArgs, invokeHandlerWithArgs, pushArgs, pushArgs, storeArgs, storeArgs, throwException, toString, validateParamsprotected org.spongepowered.asm.mixin.injection.invoke.RedirectInjector.Meta meta
public RedirectInjector(InjectionInfo info)
info - Injection infoprotected RedirectInjector(InjectionInfo info, java.lang.String annotationType)
protected void checkTarget(Target target)
InvokeInjectorcheckTarget in class InvokeInjectortarget - targetprotected void addTargetNode(Target target, java.util.List<InjectionNodes.InjectionNode> myNodes, org.objectweb.asm.tree.AbstractInsnNode insn, java.util.Set<InjectionPoint> nominators)
addTargetNode in class Injectorprotected void inject(Target target, InjectionNodes.InjectionNode node)
inject in class InvokeInjectorprotected boolean preInject(InjectionNodes.InjectionNode node)
protected void postInject(Target target, InjectionNodes.InjectionNode node)
postInject in class Injectorprotected void injectAtInvoke(Target target, InjectionNodes.InjectionNode node)
injectAtInvoke in class InvokeInjectortarget - Target to inject intonode - Discovered instruction nodeprotected void injectAtConstructor(Target target, InjectionNodes.InjectionNode node)
protected void injectAtInstanceOf(Target target, InjectionNodes.InjectionNode node)
protected void injectAtInstanceOf(Target target, org.objectweb.asm.tree.TypeInsnNode typeNode)