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 Modifier and Type Class Description static classAccessorInfo.AccessorNameAccessor Name structstatic classAccessorInfo.AccessorTypeAccessor types
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.Class<? extends java.lang.annotation.Annotation>annotationClassAnnotation classprotected org.objectweb.asm.Type[]argTypesAccessor method argument types (raw, from method)protected AccessorGeneratorgeneratorGenerator which will be responsible for actually generating the accessor method bodyprotected booleanisStaticAccessor method staticnessprotected org.objectweb.asm.TypereturnTypeAccessor method return type (raw, from method)protected java.lang.StringspecifiedNameName specified in the attached annotation, can be nullprotected ITargetSelectortargetComputed information about the target field or method, name and descriptorprotected org.objectweb.asm.tree.FieldNodetargetFieldFor accessors, stores the discovered target fieldprotected org.objectweb.asm.tree.MethodNodetargetMethodFor invokers, stores the discovered target methodprotected AccessorInfo.AccessorTypetypeType 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 Modifier Constructor Description AccessorInfo(MixinTargetContext mixin, org.objectweb.asm.tree.MethodNode method)protectedAccessorInfo(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 Modifier and Type Method Description protected <TNode> TNodefindTarget(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.MethodNodegenerate()Second pass, generate the actual accessor method for this accessor.org.objectweb.asm.Type[]getArgTypes()Get the argument types of the annotated methodorg.objectweb.asm.TypegetReturnType()Get the return type of the annotated methodITargetSelectorgetTarget()Get the inflected/specified target member for this accessororg.objectweb.asm.tree.FieldNodegetTargetField()For field accessors, returns the target field, returns null for invokersorg.objectweb.asm.TypegetTargetFieldType()For field accessors, returns the field type, returns null for invokersorg.objectweb.asm.tree.MethodNodegetTargetMethod()For invokers, returns the target method, returns null for field accessorsprotected java.lang.StringgetTargetName(java.lang.String name)protected java.lang.StringinflectTarget()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.StringinflectTarget(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.StringinflectTarget(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 ITargetSelectorinitTarget()protected org.objectweb.asm.TypeinitTargetFieldType()protected AccessorInfo.AccessorTypeinitType()booleanisStatic()Get whether the accessor itself is staticvoidlocate()First pass, locate the target field in the class.static AccessorInfoof(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.StringtoString()voidvalidate()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
-
-
-
-
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 methodtype- 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 messagescontext- Mixin contextverbose- 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 methodtype- 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 messagescontext- Mixin contextverbose- 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:
toStringin classjava.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 accessormethod- annotated methodtype- annotation type to process- Returns:
- parsed AccessorInfo
-
-