public abstract class InvokeTypeFlow extends TypeFlow<jdk.vm.ci.code.BytecodePosition> implements InvokeInfo
| Modifier and Type | Field and Description |
|---|---|
protected TypeFlow<?>[] |
actualParameters
Actual parameters passed to the callee.
|
protected ActualReturnTypeFlow |
actualReturn
Result type flow returned by the callee.
|
protected BytecodeLocation |
location |
protected InvokeTypeFlow |
originalInvoke |
protected AnalysisType |
receiverType |
protected PointsToAnalysisMethod |
targetMethod |
context, declaredType, graphRef, id, inQueue, nextId, source, usedAsAParameter, usedAsAReceiver| Modifier | Constructor and Description |
|---|---|
protected |
InvokeTypeFlow(jdk.vm.ci.code.BytecodePosition invokeLocation,
AnalysisType receiverType,
PointsToAnalysisMethod targetMethod,
TypeFlow<?>[] actualParameters,
ActualReturnTypeFlow actualReturn,
BytecodeLocation location) |
protected |
InvokeTypeFlow(PointsToAnalysis bb,
MethodFlowsGraph methodFlows,
InvokeTypeFlow original) |
| Modifier and Type | Method and Description |
|---|---|
int |
actualParametersCount() |
boolean |
addState(PointsToAnalysis bb,
TypeState add) |
boolean |
canBeStaticallyBound()
Checks if this invoke can be statically bound.
|
static AbstractVirtualInvokeTypeFlow |
createContextInsensitiveInvoke(PointsToAnalysis bb,
PointsToAnalysisMethod method,
jdk.vm.ci.code.BytecodePosition originalLocation)
Create an unique, per method, context insensitive invoke.
|
protected TypeState |
filterReceiverState(PointsToAnalysis bb,
TypeState invokeState)
When the type flow constraints are relaxed the receiver object state can contain types that
are not part of the receiver's type hierarchy.
|
TypeFlow<?> |
getActualParameter(int index) |
TypeFlow<?>[] |
getActualParameters() |
TypeFlow<?> |
getActualReturn() |
abstract Collection<AnalysisMethod> |
getCallees()
Returns the callees that were linked at this invoke.
|
abstract Collection<MethodFlowsGraph> |
getCalleesFlows(PointsToAnalysis bb)
Returns the context sensitive method flows for the callees resolved for the invoke type flow.
|
jdk.vm.ci.code.BytecodePosition |
getPosition() |
TypeFlow<?> |
getReceiver() |
AnalysisType |
getReceiverType() |
TypeFlow<?> |
getResult() |
PointsToAnalysisMethod |
getTargetMethod() |
static void |
initContextInsensitiveInvoke(PointsToAnalysis bb,
AnalysisMethod method,
InvokeTypeFlow invoke)
Register the context insensitive invoke flow as an observer of its receiver type, i.e., the
declaring class of its target method.
|
static boolean |
isContextInsensitiveVirtualInvoke(InvokeTypeFlow invoke) |
protected void |
linkCallee(PointsToAnalysis bb,
boolean isStatic,
MethodFlowsGraph calleeFlows) |
void |
setActualReturn(ActualReturnTypeFlow actualReturn) |
void |
setObserved(TypeFlow<?> newReceiver)
Set the type flow that this flow is observing.
|
protected void |
updateReceiver(PointsToAnalysis bb,
MethodFlowsGraph calleeFlows,
AnalysisObject receiverObject) |
protected void |
updateReceiver(PointsToAnalysis bb,
MethodFlowsGraph calleeFlows,
TypeState receiverTypeState) |
addInput, addObservee, addObserver, addOriginalObserver, addOriginalUse, addState, addUse, canSaturate, context, copy, declaredTypeFilter, doAddUse, equals, filter, format, formatSource, getDeclaredType, getInputs, getObservees, getObservers, getSlot, getSource, getState, getUses, graphRef, hashCode, id, initClone, isAllInstantiated, isClone, isSaturated, isUsedAsAParameter, isUsedAsAReceiver, method, notifyObserverOfSaturation, notifyObservers, notifyUseOfSaturation, onInputSaturated, onObservedSaturated, onObservedUpdate, onSaturated, receiver, removeInput, removeObservee, removeObserver, removeUse, replacedObservedWith, replaceObservedWith, setSaturated, setSlot, setState, setUsedAsAParameter, setUsedAsAReceiver, swapAtObserver, swapAtUse, swapOut, toString, updateclone, finalize, getClass, notify, notifyAll, wait, wait, waitisDirectInvokeprotected final BytecodeLocation location
protected final TypeFlow<?>[] actualParameters
protected ActualReturnTypeFlow actualReturn
protected final InvokeTypeFlow originalInvoke
protected final AnalysisType receiverType
protected final PointsToAnalysisMethod targetMethod
protected InvokeTypeFlow(jdk.vm.ci.code.BytecodePosition invokeLocation,
AnalysisType receiverType,
PointsToAnalysisMethod targetMethod,
TypeFlow<?>[] actualParameters,
ActualReturnTypeFlow actualReturn,
BytecodeLocation location)
protected InvokeTypeFlow(PointsToAnalysis bb, MethodFlowsGraph methodFlows, InvokeTypeFlow original)
public AnalysisType getReceiverType()
public PointsToAnalysisMethod getTargetMethod()
getTargetMethod in interface InvokeInfopublic int actualParametersCount()
public TypeFlow<?>[] getActualParameters()
public TypeFlow<?> getReceiver()
public void setObserved(TypeFlow<?> newReceiver)
TypeFlowsetObserved in class TypeFlow<jdk.vm.ci.code.BytecodePosition>public TypeFlow<?> getActualParameter(int index)
public TypeFlow<?> getActualReturn()
public void setActualReturn(ActualReturnTypeFlow actualReturn)
public TypeFlow<?> getResult()
public boolean addState(PointsToAnalysis bb, TypeState add)
protected TypeState filterReceiverState(PointsToAnalysis bb, TypeState invokeState)
protected void updateReceiver(PointsToAnalysis bb, MethodFlowsGraph calleeFlows, AnalysisObject receiverObject)
protected void updateReceiver(PointsToAnalysis bb, MethodFlowsGraph calleeFlows, TypeState receiverTypeState)
protected void linkCallee(PointsToAnalysis bb, boolean isStatic, MethodFlowsGraph calleeFlows)
public static boolean isContextInsensitiveVirtualInvoke(InvokeTypeFlow invoke)
public abstract Collection<AnalysisMethod> getCallees()
getCallees in interface InvokeInfopublic jdk.vm.ci.code.BytecodePosition getPosition()
getPosition in interface InvokeInfopublic boolean canBeStaticallyBound()
canBeStaticallyBound in interface InvokeInfopublic abstract Collection<MethodFlowsGraph> getCalleesFlows(PointsToAnalysis bb)
public static AbstractVirtualInvokeTypeFlow createContextInsensitiveInvoke(PointsToAnalysis bb, PointsToAnalysisMethod method, jdk.vm.ci.code.BytecodePosition originalLocation)
public static void initContextInsensitiveInvoke(PointsToAnalysis bb, AnalysisMethod method, InvokeTypeFlow invoke)