Class AccessorInfo

    • Field Detail

      • annotationClass

        protected final java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass
        Annotation class
      • argTypes

        protected final org.objectweb.asm.Type[] argTypes
        Accessor method argument types (raw, from method)
      • returnType

        protected final org.objectweb.asm.Type returnType
        Accessor method return type (raw, from method)
      • isStatic

        protected final boolean isStatic
        Accessor method staticness
      • specifiedName

        protected final java.lang.String specifiedName
        Name specified in the attached annotation, can be null
      • type

        protected final AccessorInfo.AccessorType type
        Type of accessor to generate, computed based on the signature of the target method.
      • target

        protected final ITargetSelector target
        Computed information about the target field or method, name and descriptor
      • targetField

        protected org.objectweb.asm.tree.FieldNode targetField
        For accessors, stores the discovered target field
      • targetMethod

        protected org.objectweb.asm.tree.MethodNode targetMethod
        For invokers, stores the discovered target method
      • generator

        protected AccessorGenerator generator
        Generator which will be responsible for actually generating the accessor method body
    • Constructor Detail

      • AccessorInfo

        public AccessorInfo​(MixinTargetContext mixin,
                            org.objectweb.asm.tree.MethodNode method)
      • AccessorInfo

        protected AccessorInfo​(MixinTargetContext mixin,
                               org.objectweb.asm.tree.MethodNode method,
                               java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
    • Method Detail

      • initTargetFieldType

        protected org.objectweb.asm.Type initTargetFieldType()
      • getTargetName

        protected java.lang.String getTargetName​(java.lang.String name)
      • inflectTarget

        protected java.lang.String inflectTarget()
        Uses the name of this accessor method and the calculated accessor type to try and inflect the name of the target field or method. This allows a method named getFoo to be inflected to a target named foo for example.
      • inflectTarget

        public static java.lang.String inflectTarget​(java.lang.String name,
                                                     AccessorInfo.AccessorType type,
                                                     java.lang.String description,
                                                     ISelectorContext context,
                                                     boolean verbose)
        Uses the name of an accessor method and the accessor type to try and inflect the name of the target field or method. This allows a method named getFoo to be inflected to a target named foo for example.
        Parameters:
        name - Name of the accessor method
        type - Type of accessor being processed, this is calculated from the method signature (void methods being setters, methods with return types being getters)
        description - description of the accessor to include in error messages
        context - Mixin context
        verbose - Emit warnings when accessor prefix doesn't match type
        Returns:
        inflected target member name or null if name cannot be inflected
      • inflectTarget

        public static java.lang.String inflectTarget​(AccessorInfo.AccessorName name,
                                                     AccessorInfo.AccessorType type,
                                                     java.lang.String description,
                                                     ISelectorContext context,
                                                     boolean verbose)
        Uses the name of an accessor method and the accessor type to try and inflect the name of the target field or method. This allows a method named getFoo to be inflected to a target named foo for example.
        Parameters:
        name - Name of the accessor method
        type - Type of accessor being processed, this is calculated from the method signature (void methods being setters, methods with return types being getters)
        description - description of the accessor to include in error messages
        context - Mixin context
        verbose - Emit warnings when accessor prefix doesn't match type
        Returns:
        inflected target member name or null if name cannot be inflected
      • getTarget

        public final ITargetSelector getTarget()
        Get the inflected/specified target member for this accessor
      • getTargetFieldType

        public final org.objectweb.asm.Type getTargetFieldType()
        For field accessors, returns the field type, returns null for invokers
      • getTargetField

        public final org.objectweb.asm.tree.FieldNode getTargetField()
        For field accessors, returns the target field, returns null for invokers
      • getTargetMethod

        public final org.objectweb.asm.tree.MethodNode getTargetMethod()
        For invokers, returns the target method, returns null for field accessors
      • getReturnType

        public final org.objectweb.asm.Type getReturnType()
        Get the return type of the annotated method
      • getArgTypes

        public final org.objectweb.asm.Type[] getArgTypes()
        Get the argument types of the annotated method
      • isStatic

        public boolean isStatic()
        Get whether the accessor itself is static
      • toString

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

        public void locate()
        First pass, locate the target field in the class. This is done after all other mixins are applied so that mixin-added fields and methods can be targetted.
      • validate

        public void validate()
        Called immediately after locate, initialises the generator for this accessor and runs validation.
      • generate

        public org.objectweb.asm.tree.MethodNode generate()
        Second pass, generate the actual accessor method for this accessor. The method still respects intrinsic/mixinmerged rules so is not guaranteed to be added to the target class
        Returns:
        generated accessor method
      • findTarget

        protected <TNode> TNode findTarget​(java.util.List<ElementNode<TNode>> nodes)
        Generified candidate search, since the search logic is the same for both fields and methods.
        Type Parameters:
        TNode - node type
        Parameters:
        nodes - Node list to search (method/field list)
        Returns:
        best match
      • of

        public static AccessorInfo of​(MixinTargetContext mixin,
                                      org.objectweb.asm.tree.MethodNode method,
                                      java.lang.Class<? extends java.lang.annotation.Annotation> type)
        Return a wrapper AccessorInfo of the correct type based on the method passed in.
        Parameters:
        mixin - mixin context which owns this accessor
        method - annotated method
        type - annotation type to process
        Returns:
        parsed AccessorInfo