Package com.android.dx.rop.code
Class InvokePolymorphicInsn
java.lang.Object
com.android.dx.rop.code.Insn
com.android.dx.rop.code.InvokePolymorphicInsn
- All Implemented Interfaces:
ToHuman
An invoke-polymorphic instruction. This is a throwing instruction with
multiple constants.
-
Nested Class Summary
Nested classes/interfaces inherited from class com.android.dx.rop.code.Insn
Insn.BaseVisitor, Insn.Visitor
-
Constructor Summary
ConstructorDescriptionInvokePolymorphicInsn
(Rop opcode, SourcePosition position, RegisterSpecList sources, TypeList catches, CstMethodRef callSiteMethod) Constructs an instance. -
Method Summary
Modifier and TypeMethodDescriptionvoid
accept
(Insn.Visitor visitor) Calls the appropriate method on the given visitor, depending on the class of this instance.Gets the method as it appears at the call site of the original invoke-virtual instruction.Gets the call site prototype.Gets the list of possibly-caught exceptions.Gets an "inline" string portion for toHuman(), if available.Gets the method to be invoked.withAddedCatch
(Type type) Returns an instance that is just like this one, except that it has a catch list with the given item appended to the end.withNewRegisters
(RegisterSpec result, RegisterSpecList sources) Returns an instance that is just like this one, except with new result and source registers.withRegisterOffset
(int delta) Returns an instance that is just like this one, except that all register references have been offset by the given delta.Methods inherited from class com.android.dx.rop.code.Insn
canThrow, contentEquals, copy, equals, getLocalAssignment, getOpcode, getPosition, getResult, getSources, hashCode, toHuman, toHumanWithInline, toString, toStringWithInline, withSourceLiteral
-
Constructor Details
-
InvokePolymorphicInsn
public InvokePolymorphicInsn(Rop opcode, SourcePosition position, RegisterSpecList sources, TypeList catches, CstMethodRef callSiteMethod) Constructs an instance.- Parameters:
opcode
-non-null;
the opcodeposition
-non-null;
source positionsources
-non-null;
specs for all the sourcescatches
-non-null;
list of exceptions caughtcallSiteMethod
-non-null;
the method called by invoke-virtual that this instance will replace.
-
-
Method Details
-
getCatches
Gets the list of possibly-caught exceptions. This returnsStdTypeList.EMPTY
if this instruction has no handlers, which can be either if this instruction can't possibly throw or if it merely doesn't handle any of its possible exceptions. To determine whether this instruction can throw, useInsn.canThrow()
.- Specified by:
getCatches
in classInsn
- Returns:
non-null;
the catches list
-
accept
Calls the appropriate method on the given visitor, depending on the class of this instance. Subclasses must override this. -
withAddedCatch
Returns an instance that is just like this one, except that it has a catch list with the given item appended to the end. This method throws an exception if this instance can't possibly throw. To determine whether this instruction can throw, useInsn.canThrow()
.- Specified by:
withAddedCatch
in classInsn
- Parameters:
type
-non-null;
type to append to the catch list- Returns:
non-null;
an appropriately-constructed instance
-
withRegisterOffset
Returns an instance that is just like this one, except that all register references have been offset by the given delta.- Specified by:
withRegisterOffset
in classInsn
- Parameters:
delta
- the amount to offset register references by- Returns:
non-null;
an appropriately-constructed instance
-
withNewRegisters
Returns an instance that is just like this one, except with new result and source registers.- Specified by:
withNewRegisters
in classInsn
- Parameters:
result
-null-ok;
new result registersources
-non-null;
new sources registers- Returns:
non-null;
an appropriately-constructed instance
-
getCallSiteMethod
Gets the method as it appears at the call site of the original invoke-virtual instruction.- Returns:
non-null;
the original method reference
-
getPolymorphicMethod
Gets the method to be invoked. This will be will either bejava.lang.invoke.MethodHandle.invoke()
orjava.lang.invoke.MethodHandle.invokeExact()
.- Returns:
non-null;
method reference to be invoked
-
getCallSiteProto
Gets the call site prototype. The call site prototype is provided as an argument to invoke-polymorphic to enable type checking and type conversion.- Returns:
non-null;
Prototype reference for call site
-
getInlineString
Gets an "inline" string portion for toHuman(), if available. This is the portion that appears after the Rop opcode- Overrides:
getInlineString
in classInsn
- Returns:
null-ok;
if non-null, the inline text for toHuman()
-