Class InjectionInfo

All Implemented Interfaces:
ISliceContext, IInjectionPointContext, ISelectorContext, IMessageSink
Direct Known Subclasses:
CallbackInjectionInfo, ModifyArgInjectionInfo, ModifyArgsInjectionInfo, ModifyConstantInjectionInfo, ModifyVariableInjectionInfo, RedirectInjectionInfo

public abstract class InjectionInfo extends SpecialMethodInfo implements ISliceContext
Contructs information about an injection from an Inject annotation and allows the injection to be processed.
  • Field Details

    • activities

      protected final ActivityStack activities
      Activity tracker
    • isStatic

      protected final boolean isStatic
      Annotated method is static
    • targets

      protected final TargetSelectors targets
      Targets
    • slices

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

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

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

      protected final List<InjectionPoint> injectionPoints
      Injection points parsed from At annotations
    • targetNodes

      protected final Map<Target,List<InjectionNodes.InjectionNode>> targetNodes
      Map of lists of nodes enumerated by calling prepare()
    • targetCount

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

      protected Injector injector
      Bytecode injector
    • group

      protected InjectorGroupInfo 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 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, 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

      protected void parseInjectionPoints(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 String getDescription()
    • toString

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

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

      public MethodSlice getSlice(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 String getSliceId(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, String name, 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(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.
      Specified by:
      addMessage in interface IMessageSink
      Overrides:
      addMessage in class AnnotatedMethodInfo
      Parameters:
      format - Message format
      args - Format args
    • getMessages

      protected 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 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(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 Set<Class<? extends Annotation>> getRegisteredAnnotations()