Class InjectionInfo

    • Field Detail

      • activities

        protected final ActivityStack activities
        Activity tracker
      • isStatic

        protected final boolean isStatic
        Annotated method is static
      • slices

        protected final MethodSlices slices
        Method slice descriptors parsed from the annotation
      • atKey

        protected final java.lang.String atKey
        The key into the annotation which contains the injection points
      • injectionPointAnnotations

        protected final java.util.List<org.objectweb.asm.tree.AnnotationNode> injectionPointAnnotations
      • injectionPoints

        protected final java.util.List<InjectionPoint> injectionPoints
        Injection points parsed from At annotations
      • targetCount

        protected int targetCount
        Number of target methods identified by the injection points
      • injector

        protected Injector injector
        Bytecode injector
    • Constructor Detail

      • InjectionInfo

        protected InjectionInfo​(MixinTargetContext mixin,
                                org.objectweb.asm.tree.MethodNode method,
                                org.objectweb.asm.tree.AnnotationNode annotation)
        ctor
        Parameters:
        mixin - Mixin data
        method - Injector method
        annotation - Annotation to parse
      • InjectionInfo

        protected InjectionInfo​(MixinTargetContext mixin,
                                org.objectweb.asm.tree.MethodNode method,
                                org.objectweb.asm.tree.AnnotationNode annotation,
                                java.lang.String atKey)
    • Method Detail

      • 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

        protected void parseInjectionPoints​(java.util.List<org.objectweb.asm.tree.AnnotationNode> ats)
      • parseInjector

        protected abstract Injector parseInjector​(org.objectweb.asm.tree.AnnotationNode injectAnnotation)
      • 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

        public void notifyInjected​(Target target)
        Callback from injector which notifies us that a callback was injected. No longer used.
        Parameters:
        target - target into which the injector injected
      • getDescription

        protected java.lang.String getDescription()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getTargetCount

        public int getTargetCount()
        Get number of methods being injected into
        Returns:
        count of methods being injected into
      • getSlice

        public MethodSlice getSlice​(java.lang.String id)
        Get the slice descriptors
        Specified by:
        getSlice in interface ISliceContext
        Parameters:
        id - slice id to fetch
        Returns:
        method slice matching query
      • getSliceId

        public java.lang.String getSliceId​(java.lang.String id)
        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

        public org.objectweb.asm.tree.MethodNode addMethod​(int access,
                                                           java.lang.String name,
                                                           java.lang.String desc)
        Inject a method into the target class
        Parameters:
        access - Method access flags, synthetic will be automatically added
        name - Method name
        desc - 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

        public void addMessage​(java.lang.String format,
                               java.lang.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.
        Specified by:
        addMessage in interface IMessageSink
        Overrides:
        addMessage in class AnnotatedMethodInfo
        Parameters:
        format - Message format
        args - Format args
      • getMessages

        protected java.lang.String 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 - context
        method - 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 - context
        method - mixin method
        Returns:
        annotation or null
      • getInjectorPrefix

        public static java.lang.String getInjectorPrefix​(org.objectweb.asm.tree.AnnotationNode annotation)
        Get the conform prefix for an injector handler by type
        Parameters:
        annotation - Annotation to inspect
        Returns:
        conform prefix
      • register

        public static void register​(java.lang.Class<? extends InjectionInfo> type)
        Register an injector info class. The supplied class must be decorated with an InjectionInfo.AnnotationType annotation for registration purposes.
        Parameters:
        type - injection info subclass to register
      • getRegisteredAnnotations

        public static java.util.Set<java.lang.Class<? extends java.lang.annotation.Annotation>> getRegisteredAnnotations()