Class RedirectInjector
- Direct Known Subclasses:
ModifyConstantInjector
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.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.spongepowered.asm.mixin.injection.code.Injector
Injector.InjectorData, Injector.TargetNode -
Field Summary
Fields Modifier and Type Field Description protected org.spongepowered.asm.mixin.injection.invoke.RedirectInjector.MetametaMeta is used to decorate the target node with information about this injectionFields inherited from class org.spongepowered.asm.mixin.injection.code.Injector
annotationType, classNode, info, isStatic, logger, methodArgs, methodNode, returnType -
Constructor Summary
Constructors Modifier Constructor Description RedirectInjector(InjectionInfo info)protectedRedirectInjector(InjectionInfo info, java.lang.String annotationType) -
Method Summary
Modifier and Type Method Description protected voidaddTargetNode(Target target, java.util.List<InjectionNodes.InjectionNode> myNodes, org.objectweb.asm.tree.AbstractInsnNode insn, java.util.Set<InjectionPoint> nominators)protected voidcheckTarget(Target target)Sanity checks on targetprotected voidinject(Target target, InjectionNodes.InjectionNode node)protected voidinjectAtConstructor(Target target, InjectionNodes.InjectionNode node)protected voidinjectAtInstanceOf(Target target, org.objectweb.asm.tree.TypeInsnNode typeNode)protected voidinjectAtInstanceOf(Target target, InjectionNodes.InjectionNode node)protected voidinjectAtInvoke(Target target, InjectionNodes.InjectionNode node)Redirect a method invocationprotected voidpostInject(Target target, InjectionNodes.InjectionNode node)protected booleanpreInject(InjectionNodes.InjectionNode node)Methods inherited from class org.spongepowered.asm.mixin.injection.invoke.InvokeInjector
sanityCheckMethods inherited from class org.spongepowered.asm.mixin.injection.code.Injector
canCoerce, canCoerce, canCoerce, checkCoerce, checkTargetForNode, checkTargetModifiers, find, findTargetNodes, inject, invokeHandler, invokeHandler, invokeHandlerWithArgs, invokeHandlerWithArgs, pushArgs, pushArgs, storeArgs, storeArgs, throwException, toString, validateParamsMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Field Details
-
meta
protected org.spongepowered.asm.mixin.injection.invoke.RedirectInjector.Meta metaMeta is used to decorate the target node with information about this injection
-
-
Constructor Details
-
RedirectInjector
- Parameters:
info- Injection info
-
RedirectInjector
-
-
Method Details
-
checkTarget
Description copied from class:InvokeInjectorSanity checks on target- Overrides:
checkTargetin classInvokeInjector- Parameters:
target- target
-
addTargetNode
protected void addTargetNode(Target target, java.util.List<InjectionNodes.InjectionNode> myNodes, org.objectweb.asm.tree.AbstractInsnNode insn, java.util.Set<InjectionPoint> nominators)- Overrides:
addTargetNodein classInjector
-
inject
- Overrides:
injectin classInvokeInjector
-
preInject
-
postInject
- Overrides:
postInjectin classInjector
-
injectAtInvoke
Redirect a method invocation- Specified by:
injectAtInvokein classInvokeInjector- Parameters:
target- Target to inject intonode- Discovered instruction node
-
injectAtConstructor
-
injectAtInstanceOf
-
injectAtInstanceOf
-