INVOKEDYNAMIC (Apache Commons BCEL 6.4.1 API)

org.apache.bcel.generic

## Class INVOKEDYNAMIC

- java.lang.Object
- - org.apache.bcel.generic.Instruction
  - - org.apache.bcel.generic.CPInstruction
    - - org.apache.bcel.generic.FieldOrMethod
      - - org.apache.bcel.generic.InvokeInstruction
        - - org.apache.bcel.generic.INVOKEDYNAMIC

- All Implemented Interfaces:
    Cloneable, ExceptionThrower, IndexedInstruction, LoadClass, StackConsumer, StackProducer, TypedInstruction

      public class INVOKEDYNAMIC
      extends InvokeInstruction

  Class for INVOKEDYNAMIC. Not an instance of InvokeInstruction, since that class expects to be able to get the class of the method. Ignores the bootstrap mechanism entirely.
  Since:
    6.0
  See Also:
    The invokedynamic instruction in The Java Virtual Machine Specification

- - ### Field Summary

    - ### Fields inherited from class org.apache.bcel.generic.CPInstruction

      `index`

    - ### Fields inherited from class org.apache.bcel.generic.Instruction

      `length, opcode`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `INVOKEDYNAMIC(int index)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `accept(Visitor v)` Call corresponding visitor method(s).
    `void` | `dump(DataOutputStream out)` Dump instruction as byte code to stream out.
    `String` | `getClassName(ConstantPoolGen cpg)` Override the parent method because our classname is held elsewhere.
    `Class<?>[]` | `getExceptions()`
    `ReferenceType` | `getReferenceType(ConstantPoolGen cpg)` Since InvokeDynamic doesn't refer to a reference type, just return java.lang.Object, as that is the only type we can say for sure the reference will be.
    `protected void` | `initFromFile(ByteSequence bytes, boolean wide)` Read needed data (i.e., index) from file.
    `String` | `toString(ConstantPool cp)`

    - ### Methods inherited from class org.apache.bcel.generic.InvokeInstruction

      `consumeStack, getArgumentTypes, getMethodName, getReturnType, getType, produceStack`

    - ### Methods inherited from class org.apache.bcel.generic.FieldOrMethod

      `getClassType, getLoadClassType, getName, getSignature`

    - ### Methods inherited from class org.apache.bcel.generic.CPInstruction

      `getIndex, setIndex, toString`

    - ### Methods inherited from class org.apache.bcel.generic.Instruction

      `copy, equals, getComparator, getLength, getName, getOpcode, hashCode, isValidByte, isValidShort, readInstruction, setComparator, toString`

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

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

- - ### Constructor Detail

    - #### INVOKEDYNAMIC

          public INVOKEDYNAMIC(int index)

  - ### Method Detail

    - #### dump

          public void dump(DataOutputStream out)
                    throws IOException

      Dump instruction as byte code to stream out.
      Overrides:
        `dump` in class `CPInstruction`
      Parameters:
        `out` - Output stream
      Throws:
        `IOException`

    - #### initFromFile

          protected void initFromFile(ByteSequence bytes,
                                      boolean wide)
                               throws IOException

      Read needed data (i.e., index) from file.
      Overrides:
        `initFromFile` in class `CPInstruction`
      Parameters:
        `bytes` - input stream
        `wide` - wide prefix?
      Throws:
        `IOException` - may be thrown if the implementation needs to read data from the file

    - #### toString

          public String toString(ConstantPool cp)

      Overrides:
        `toString` in class `InvokeInstruction`
      Returns:
        mnemonic for instruction with symbolic references resolved

    - #### getExceptions

          public Class<?>[] getExceptions()

    - #### accept

          public void accept(Visitor v)

      Call corresponding visitor method(s). The order is: Call visitor methods of implemented interfaces first, then call methods according to the class hierarchy in descending order, i.e., the most specific visitXXX() call comes last.
      Specified by:
        `accept` in class `Instruction`
      Parameters:
        `v` - Visitor object

    - #### getClassName

          public String getClassName(ConstantPoolGen cpg)

      Override the parent method because our classname is held elsewhere.
      Overrides:
        `getClassName` in class `InvokeInstruction`
      Returns:
        name of the referenced class/interface

    - #### getReferenceType

          public ReferenceType getReferenceType(ConstantPoolGen cpg)

      Since InvokeDynamic doesn't refer to a reference type, just return java.lang.Object, as that is the only type we can say for sure the reference will be.
      Overrides:
        `getReferenceType` in class `FieldOrMethod`
      Parameters:
        `cpg` - the ConstantPoolGen used to create the instruction
      Returns:
        an ObjectType for java.lang.Object
      Since:
        6.1

Copyright © 2004–2019 The Apache Software Foundation. All rights reserved.