Package org.spongepowered.asm.mixin.gen

## Class AccessorInfo

- java.lang.Object
- - org.spongepowered.asm.mixin.struct.AnnotatedMethodInfo
  - - org.spongepowered.asm.mixin.struct.SpecialMethodInfo
    - - org.spongepowered.asm.mixin.gen.AccessorInfo

All Implemented Interfaces:
  `IInjectionPointContext`, `ISelectorContext`, `IMessageSink`

    public class AccessorInfo
    extends SpecialMethodInfo

Information about an accessor

### Nested Class Summary

Nested Classes
`static class` `AccessorInfo.AccessorName` Accessor Name struct
`static class` `AccessorInfo.AccessorType` Accessor types

### Field Summary

Fields
`protected java.lang.Class<? extends java.lang.annotation.Annotation>` `annotationClass` Annotation class
`protected org.objectweb.asm.Type[]` `argTypes` Accessor method argument types (raw, from method)
`protected AccessorGenerator` `generator` Generator which will be responsible for actually generating the accessor method body
`protected boolean` `isStatic` Accessor method staticness
`protected org.objectweb.asm.Type` `returnType` Accessor method return type (raw, from method)
`protected java.lang.String` `specifiedName` Name specified in the attached annotation, can be null
`protected ITargetSelector` `target` Computed information about the target field or method, name and descriptor
`protected org.objectweb.asm.tree.FieldNode` `targetField` For accessors, stores the discovered target field
`protected org.objectweb.asm.tree.MethodNode` `targetMethod` For invokers, stores the discovered target method
`protected AccessorInfo.AccessorType` `type` Type of accessor to generate, computed based on the signature of the target method.

### Fields 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

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

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`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.
`org.objectweb.asm.tree.MethodNode` `generate()` Second pass, generate the actual accessor method for this accessor.
`org.objectweb.asm.Type[]` `getArgTypes()` Get the argument types of the annotated method
`org.objectweb.asm.Type` `getReturnType()` Get the return type of the annotated method
`ITargetSelector` `getTarget()` Get the inflected/specified target member for this accessor
`org.objectweb.asm.tree.FieldNode` `getTargetField()` For field accessors, returns the target field, returns null for invokers
`org.objectweb.asm.Type` `getTargetFieldType()` For field accessors, returns the field type, returns null for invokers
`org.objectweb.asm.tree.MethodNode` `getTargetMethod()` For invokers, returns the target method, returns null for field accessors
`protected java.lang.String` `getTargetName​(java.lang.String name)`
`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.
`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.
`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.
`protected ITargetSelector` `initTarget()`
`protected org.objectweb.asm.Type` `initTargetFieldType()`
`protected AccessorInfo.AccessorType` `initType()`
`boolean` `isStatic()` Get whether the accessor itself is static
`void` `locate()` First pass, locate the target field in the class.
`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.
`java.lang.String` `toString()`
`void` `validate()` Called immediately after locate, initialises the generator for this accessor and runs validation.

### 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

`addMessage, 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`

### 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

#### initType

    protected AccessorInfo.AccessorType initType()

#### initTargetFieldType

    protected org.objectweb.asm.Type initTargetFieldType()

#### initTarget

    protected ITargetSelector initTarget()

#### 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