Class InjectionInfo
java.lang.Object
org.spongepowered.asm.mixin.struct.AnnotatedMethodInfo
org.spongepowered.asm.mixin.struct.SpecialMethodInfo
org.spongepowered.asm.mixin.injection.struct.InjectionInfo
- All Implemented Interfaces:
ISliceContext
,IInjectionPointContext
,ISelectorContext
,IMessageSink
- Direct Known Subclasses:
CallbackInjectionInfo
,ModifyArgInjectionInfo
,ModifyArgsInjectionInfo
,ModifyConstantInjectionInfo
,ModifyVariableInjectionInfo
,RedirectInjectionInfo
Contructs information about an injection from an
Inject
annotation
and allows the injection to be processed.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic @interface
Decoration for subclasses which indicates the injector annotation that the subclass handlesstatic @interface
Decoration for subclasses which specifies the prefix to use when conforming annotated handler methodsstatic @interface
Decoration for subclasses which specifies the order (phase) in which the injector should be applied relative to other injectors. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final ActivityStack
Activity trackerprotected final String
The key into the annotation which contains the injection pointsprotected InjectorGroupInfo
Injection groupprotected final List
<org.objectweb.asm.tree.AnnotationNode> protected final List
<InjectionPoint> Injection points parsed fromAt
annotationsprotected Injector
Bytecode injectorprotected final boolean
Annotated method is staticprotected final MethodSlices
Method slice descriptors parsed from the annotationprotected int
Number of target methods identified by the injection pointsprotected final Map
<Target, List<InjectionNodes.InjectionNode>> Map of lists of nodes enumerated by callingprepare()
protected final TargetSelectors
TargetsFields inherited from class org.spongepowered.asm.mixin.struct.SpecialMethodInfo
classNode, mixin
Fields inherited from class org.spongepowered.asm.mixin.struct.AnnotatedMethodInfo
annotation, annotationType, method, methodName
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
InjectionInfo
(MixinTargetContext mixin, org.objectweb.asm.tree.MethodNode method, org.objectweb.asm.tree.AnnotationNode annotation) ctorprotected
InjectionInfo
(MixinTargetContext mixin, org.objectweb.asm.tree.MethodNode method, org.objectweb.asm.tree.AnnotationNode annotation, String atKey) -
Method Summary
Modifier and TypeMethodDescriptionvoid
addCallbackInvocation
(org.objectweb.asm.tree.MethodNode handler) Notify method, called by injector when adding a callback into a targetvoid
addMessage
(String format, Object... args) Notify method, called by injector or injection point when a notable but non-fatal failures occur, for example allows injection points to add notes when they return no results.org.objectweb.asm.tree.MethodNode
Inject a method into the target classprotected String
int
Get the injected callback countstatic org.objectweb.asm.tree.AnnotationNode
getInjectorAnnotation
(IMixinInfo mixin, org.objectweb.asm.tree.MethodNode method) Returns any injector annotation found on the specified method.static String
getInjectorPrefix
(org.objectweb.asm.tree.AnnotationNode annotation) Get the conform prefix for an injector handler by typeprotected String
int
getOrder()
Get the application order for this injector typestatic Set
<Class<? extends Annotation>> Get the slice descriptorsgetSliceId
(String id) Return the mapped slice id for the specified ID.int
Get number of methods being injected intovoid
inject()
Perform injectionsboolean
isValid()
Get whether there is enough valid information in this info to actually perform an injection.void
notifyInjected
(Target target) Callback from injector which notifies us that a callback was injected.static InjectionInfo
parse
(MixinTargetContext mixin, org.objectweb.asm.tree.MethodNode method) Parse an injector from the specified method (if an injector annotation is present).protected void
parseInjectionPoints
(List<org.objectweb.asm.tree.AnnotationNode> ats) protected abstract Injector
parseInjector
(org.objectweb.asm.tree.AnnotationNode injectAnnotation) protected void
protected void
protected void
void
Perform cleanup and post-injection tasksvoid
Perform pre-injection checks and tasksvoid
prepare()
Discover injection pointsprotected void
Parse the info from the supplied annotationprotected void
static void
register
(Class<? extends InjectionInfo> type) Register an injector info class.toString()
Methods inherited from class org.spongepowered.asm.mixin.struct.SpecialMethodInfo
getClassInfo, getClassNode, getMethodName, getTargetClassInfo, getTargetClassNode
Methods inherited from class org.spongepowered.asm.mixin.struct.AnnotatedMethodInfo
getAnnotation, getAnnotationNode, getDynamicInfo, getDynamicInfo, getDynamicInfo, getElementDescription, getMethod, getMixin, getParent, getSelectorAnnotation, getSelectorCoordinate, remap
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.spongepowered.asm.mixin.injection.IInjectionPointContext
getAnnotationNode, getMethod
Methods inherited from interface org.spongepowered.asm.mixin.injection.selectors.ISelectorContext
getAnnotation, getElementDescription, getMixin, getParent, getSelectorAnnotation, getSelectorCoordinate, remap
-
Field Details
-
activities
Activity tracker -
isStatic
protected final boolean isStaticAnnotated method is static -
targets
Targets -
slices
Method slice descriptors parsed from the annotation -
atKey
The key into the annotation which contains the injection points -
injectionPointAnnotations
-
injectionPoints
Injection points parsed fromAt
annotations -
targetNodes
Map of lists of nodes enumerated by callingprepare()
-
targetCount
protected int targetCountNumber of target methods identified by the injection points -
injector
Bytecode injector -
group
Injection group
-
-
Constructor Details
-
InjectionInfo
protected InjectionInfo(MixinTargetContext mixin, org.objectweb.asm.tree.MethodNode method, org.objectweb.asm.tree.AnnotationNode annotation) ctor- Parameters:
mixin
- Mixin datamethod
- Injector methodannotation
- Annotation to parse
-
InjectionInfo
protected InjectionInfo(MixinTargetContext mixin, org.objectweb.asm.tree.MethodNode method, org.objectweb.asm.tree.AnnotationNode annotation, String atKey)
-
-
Method Details
-
readAnnotation
protected void readAnnotation()Parse the info from the supplied annotation -
readInjectionPoints
protected void readInjectionPoints() -
parseRequirements
protected void parseRequirements() -
parseOrder
protected void parseOrder() -
parseSelectors
protected void parseSelectors() -
parseInjectionPoints
-
parseInjector
-
isValid
public boolean isValid()Get whether there is enough valid information in this info to actually perform an injection.- Returns:
- true if this InjectionInfo was successfully parsed
-
getOrder
public int getOrder()Get the application order for this injector type -
prepare
public void prepare()Discover injection points -
preInject
public void preInject()Perform pre-injection checks and tasks -
inject
public void inject()Perform injections -
postInject
public void postInject()Perform cleanup and post-injection tasks -
notifyInjected
Callback from injector which notifies us that a callback was injected. No longer used.- Parameters:
target
- target into which the injector injected
-
getDescription
-
toString
-
getTargetCount
public int getTargetCount()Get number of methods being injected into- Returns:
- count of methods being injected into
-
getSlice
Get the slice descriptors- Specified by:
getSlice
in interfaceISliceContext
- Parameters:
id
- slice id to fetch- Returns:
- method slice matching query
-
getSliceId
Return the mapped slice id for the specified ID. Injectors which only support use of a single slice will always return the default id (an empty string)- Parameters:
id
- slice id- Returns:
- mapped id
-
getInjectedCallbackCount
public int getInjectedCallbackCount()Get the injected callback count- Returns:
- the injected callback count
-
addMethod
Inject a method into the target class- Parameters:
access
- Method access flags, synthetic will be automatically addedname
- Method namedesc
- Method descriptor- Returns:
- new method
-
addCallbackInvocation
public void addCallbackInvocation(org.objectweb.asm.tree.MethodNode handler) Notify method, called by injector when adding a callback into a target- Parameters:
handler
- callback handler being invoked
-
addMessage
Notify method, called by injector or injection point when a notable but non-fatal failures occur, for example allows injection points to add notes when they return no results.- Specified by:
addMessage
in interfaceIMessageSink
- Overrides:
addMessage
in classAnnotatedMethodInfo
- Parameters:
format
- Message formatargs
- Format args
-
getMessages
-
parse
public static InjectionInfo parse(MixinTargetContext mixin, org.objectweb.asm.tree.MethodNode method) Parse an injector from the specified method (if an injector annotation is present). If no injector annotation is present then null is returned.- Parameters:
mixin
- contextmethod
- mixin method- Returns:
- parsed InjectionInfo or null
-
getInjectorAnnotation
public static org.objectweb.asm.tree.AnnotationNode getInjectorAnnotation(IMixinInfo mixin, org.objectweb.asm.tree.MethodNode method) Returns any injector annotation found on the specified method. If multiple matching annotations are found then an exception is thrown. If no annotations are present then null is returned.- Parameters:
mixin
- contextmethod
- mixin method- Returns:
- annotation or null
-
getInjectorPrefix
Get the conform prefix for an injector handler by type- Parameters:
annotation
- Annotation to inspect- Returns:
- conform prefix
-
register
Register an injector info class. The supplied class must be decorated with anInjectionInfo.AnnotationType
annotation for registration purposes.- Parameters:
type
- injection info subclass to register
-
getRegisteredAnnotations
-