Package 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 Description INVOKEDYNAMIC(int index)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method 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
-
-
-
-
Method Detail
-
dump
public void dump(DataOutputStream out) throws IOException
Dump instruction as byte code to stream out.- Overrides:
dump
in classCPInstruction
- 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 classCPInstruction
- Parameters:
bytes
- input streamwide
- 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 classInvokeInstruction
- 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 classInstruction
- Parameters:
v
- Visitor object
-
getClassName
public String getClassName(ConstantPoolGen cpg)
Override the parent method because our classname is held elsewhere.- Overrides:
getClassName
in classInvokeInstruction
- 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 classFieldOrMethod
- Parameters:
cpg
- the ConstantPoolGen used to create the instruction- Returns:
- an ObjectType for java.lang.Object
- Since:
- 6.1
-
-