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 class name 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.

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

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

    - ### 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

    - #### 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

    - #### 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`

    - #### getClassName

          public String getClassName(ConstantPoolGen cpg)

      Override the parent method because our class name is held elsewhere. Note: Contrary to this method's name it does not return the class name of the invoke target; rather it returns the name of the method that will be used to invoke the Lambda method generated by this invoke dynamic instruction.
      Overrides:
        `getClassName` in class `InvokeInstruction`
      Returns:
        name of the referenced class/interface

    - #### getExceptions

          public Class<?>[] getExceptions()

    - #### 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

    - #### 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

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