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
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:
-
Field Summary
Fields inherited from class CPInstruction
indexModifier and TypeFieldDescriptionprotected intDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterFields inherited from class Instruction
length, opcode -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidCall corresponding visitor method(s).voiddump(DataOutputStream out) Dumps instruction as byte code to stream out.Gets the name of the method used to invoke the generated lambda method.Class<?>[]Gets the exceptions that may be thrown by this instruction.Gets the reference type, which isObjectfor this instruction.protected voidinitFromFile(ByteSequence bytes, boolean wide) Reads needed data (that is, index) from file.Methods inherited from class InvokeInstruction
consumeStack, getArgumentTypes, getMethodName, getReturnType, getType, produceStack, toStringModifier and TypeMethodDescriptionintAlso works for instructions whose stack effect depends on the constant pool entry they reference.Type[]Gets the argument types of referenced method.Gets the name of referenced method.Gets the return type of referenced method.getType(ConstantPoolGen cpg) Gets the return type of referenced method.intAlso works for instructions whose stack effect depends on the constant pool entry they reference.toString(ConstantPool cp) Gets the mnemonic for instruction with symbolic references resolved.Methods inherited from class FieldOrMethod
getClassType, getLoadClassType, getName, getSignatureModifier and TypeMethodDescriptionDeprecated.If the instruction references an array class, the ObjectType returned will be invalid.Gets the ObjectType of the method return or field.getName(ConstantPoolGen cpg) Gets the name of referenced method or field.Gets the signature of referenced method or field.Methods inherited from class CPInstruction
getIndex, setIndex, toStringModifier and TypeMethodDescriptionfinal intgetIndex()Gets the constant pool index referred to by this instruction.voidsetIndex(int index) Sets the index to constant pool.toString(boolean verbose) Long output format: <name of opcode> "["<opcode number>"]" "("<length of instruction>")" "<"< constant pool index>">"Methods inherited from class Instruction
copy, equals, getComparator, getLength, getName, getOpcode, hashCode, isValidByte, isValidShort, readInstruction, setComparator, toStringModifier and TypeMethodDescriptioncopy()Use with caution, since 'BranchInstruction's have a 'target' reference which is not copied correctly (only basic types are).booleanTests for equality, delegated to comparatorstatic InstructionComparatorDeprecated.(6.0) use the built in comparator, or wrap this class in another object that implements these methodsintGets the length (in bytes) of instruction.getName()Gets the name of instruction, that is, opcode name.shortGets this instruction's opcode.inthashCode()Gets the hashCode of this object.static booleanisValidByte(int value) Tests if the value can fit in a byte (signed).static booleanisValidShort(int value) Tests if the value can fit in a short (signed).static InstructionreadInstruction(ByteSequence bytes) Reads an instruction from (byte code) input stream and return the appropriate object.static voidDeprecated.(6.0) use the built in comparator, or wrap this class in another object that implements these methodstoString()
-
Constructor Details
-
INVOKEDYNAMIC
Constructs an INVOKEDYNAMIC instruction.- Parameters:
index- index into constant pool.
-
-
Method Details
-
accept
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, that is, the most specific visitXXX() call comes last.- Specified by:
acceptin classInstruction- Parameters:
v- Visitor object.
-
dump
Dumps instruction as byte code to stream out.- Overrides:
dumpin classCPInstruction- Parameters:
out- Output stream.- Throws:
IOException- Thrown when an I/O exception of some sort has occurred.
-
getClassName
Gets the name of the method used to invoke the generated lambda method. 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:
getClassNamein classInvokeInstruction- Parameters:
cpg- The constant pool generator.- Returns:
- name of the referenced class/interface.
-
getExceptions
Description copied from interface:ExceptionThrowerGets the exceptions that may be thrown by this instruction.- Returns:
- The exceptions that may be thrown by this instruction.
-
getReferenceType
Gets the reference type, which isObjectfor this instruction.Since InvokeDynamic doesn't refer to a reference type, just return
Object, as that is the only type we can say for sure the reference will be.- Overrides:
getReferenceTypein classFieldOrMethod- Parameters:
cpg- The ConstantPoolGen used to create the instruction.- Returns:
- An ObjectType for
Object. - Since:
- 6.1
-
initFromFile
Reads needed data (that is, index) from file.- Overrides:
initFromFilein classCPInstruction- Parameters:
bytes- input stream.wide- wide prefix?.- Throws:
IOException- Thrown if the implementation needs to read data from the file
-