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,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
annotationType, classNode, methodName, mixinFields inherited from class org.spongepowered.asm.mixin.struct.AnnotatedMethodInfo
annotation, logger, method -
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
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, IMixinContext 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, IMixinContext 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, getMethodNameMethods inherited from class org.spongepowered.asm.mixin.struct.AnnotatedMethodInfo
addMessage, getAnnotation, getContext, getMethodMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Field Details
-
annotationClass
protected final java.lang.Class<? extends java.lang.annotation.Annotation> annotationClassAnnotation class -
argTypes
protected final org.objectweb.asm.Type[] argTypesAccessor method argument types (raw, from method) -
returnType
protected final org.objectweb.asm.Type returnTypeAccessor method return type (raw, from method) -
isStatic
protected final boolean isStaticAccessor method staticness -
specifiedName
protected final java.lang.String specifiedNameName specified in the attached annotation, can be null -
type
Type of accessor to generate, computed based on the signature of the target method. -
target
Computed information about the target field or method, name and descriptor -
targetField
protected org.objectweb.asm.tree.FieldNode targetFieldFor accessors, stores the discovered target field -
targetMethod
protected org.objectweb.asm.tree.MethodNode targetMethodFor invokers, stores the discovered target method -
generator
Generator which will be responsible for actually generating the accessor method body
-
-
Constructor Details
-
AccessorInfo
-
AccessorInfo
protected AccessorInfo(MixinTargetContext mixin, org.objectweb.asm.tree.MethodNode method, java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
-
-
Method Details
-
initType
-
initTargetFieldType
protected org.objectweb.asm.Type initTargetFieldType() -
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, IMixinContext 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, IMixinContext 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
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
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
-