public abstract class InvokeTypeFlow extends TypeFlow<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 boolean |
allOriginalCallees
Flag to monitor whether all callees are original or not.
|
protected com.oracle.svm.common.meta.MultiMethod.MultiMethodKey |
callerMultiMethodKey
The multi-method key for the method which contains this invoke type flow.
|
protected boolean |
isContextInsensitive |
protected InvokeTypeFlow |
originalInvoke |
protected AnalysisType |
receiverType |
protected PointsToAnalysisMethod |
targetMethod |
| Modifier | Constructor and Description |
|---|---|
protected |
InvokeTypeFlow(BytecodePosition invokeLocation,
AnalysisType receiverType,
PointsToAnalysisMethod targetMethod,
TypeFlow<?>[] actualParameters,
ActualReturnTypeFlow actualReturn,
com.oracle.svm.common.meta.MultiMethod.MultiMethodKey callerMultiMethodKey) |
protected |
InvokeTypeFlow(PointsToAnalysis bb,
MethodFlowsGraph methodFlows,
InvokeTypeFlow original) |
| Modifier and Type | Method and Description |
|---|---|
int |
actualParametersCount() |
boolean |
canBeStaticallyBound()
Checks if this invoke can be statically bound.
|
protected TypeState |
filterReceiverState(PointsToAnalysis bb,
TypeState receiverState)
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> |
getAllCallees()
Retrieves list of all callees.
|
protected abstract Collection<MethodFlowsGraph> |
getAllCalleesFlows(PointsToAnalysis bb)
Returns the context sensitive method flows for the callees resolved for the invoke type flow.
|
abstract Collection<AnalysisMethod> |
getAllComputedCallees()
Returns all callees which have been computed for this method.
|
com.oracle.svm.common.meta.MultiMethod.MultiMethodKey |
getCallerMultiMethodKey() |
Collection<AnalysisMethod> |
getOriginalCallees()
Returns the callees that were linked at this invoke.
|
Collection<MethodFlowsGraph> |
getOriginalCalleesFlows(PointsToAnalysis bb)
Same as
InvokeTypeFlow.getAllCalleesFlows(com.oracle.graal.pointsto.PointsToAnalysis), except that this method only returns calleesFlows whose
multimethodkey is MultiMethod.ORIGINAL_METHOD and also are guaranteed to be
AnalysisMethod.isImplementationInvoked(). |
InvokeTypeFlow |
getOriginalInvoke() |
BytecodePosition |
getPosition() |
TypeFlow<?> |
getReceiver() |
AnalysisType |
getReceiverType() |
TypeFlow<?> |
getResult() |
PointsToAnalysisMethod |
getTargetMethod() |
boolean |
isContextInsensitive() |
static boolean |
isContextInsensitiveVirtualInvoke(InvokeTypeFlow invoke) |
protected void |
linkCallee(PointsToAnalysis bb,
boolean isStatic,
MethodFlowsGraphInfo calleeFlows) |
void |
linkReturn(PointsToAnalysis bb,
boolean isStatic,
MethodFlowsGraphInfo calleeFlows) |
void |
markAsContextInsensitive() |
void |
setActualReturn(PointsToAnalysis bb,
boolean isStatic,
ActualReturnTypeFlow actualReturn) |
void |
setObserved(TypeFlow<?> newReceiver)
Set the type flow that this flow is observing.
|
protected void |
updateReceiver(PointsToAnalysis bb,
MethodFlowsGraphInfo calleeFlows,
AnalysisObject receiverObject) |
protected void |
updateReceiver(PointsToAnalysis bb,
MethodFlowsGraphInfo calleeFlows,
TypeState receiverTypeState) |
addInput, addObservee, addObserver, addObserver, addState, addState, addUse, addUse, canSaturate, clearInputs, clearObservees, clearObservers, clearUses, copy, declaredTypeFilter, declaredTypeFilter, doAddUse, equals, filter, filterUncheckedInterface, format, formatSource, getDeclaredType, getInputs, getObservees, getObservers, getSlot, getSource, getState, getUses, graphRef, hashCode, id, initFlow, invalidate, isAllInstantiated, isClone, isSaturated, isValid, method, needsInitialization, notifyObserverOfSaturation, notifyUseOfSaturation, onInputSaturated, onObservedSaturated, onObservedUpdate, onSaturated, onSaturated, receiver, removeObserver, removeUse, replacedObservedWith, replaceObservedWith, setSaturated, setSlot, setState, swapAtObserver, swapAtUse, swapOut, toString, updateisDeoptInvokeTypeFlow, isDirectInvokeprotected final TypeFlow<?>[] actualParameters
protected volatile ActualReturnTypeFlow actualReturn
protected final InvokeTypeFlow originalInvoke
protected final AnalysisType receiverType
protected final PointsToAnalysisMethod targetMethod
protected boolean isContextInsensitive
protected final com.oracle.svm.common.meta.MultiMethod.MultiMethodKey callerMultiMethodKey
protected volatile boolean allOriginalCallees
InvokeTypeFlow.getOriginalCallees().protected InvokeTypeFlow(BytecodePosition invokeLocation,
AnalysisType receiverType,
PointsToAnalysisMethod targetMethod,
TypeFlow<?>[] actualParameters,
ActualReturnTypeFlow actualReturn,
com.oracle.svm.common.meta.MultiMethod.MultiMethodKey callerMultiMethodKey)
protected InvokeTypeFlow(PointsToAnalysis bb, MethodFlowsGraph methodFlows, InvokeTypeFlow original)
public void markAsContextInsensitive()
public boolean isContextInsensitive()
isContextInsensitive in class TypeFlow<BytecodePosition>public AnalysisType getReceiverType()
public PointsToAnalysisMethod getTargetMethod()
getTargetMethod in interface InvokeInfopublic int actualParametersCount()
public TypeFlow<?>[] getActualParameters()
public TypeFlow<?> getReceiver()
public InvokeTypeFlow getOriginalInvoke()
public void setObserved(TypeFlow<?> newReceiver)
TypeFlowsetObserved in class TypeFlow<BytecodePosition>public TypeFlow<?> getActualParameter(int index)
public TypeFlow<?> getActualReturn()
public void setActualReturn(PointsToAnalysis bb, boolean isStatic, ActualReturnTypeFlow actualReturn)
public TypeFlow<?> getResult()
protected TypeState filterReceiverState(PointsToAnalysis bb, TypeState receiverState)
FilterTypeFlows saturate to the type of the filter.FilterTypeFlows which are not assignable to the
receiver type.protected void updateReceiver(PointsToAnalysis bb, MethodFlowsGraphInfo calleeFlows, AnalysisObject receiverObject)
protected void updateReceiver(PointsToAnalysis bb, MethodFlowsGraphInfo calleeFlows, TypeState receiverTypeState)
protected void linkCallee(PointsToAnalysis bb, boolean isStatic, MethodFlowsGraphInfo calleeFlows)
public void linkReturn(PointsToAnalysis bb, boolean isStatic, MethodFlowsGraphInfo calleeFlows)
public static boolean isContextInsensitiveVirtualInvoke(InvokeTypeFlow invoke)
public Collection<AnalysisMethod> getOriginalCallees()
getOriginalCallees in interface InvokeInfopublic abstract Collection<AnalysisMethod> getAllCallees()
InvokeInfoAnalysisMethod.isImplementationInvoked().getAllCallees in interface InvokeInfopublic abstract Collection<AnalysisMethod> getAllComputedCallees()
public BytecodePosition getPosition()
getPosition in interface InvokeInfopublic boolean canBeStaticallyBound()
canBeStaticallyBound in interface InvokeInfoprotected abstract Collection<MethodFlowsGraph> getAllCalleesFlows(PointsToAnalysis bb)
MultiMethod.ORIGINAL_METHOD and also may not be
AnalysisMethod.isImplementationInvoked().public final Collection<MethodFlowsGraph> getOriginalCalleesFlows(PointsToAnalysis bb)
InvokeTypeFlow.getAllCalleesFlows(com.oracle.graal.pointsto.PointsToAnalysis), except that this method only returns calleesFlows whose
multimethodkey is MultiMethod.ORIGINAL_METHOD and also are guaranteed to be
AnalysisMethod.isImplementationInvoked().public com.oracle.svm.common.meta.MultiMethod.MultiMethodKey getCallerMultiMethodKey()