Package org.spongepowered.asm.mixin.injection.selectors

## 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 java.lang.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
`static class` `ElementNode.NodeType` 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
`ElementNode()`

### Method Summary

All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
`static java.lang.Iterable<ElementNode<org.objectweb.asm.tree.AbstractInsnNode>>` `dynamicInsnList​(org.objectweb.asm.tree.InsnList insns)` Get a wrapped version of the supplied insn list which returns element nodes for every INVOKEDYNAMIC instruction only
`static java.util.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
`java.lang.String` `getDelegateDesc()` For INVOKEDYNAMIC elements, returns original descriptor of the delegate.
`abstract java.lang.String` `getDesc()` Get the element descriptor.
`org.objectweb.asm.tree.FieldNode` `getField()` Get the `FieldNode` if this member is a field, otherwise returns `null`
`java.lang.String` `getImplDesc()` For INVOKEDYNAMIC elements, returns specialised descriptor of the delegate (lambda descriptor without prepended captures), can be the same as the delegate descriptor or more specialised.
`org.objectweb.asm.tree.AbstractInsnNode` `getInsn()` Get the `instruction` if this member is an insn, otherwise returns `null`
`org.objectweb.asm.tree.MethodNode` `getMethod()` Get the `MethodNode` if this member is a method, otherwise returns `null`
`abstract java.lang.String` `getName()` Get the element name
`abstract java.lang.String` `getOwner()` Get the element owner's name, if this element has an owner, otherwise returns `null`
`abstract java.lang.String` `getSignature()` Get the element signature, can be `null`
`java.lang.String` `getSyntheticName()` Get the synthetic element name.
`abstract ElementNode.NodeType` `getType()` Get the type of this ElementNode, the return value can be used to determine which accessor (`getMethod()`, `getField()`
`static java.lang.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` `isField()` Get whether this element is a field type and the descriptor is a bare type descriptor without arguments.
`static <TNode> java.util.List<ElementNode<TNode>>` `listOf​(org.objectweb.asm.tree.ClassNode owner, java.util.List<TNode> list)` Convert the supplied list of nodes to a list of wrapped ElementNodes
`static java.util.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
`java.lang.String` `toString()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### ElementNode

    public ElementNode()

### Method Detail

#### 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 java.lang.String getOwner()

Get the element owner's name, if this element has an owner, otherwise returns `null`

#### getName

    public abstract java.lang.String getName()

Get the element name

#### getSyntheticName

    public java.lang.String getSyntheticName()

Get the synthetic element name. For INVOKEDYNAMIC elements this is the real name of the lambda method implementing the delegate.

#### getDesc

    public abstract java.lang.String getDesc()

Get the element descriptor. For INVOKEDYNAMIC this is the full descriptor of the lambda (including prepended captures).

#### getDelegateDesc

    public java.lang.String getDelegateDesc()

For INVOKEDYNAMIC elements, returns original descriptor of the delegate.

#### getImplDesc

    public java.lang.String getImplDesc()

For INVOKEDYNAMIC elements, returns specialised descriptor of the delegate (lambda descriptor without prepended captures), can be the same as the delegate descriptor or more specialised.

#### getSignature

    public abstract java.lang.String getSignature()

Get the element signature, can be `null`

#### get

    public abstract TNode get()

Returns the node with horrible duck typing

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.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:
  `java.lang.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:
  `java.lang.IllegalArgumentException` - if the supplied argument is not a `MethodNode` or `FieldNode`

#### listOf

    public static <TNode> java.util.List<ElementNode<TNode>> listOf​(org.objectweb.asm.tree.ClassNode owner,
                                                                    java.util.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 java.util.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 java.util.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 java.lang.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

#### dynamicInsnList

    public static java.lang.Iterable<ElementNode<org.objectweb.asm.tree.AbstractInsnNode>> dynamicInsnList​(org.objectweb.asm.tree.InsnList insns)

Get a wrapped version of the supplied insn list which returns element nodes for every INVOKEDYNAMIC instruction only

Parameters:
  `insns` - Insn list to wrap
Returns:
  Wrapper for insn list