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 more details see the javadoc for the @Redirect annotation.
For example when hooking the following call:
int abc = 0; int def = 1; Foo someObject = new Foo();// Hooking this methodboolean 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, isInterface, 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(InjectorTarget injectorTarget,
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) |
sanityCheckaddTargetNode, canCoerce, canCoerce, canCoerce, checkCoerce, checkTargetForNode, checkTargetModifiers, find, findTargetNodes, inject, invokeHandler, invokeHandler, invokeHandlerWithArgs, invokeHandlerWithArgs, preInject, preInject, pushArgs, pushArgs, storeArgs, storeArgs, 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(InjectorTarget injectorTarget, 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)