case class INVOKEVIRTUAL(declaringClass: ReferenceType, name: String, methodDescriptor: MethodDescriptor) extends VirtualMethodInvocationInstruction with Product with Serializable
- Alphabetic
- By Inheritance
- INVOKEVIRTUAL
- Serializable
- Product
- Equals
- VirtualMethodInvocationInstruction
- MethodInvocationInstruction
- InvocationInstruction
- NoLabels
- LabeledInstruction
- ConstantLengthInstruction
- ConstantLengthInstructionLike
- Instruction
- InstructionLike
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new INVOKEVIRTUAL(declaringClass: ReferenceType, name: String, methodDescriptor: MethodDescriptor)
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def asATHROW: ATHROW.type
- Definition Classes
- Instruction
- def asArithmeticInstruction: ArithmeticInstruction
- Definition Classes
- Instruction
- def asCompoundConditionalBranchInstruction: CompoundConditionalBranchInstruction
- Definition Classes
- Instruction
- def asControlTransferInstruction: ControlTransferInstruction
- Definition Classes
- Instruction
- def asCreateNewArrayInstruction: CreateNewArrayInstruction
- Definition Classes
- Instruction
- def asGotoInstruction: GotoInstruction
- Definition Classes
- Instruction
- def asIF0Instruction: IF0Instruction[_]
- Definition Classes
- Instruction
- def asIFACMPInstruction: IFACMPInstruction[_]
- Definition Classes
- Instruction
- def asIFICMPInstruction: IFICMPInstruction[_]
- Definition Classes
- Instruction
- def asIFXNullInstruction: IFXNullInstruction[_]
- Definition Classes
- Instruction
- def asIINC: IINC
- Definition Classes
- Instruction
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- final def asInvocationInstruction: INVOKEVIRTUAL.this.type
- Definition Classes
- InvocationInstruction → Instruction
- def asLOOKUPSWITCH: LOOKUPSWITCH
- Definition Classes
- Instruction
- def asLoadLocalVariableInstruction: LoadLocalVariableInstruction
- Definition Classes
- Instruction
- final def asMethodInvocationInstruction: MethodInvocationInstruction
- Definition Classes
- MethodInvocationInstruction → Instruction
- def asNEW: NEW
- Definition Classes
- Instruction
- def asReturnInstruction: ReturnInstruction
- Definition Classes
- Instruction
- def asShortBranchoffset(branchoffset: Int): Int
Validates the branchoffset and returns it or throws an exception!
Validates the branchoffset and returns it or throws an exception!
- Attributes
- protected
- Definition Classes
- LabeledInstruction
- Annotations
- @throws("if the branchoffset is invalid")
- def asSimpleBranchInstruction: SimpleBranchInstruction
- Definition Classes
- Instruction
- def asSimpleConditionalBranchInstruction: SimpleConditionalBranchInstruction[_]
- Definition Classes
- Instruction
- def asStoreLocalVariableInstruction: StoreLocalVariableInstruction
- Definition Classes
- Instruction
- def asTABLESWITCH: TABLESWITCH
- Definition Classes
- Instruction
- def asVirtualMethod: VirtualMethod
- Definition Classes
- MethodInvocationInstruction
- final def branchTargets: Iterator[InstructionLabel]
- Definition Classes
- NoLabels → LabeledInstruction
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- def count: Int
Returns the number of registers required to store the method's arguments including (if required) the self reference "this".
Returns the number of registers required to store the method's arguments including (if required) the self reference "this".
- Definition Classes
- MethodInvocationInstruction
- val declaringClass: ReferenceType
- Definition Classes
- INVOKEVIRTUAL → MethodInvocationInstruction
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def expressionResult: ExpressionResultLocation
Returns the location – Stack, Register or NoExpression – where the value computed by this instruction is stored.
Returns the location – Stack, Register or NoExpression – where the value computed by this instruction is stored. In this case an instruction is only considered to be an expression if it puts a value on the stack or in a register that is the result of some kind of computation; i.e., just copying, duplicating or moving a value between the stack and the registers is not considered to be an expression.
- Definition Classes
- InvocationInstruction → InstructionLike
- Note
The CHECKCAST instruction is special in the sense that it just inspects the top-most value.
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final def indexOfNextInstruction(currentPC: PC)(implicit code: Code): Int
The index of the next instruction in the (sparse) code array.
The index of the next instruction in the (sparse) code array.
- Definition Classes
- ConstantLengthInstruction → Instruction
- Note
This is primarily a convenience method that delegates to the method
indexOfNextInstrution(PC,Boolean)
. However, given that this is also the standard method called by clients, it is often meaningful to directly implement this. In particular since most instructions cannot be modified by wide.
- final def indexOfNextInstruction(currentPC: PC, modifiedByWide: Boolean): Int
The index of the next instruction in the code array.
The index of the next instruction in the code array.
- Definition Classes
- ConstantLengthInstructionLike → InstructionLike
- final def indexOfReadLocal: Int
The index of the local (variable)/register that is read is returned.
The index of the local (variable)/register that is read is returned. This method is only defined if readsLocal returns
true
.- Definition Classes
- InvocationInstruction → InstructionLike
- final def indexOfWrittenLocal: Int
The index of the local (variable)/register that is written.
The index of the local (variable)/register that is written. This method is only defined if writesLocal returns
true
.- Definition Classes
- InvocationInstruction → InstructionLike
- def isAthrow: Boolean
- Definition Classes
- InstructionLike
- def isCheckcast: Boolean
- Definition Classes
- Instruction
- def isCompoundConditionalBranchInstruction: Boolean
- Definition Classes
- Instruction
- def isControlTransferInstruction: Boolean
- Definition Classes
- InstructionLike
- def isGotoInstruction: Boolean
- Definition Classes
- Instruction
- def isIINC: Boolean
- Definition Classes
- Instruction
- final def isInstanceMethod: Boolean
Returns
true
if this method takes an implicit parameter "this".Returns
true
if this method takes an implicit parameter "this".- Definition Classes
- INVOKEVIRTUAL → InvocationInstruction
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def isInterfaceCall: Boolean
- Definition Classes
- INVOKEVIRTUAL → MethodInvocationInstruction
- final def isInvocationInstruction: Boolean
- Definition Classes
- InvocationInstruction → Instruction
- def isInvokeStatic: Boolean
- Definition Classes
- Instruction
- final def isIsomorphic(thisPC: PC, otherPC: PC)(implicit code: Code): Boolean
Determines if this instruction is isomorphic to the given instruction.
Determines if this instruction is isomorphic to the given instruction.
Two instructions are isomporphic if they access the same operand and register values and if the instructions have the same bytecode representation, except of (A) (potential) padding bytes and (B) the branch offset of JSR(_W) instructions. In the first case the branch offsets are corrected by the number of padding bytes and in the second case the absolute addresses are compared (i.e., whether both instructions call the same subroutine).
For example, an
aload_0
instruction is only isomorphic to anotheraload_0
instruction and is not isomorphic to anaload(0)
instruction – though the runtime effect is the same. However, a LOOKUPSWITCH (TABLESWITCH) instruction is considered isomorphic to another respective instruction if the only difference is the number of padding bytes. Furthermore, two JSR(_W) instructions are isomorphic if and only if they jump to the same subroutine.- Definition Classes
- InvocationInstruction → InstructionLike
- Note
The number of padding bytes is generally calculated by
(otherPC % 4) - (thisPC %4)
(==="padding other" - "padding this"
) and should be added to the branch offsets of this(XYZ)switch
instruction when the branch targets are compared to the other instructions branchoffsets.// "padding b" - "padding a" // === (3 - (bPC % 4)) - (3 - (aPC % 4)) // === (aPC % 4) - (bPC %4)
,this.isIsomorphic(
thisPC
,thisPC
) is alwaystrue
- def isLoadConstantInstruction: Boolean
- Definition Classes
- InstructionLike
- def isLoadLocalVariableInstruction: Boolean
- Definition Classes
- Instruction
- final def isMethodInvocationInstruction: Boolean
- Definition Classes
- MethodInvocationInstruction → Instruction
- def isMonitorInstruction: Boolean
- Definition Classes
- InstructionLike
- def isRET: Boolean
- Definition Classes
- InstructionLike
- def isReturnInstruction: Boolean
- Definition Classes
- InstructionLike
- def isSimpleBranchInstruction: Boolean
- Definition Classes
- Instruction
- def isSimpleConditionalBranchInstruction: Boolean
- Definition Classes
- Instruction
- def isStackManagementInstruction: Boolean
- Definition Classes
- Instruction
- def isStoreLocalVariableInstruction: Boolean
- Definition Classes
- Instruction
- def isVirtualMethodCall: Boolean
Returns
true
if the called method is an instance method and virtual method call resolution has to take place.Returns
true
if the called method is an instance method and virtual method call resolution has to take place. I.e., if the underlying instruction is an invokevirtual or an invokeinterface instruction.- Definition Classes
- VirtualMethodInvocationInstruction → MethodInvocationInstruction
- final def jvmExceptions: List[ObjectType]
The exceptions that may be thrown by the JVM at runtime if the execution of this instruction fails.
The exceptions that may be thrown by the JVM at runtime if the execution of this instruction fails. I.e., these are neither exceptions that are explicitly created and then thrown by user code nor errors that may arise due to an invalid code base (in particular
LinkageError
s). However,OutOfMemoryError
s are possible.- Definition Classes
- INVOKEVIRTUAL → InstructionLike
- Note
The returned types always precisely describe the thrown exception; they are not upper bounds. All instructions – except of the InvocationInstructions and the ATHROW$ instruction – will always either succeed, throw a linkage time related exception or throw one of the specified exceptions.
- final def length: Int
The number of bytes (in the Code array) used by the instruction.
The number of bytes (in the Code array) used by the instruction.
- Definition Classes
- INVOKEVIRTUAL → ConstantLengthInstructionLike
- final def mayThrowExceptions: Boolean
Returns
true
if the evaluation of the instruction may lead to some runtime exception.Returns
true
if the evaluation of the instruction may lead to some runtime exception. For example, in case of INVOKESTATICjvmExceptions
will return an empty list. However, in general the called method may throw an arbitrary exception.Errors (such as LinkageError) related to invalid projects are not considered.
- Definition Classes
- InvocationInstruction → InstructionLike
- val methodDescriptor: MethodDescriptor
The method descriptor of the called method.
The method descriptor of the called method.
- Definition Classes
- INVOKEVIRTUAL → InvocationInstruction
- Note
This information is – in case of INCOMPLETE_INVOKEDYNAMIC instructions – only available after loading the entire class file.
- final def mnemonic: String
The mnemonic of the instruction as defined by the JVM specification.
The mnemonic of the instruction as defined by the JVM specification.
- Definition Classes
- INVOKEVIRTUAL → InstructionLike
- val name: String
The simple name of the called method.
The simple name of the called method.
- Definition Classes
- INVOKEVIRTUAL → InvocationInstruction
- Note
This information is – in case of INCOMPLETE_INVOKEDYNAMIC instructions – only available after loading the entire class file.
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def nextInstructions(currentPC: PC, regularSuccessorsOnly: Boolean)(implicit code: Code, classHierarchy: ClassHierarchy = ClassHierarchy.PreInitializedClassHierarchy): List[PC]
Given that we have – without any sophisticated analysis – no idea which exceptions may be thrown by the called method, we make the safe assumption that any handler is a potential successor!
Given that we have – without any sophisticated analysis – no idea which exceptions may be thrown by the called method, we make the safe assumption that any handler is a potential successor!
The result may contain duplicates iff multiple different exceptions are handled by the same handler. E.g., as generated in case of "Java's multicatch instruction":
try {} catch(IOException | NullPointerException ex) {...}
- regularSuccessorsOnly
If
true
, only those instructions are returned which are not related to an exception thrown by this instruction.- returns
The absolute addresses of all instructions that may be executed next at runtime.
- Definition Classes
- InvocationInstruction → Instruction
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def numberOfPoppedOperands(ctg: (Int) => ComputationalTypeCategory): Int
The number of values that are popped from the operand stack.
The number of values that are popped from the operand stack. Here, long and double values are also counted as one value though they use two stack slots. E.g., IADD (integer add) and LADD (long add) both pop two values and push one value.
- ctg
A function that returns the computational type category of the value on the operand stack with a given value index. E.g., The top value on the operand stack has index '0' and may occupy one (for category 1 values) or two stack slots (for category 2 values.)
- Definition Classes
- VirtualMethodInvocationInstruction → InstructionLike
- Note
In case of some of the StackManagementInstruction the number of popped values is not fixed. In that case the number depends on the concrete layout of the operand stack. E.g., the POP2 instruction may just pop one categeory 2 value (of type
long
ordouble
) or two category 1 values.
- final def numberOfPushedOperands(ctg: (Int) => ComputationalTypeCategory): Int
The number of values that are put onto the operand stack.
The number of values that are put onto the operand stack. Here, long and double values are also counted as one value though they use two stack slots. E.g., IADD (integer add) and LADD (long add) both pop two values and push one value.
- ctg
A function that returns the computational type category of the value on the operand stack with a given value index. The top value on the operand stack has index '0' and may occupy one (for category 1 values) or two stack slots (for category 2 values.)
- Definition Classes
- InvocationInstruction → InstructionLike
- Note
In case of some of the StackManagementInstruction this number is not fixed. In that case the number depends on the concrete layout of the operand stack. E.g., the DUP2 instruction may just duplicate one categeory 2 value (result is 1) (of type long or double) or two category 1 values (result is 2).
- final def opcode: Opcode
The opcode of the instruction as defined by the JVM specification.
The opcode of the instruction as defined by the JVM specification. The opcode is a value in the range [0..255].
- Definition Classes
- INVOKEVIRTUAL → InstructionLike
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- final def readsLocal: Boolean
Returns
true
if this instruction reads/uses a local variable.Returns
true
if this instruction reads/uses a local variable.- Definition Classes
- InvocationInstruction → InstructionLike
- final def resolveJumpTargets(pc: PC, pcs: Map[InstructionLabel, PC]): INVOKEVIRTUAL.this.type
If this instruction uses
Symbol
s to mark jump targets then the targets are replaced by the branchoffsets and an Instruction is returned.If this instruction uses
Symbol
s to mark jump targets then the targets are replaced by the branchoffsets and an Instruction is returned. If this instruction already has concrete branchoffsets nothing special will happen.If this instruction already has concrete jump targets nothing special will happen.
- pc
The final pc of this instruction in the code array.
- pcs
The map which maps all symbols to their final pcs.
- Definition Classes
- NoLabels → LabeledInstruction
- def similar(other: Instruction): Boolean
Checks for structural equality of two instructions.
Checks for structural equality of two instructions.
- Definition Classes
- Instruction
- Note
Implemted by using the underlying (compiler generated) equals methods.
- final def stackSlotsChange: Int
The number of stack slots pushed or popped by this instruction.
The number of stack slots pushed or popped by this instruction.
- Definition Classes
- InvocationInstruction → InstructionLike
- Note
Overall, each DUP instruction always pushes the same number of stack slots. Only the number of values that are processed may depend on the stack layout.
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- final def toLabeledInstruction(currentPC: PC): LabeledInstruction
- Definition Classes
- NoLabels
- def toString(): String
- Definition Classes
- INVOKEVIRTUAL → MethodInvocationInstruction → AnyRef → Any
- final def toString(currentPC: Int): String
Returns a string representation of this instruction.
Returns a string representation of this instruction. If this instruction is a (conditional) jump instruction, then the PCs of the target instructions are given absolute address.
- currentPC
The program counter of this instruction. Used to resolve relative jump targets.
- Definition Classes
- InvocationInstruction → InstructionLike
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def writesLocal: Boolean
Returns
true
if this instruction writes/updates a local variable.Returns
true
if this instruction writes/updates a local variable.- Definition Classes
- InvocationInstruction → InstructionLike
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated