Class ElementNode<TNode>

java.lang.Object
org.spongepowered.asm.mixin.injection.selectors.ElementNode<TNode>
Type Parameters:
TNode - node type

public abstract class ElementNode<TNode> extends Object
Wrapper for all node types supported by target selectors (FieldNode, MethodNode, FieldInsnNode, MethodInsnNode and InvokeDynamicInsnNode) which allows access to common properties of things which are basically "arbitrary node with owner, name and descriptor"
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static enum 
    Element node type, returned by getType so consumers don't need to do instanceof checks, and allows switching on element type in a more expressive way
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    final boolean
     
    static List<ElementNode<org.objectweb.asm.tree.FieldNode>>
    fieldList(org.objectweb.asm.tree.ClassNode owner)
    Get a list of wrapped ElementNodes for the fields of the supplied owner class
    abstract TNode
    get()
    Returns the node with horrible duck typing
    abstract String
    Get the element descriptor.
    org.objectweb.asm.tree.FieldNode
    Get the FieldNode if this member is a field, otherwise returns null
    For LMF elements, returns the full descriptor of the implementing method (including any leading parameters bound to it).
    For LMF elements, returns the real name of the implementing method.
    For LMF elements, returns the owner of the implementing method.
    org.objectweb.asm.tree.AbstractInsnNode
    Get the instruction if this member is an insn, otherwise returns null
    org.objectweb.asm.tree.MethodNode
    Get the MethodNode if this member is a method, otherwise returns null
    abstract String
    Get the element name
    abstract String
    Get the element owner's name, if this element has an owner, otherwise returns null.
    abstract String
    Get the element signature, can be null
    Get the type of this ElementNode, the return value can be used to determine which accessor (getMethod(), getField()
    final int
     
    static Iterable<ElementNode<org.objectweb.asm.tree.AbstractInsnNode>>
    insnList(org.objectweb.asm.tree.InsnList insns)
    Get a wrapped version of the supplied insn list which returns element nodes for each (supported) instruction (FieldInsnNode, MethodInsnNode and InvokeDynamicInsnNode).
    boolean
    Get whether this element is a field type and the descriptor is a bare type descriptor without arguments.
    static <TNode> List<ElementNode<TNode>>
    listOf(org.objectweb.asm.tree.ClassNode owner, List<TNode> list)
    Convert the supplied list of nodes to a list of wrapped ElementNodes
    static Iterable<ElementNode<org.objectweb.asm.tree.AbstractInsnNode>>
    lmfInsnList(org.objectweb.asm.tree.InsnList insns)
    Get a wrapped version of the supplied insn list which returns element nodes for every LMF instruction only
    static List<ElementNode<org.objectweb.asm.tree.MethodNode>>
    methodList(org.objectweb.asm.tree.ClassNode owner)
    Get a list of wrapped ElementNodes for the methods of the supplied owner class
    static ElementNode<org.objectweb.asm.tree.FieldNode>
    of(org.objectweb.asm.tree.ClassNode owner, org.objectweb.asm.tree.FieldNode field)
    Create an ElementNode wrapper for the supplied field node
    static ElementNode<org.objectweb.asm.tree.MethodNode>
    of(org.objectweb.asm.tree.ClassNode owner, org.objectweb.asm.tree.MethodNode method)
    Create an ElementNode wrapper for the supplied method node
    static <TNode> ElementNode<TNode>
    of(org.objectweb.asm.tree.ClassNode owner, TNode node)
    Create an ElementNode wrapper for the supplied node object
    static <TNode extends org.objectweb.asm.tree.AbstractInsnNode>
    ElementNode<TNode>
    of(TNode node)
    Create an ElementNode wrapper for the supplied node object
     

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • ElementNode

      public ElementNode()
  • Method Details

    • isField

      public boolean isField()
      Get whether this element is a field type and the descriptor is a bare type descriptor without arguments. Otherwise assumes the descriptor is a method descriptor.
    • getType

      public abstract ElementNode.NodeType getType()
      Get the type of this ElementNode, the return value can be used to determine which accessor (getMethod(), getField()
    • getMethod

      public org.objectweb.asm.tree.MethodNode getMethod()
      Get the MethodNode if this member is a method, otherwise returns null
    • getField

      public org.objectweb.asm.tree.FieldNode getField()
      Get the FieldNode if this member is a field, otherwise returns null
    • getInsn

      public org.objectweb.asm.tree.AbstractInsnNode getInsn()
      Get the instruction if this member is an insn, otherwise returns null
    • getOwner

      public abstract String getOwner()
      Get the element owner's name, if this element has an owner, otherwise returns null. For LMF elements this is the SAM type being implemented.
    • getImplOwner

      public String getImplOwner()
      For LMF elements, returns the owner of the implementing method.
    • getName

      public abstract String getName()
      Get the element name
    • getImplName

      public String getImplName()
      For LMF elements, returns the real name of the implementing method.
    • getDesc

      public abstract String getDesc()
      Get the element descriptor. For LMF elements this is the specialised descriptor of the SAM.
    • getImplDesc

      public String getImplDesc()
      For LMF elements, returns the full descriptor of the implementing method (including any leading parameters bound to it).
    • getSignature

      public abstract String getSignature()
      Get the element signature, can be null
    • get

      public abstract TNode get()
      Returns the node with horrible duck typing
    • toString

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

      public final boolean equals(Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public final int hashCode()
      Overrides:
      hashCode in class Object
    • of

      public static ElementNode<org.objectweb.asm.tree.MethodNode> of(org.objectweb.asm.tree.ClassNode owner, org.objectweb.asm.tree.MethodNode method)
      Create an ElementNode wrapper for the supplied method node
      Parameters:
      owner - class which owns the method or null
      method - Method node to wrap
      Returns:
      ElementNode
    • of

      public static ElementNode<org.objectweb.asm.tree.FieldNode> of(org.objectweb.asm.tree.ClassNode owner, org.objectweb.asm.tree.FieldNode field)
      Create an ElementNode wrapper for the supplied field node
      Parameters:
      owner - class which owns the field or null
      field - Field node to wrap
      Returns:
      ElementNode
    • of

      public static <TNode> ElementNode<TNode> of(org.objectweb.asm.tree.ClassNode owner, TNode node)
      Create an ElementNode wrapper for the supplied node object
      Type Parameters:
      TNode - Node type
      Parameters:
      owner - class which owns the node or null
      node - Node to wrap
      Returns:
      ElementNode
      Throws:
      IllegalArgumentException - if the supplied argument is not a MethodNode or FieldNode
    • of

      public static <TNode extends org.objectweb.asm.tree.AbstractInsnNode> ElementNode<TNode> of(TNode node)
      Create an ElementNode wrapper for the supplied node object
      Type Parameters:
      TNode - Node type
      Parameters:
      node - Node to wrap
      Returns:
      ElementNode
      Throws:
      IllegalArgumentException - if the supplied argument is not a MethodNode or FieldNode
    • listOf

      public static <TNode> List<ElementNode<TNode>> listOf(org.objectweb.asm.tree.ClassNode owner, List<TNode> list)
      Convert the supplied list of nodes to a list of wrapped ElementNodes
      Type Parameters:
      TNode - Node type
      Parameters:
      owner - Owner of the supplied nodes, can be null
      list - List of nodes
      Returns:
      List of wrapped nodes
    • fieldList

      public static List<ElementNode<org.objectweb.asm.tree.FieldNode>> fieldList(org.objectweb.asm.tree.ClassNode owner)
      Get a list of wrapped ElementNodes for the fields of the supplied owner class
      Parameters:
      owner - Class to get fields, must not be null
      Returns:
      List of wrapped nodes
    • methodList

      public static List<ElementNode<org.objectweb.asm.tree.MethodNode>> methodList(org.objectweb.asm.tree.ClassNode owner)
      Get a list of wrapped ElementNodes for the methods of the supplied owner class
      Parameters:
      owner - Class to get methods, must not be null
      Returns:
      List of wrapped nodes
    • insnList

      public static Iterable<ElementNode<org.objectweb.asm.tree.AbstractInsnNode>> insnList(org.objectweb.asm.tree.InsnList insns)
      Get a wrapped version of the supplied insn list which returns element nodes for each (supported) instruction (FieldInsnNode, MethodInsnNode and InvokeDynamicInsnNode).
      Parameters:
      insns - Insn list to wrap
      Returns:
      Wrapper for insn list
    • lmfInsnList

      public static Iterable<ElementNode<org.objectweb.asm.tree.AbstractInsnNode>> lmfInsnList(org.objectweb.asm.tree.InsnList insns)
      Get a wrapped version of the supplied insn list which returns element nodes for every LMF instruction only
      Parameters:
      insns - Insn list to wrap
      Returns:
      Wrapper for insn list