| Package | Description |
|---|---|
| com.ibm.wala.analysis.reflection |
This package provides functions to deal with reflection.
|
| com.ibm.wala.analysis.reflection.java7 | |
| com.ibm.wala.cfg.exc | |
| com.ibm.wala.cfg.exc.inter | |
| com.ibm.wala.dataflow.IFDS |
This package provides an RHS solver for IFDS problems.
|
| com.ibm.wala.demandpa.alg | |
| com.ibm.wala.demandpa.flowgraph | |
| com.ibm.wala.demandpa.util | |
| com.ibm.wala.escape | |
| com.ibm.wala.ipa.callgraph |
This package provides basic interfaces and functions for call graph
construction.
|
| com.ibm.wala.ipa.callgraph.cha | |
| com.ibm.wala.ipa.callgraph.impl |
This package provides some implementations of basic functions needed for
various call graph construction algorithms.
|
| com.ibm.wala.ipa.callgraph.propagation |
This package provides the base layer for propagation-based call graph
construction and pointer analysis.
|
| com.ibm.wala.ipa.callgraph.propagation.cfa |
This package provides RTA call graph
construction.
|
| com.ibm.wala.ipa.callgraph.propagation.rta |
This package provides CFA-style call graph
construction and pointer analysis.
|
| com.ibm.wala.ipa.callgraph.pruned | |
| com.ibm.wala.ipa.cfg |
This package supports interprocedural control-flow graphs, and control-flow
graphs specialized for context.
|
| com.ibm.wala.ipa.modref | |
| com.ibm.wala.ipa.slicer | |
| com.ibm.wala.ipa.slicer.thin | |
| com.ibm.wala.ipa.summaries |
This package provides class hierarchy analysis.
|
| Modifier and Type | Method and Description |
|---|---|
CGNode |
InstanceKeyWithNode.getNode() |
| Modifier and Type | Method and Description |
|---|---|
Context |
GetMethodContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver)
If
the
CallSiteReference invokes either Class.getMethod(java.lang.String, java.lang.Class<?>...) or Class.getDeclaredMethod(java.lang.String, java.lang.Class<?>...),
and the receiver is a type constant and
the first argument is a constant,
then return a GetMethodContextSelector. |
Context |
GetClassContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver) |
Set |
FactoryBypassInterpreter.getCaughtExceptions(CGNode node) |
Set |
CloneInterpreter.getCaughtExceptions(CGNode node) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
ReflectiveInvocationInterpreter.getCFG(CGNode N) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
JavaLangClassContextInterpreter.getCFG(CGNode N) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
GetMethodContextInterpreter.getCFG(CGNode N) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
GetClassContextInterpeter.getCFG(CGNode N) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
FactoryBypassInterpreter.getCFG(CGNode N) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
CloneInterpreter.getCFG(CGNode N) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
ClassNewInstanceContextInterpreter.getCFG(CGNode N) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
ClassFactoryContextInterpreter.getCFG(CGNode N) |
DefUse |
ReflectiveInvocationInterpreter.getDU(CGNode node) |
DefUse |
JavaLangClassContextInterpreter.getDU(CGNode node) |
DefUse |
GetMethodContextInterpreter.getDU(CGNode node) |
DefUse |
GetClassContextInterpeter.getDU(CGNode node) |
DefUse |
FactoryBypassInterpreter.getDU(CGNode node) |
DefUse |
CloneInterpreter.getDU(CGNode node) |
DefUse |
ClassNewInstanceContextInterpreter.getDU(CGNode node) |
DefUse |
ClassFactoryContextInterpreter.getDU(CGNode node) |
Iterator<SSAInstruction> |
FactoryBypassInterpreter.getInvokeStatements(CGNode node) |
IR |
ReflectiveInvocationInterpreter.getIR(CGNode node)
END Custom change: caching
|
IR |
JavaLangClassContextInterpreter.getIR(CGNode node)
END Custom change: caching
|
IR |
GetMethodContextInterpreter.getIR(CGNode node) |
IR |
GetClassContextInterpeter.getIR(CGNode node) |
IR |
FactoryBypassInterpreter.getIR(CGNode node) |
IR |
CloneInterpreter.getIR(CGNode node) |
IR |
ClassNewInstanceContextInterpreter.getIR(CGNode node) |
IR |
ClassFactoryContextInterpreter.getIR(CGNode node)
END Custom change: caching
|
int |
ReflectiveInvocationInterpreter.getNumberOfStatements(CGNode node) |
int |
JavaLangClassContextInterpreter.getNumberOfStatements(CGNode node)
END Custom change: caching
|
int |
GetMethodContextInterpreter.getNumberOfStatements(CGNode node) |
int |
GetClassContextInterpeter.getNumberOfStatements(CGNode node) |
int |
FactoryBypassInterpreter.getNumberOfStatements(CGNode node) |
int |
CloneInterpreter.getNumberOfStatements(CGNode node) |
int |
ClassNewInstanceContextInterpreter.getNumberOfStatements(CGNode node) |
int |
ClassFactoryContextInterpreter.getNumberOfStatements(CGNode node) |
com.ibm.wala.util.intset.IntSet |
GetMethodContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
com.ibm.wala.util.intset.IntSet |
GetClassContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
boolean |
FactoryBypassInterpreter.hasObjectArrayLoad(CGNode node) |
boolean |
CloneInterpreter.hasObjectArrayLoad(CGNode node) |
boolean |
FactoryBypassInterpreter.hasObjectArrayStore(CGNode node) |
boolean |
CloneInterpreter.hasObjectArrayStore(CGNode node) |
Iterator<CallSiteReference> |
ReflectiveInvocationInterpreter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
JavaLangClassContextInterpreter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
GetMethodContextInterpreter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
GetClassContextInterpeter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
FactoryBypassInterpreter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
CloneInterpreter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
ClassNewInstanceContextInterpreter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
ClassFactoryContextInterpreter.iterateCallSites(CGNode node) |
Iterator |
FactoryBypassInterpreter.iterateCastTypes(CGNode node) |
Iterator |
CloneInterpreter.iterateCastTypes(CGNode node) |
Iterator<FieldReference> |
ReflectiveInvocationInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
JavaLangClassContextInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
GetMethodContextInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
GetClassContextInterpeter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
FactoryBypassInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
CloneInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
ClassNewInstanceContextInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
ClassFactoryContextInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
ReflectiveInvocationInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
JavaLangClassContextInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
GetMethodContextInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
GetClassContextInterpeter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
FactoryBypassInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
CloneInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
ClassNewInstanceContextInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
ClassFactoryContextInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<NewSiteReference> |
ReflectiveInvocationInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
JavaLangClassContextInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
GetMethodContextInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
GetClassContextInterpeter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
FactoryBypassInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
CloneInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
ClassNewInstanceContextInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
ClassFactoryContextInterpreter.iterateNewSites(CGNode node) |
boolean |
ReflectiveInvocationInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
JavaLangClassContextInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
GetMethodContextInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
GetClassContextInterpeter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
FactoryBypassInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
CloneInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
ClassNewInstanceContextInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
ClassFactoryContextInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
ReflectiveInvocationInterpreter.understands(CGNode node) |
boolean |
JavaLangClassContextInterpreter.understands(CGNode node) |
boolean |
GetMethodContextInterpreter.understands(CGNode node) |
boolean |
GetClassContextInterpeter.understands(CGNode node) |
boolean |
FactoryBypassInterpreter.understands(CGNode node) |
boolean |
CloneInterpreter.understands(CGNode node) |
boolean |
ClassNewInstanceContextInterpreter.understands(CGNode node) |
boolean |
ClassFactoryContextInterpreter.understands(CGNode node) |
| Modifier and Type | Method and Description |
|---|---|
Context |
MethodHandles.ContextSelectorImpl.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] actualParameters) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
MethodHandles.ContextInterpreterImpl.getCFG(CGNode n) |
DefUse |
MethodHandles.ContextInterpreterImpl.getDU(CGNode node) |
IR |
MethodHandles.ContextInterpreterImpl.getIR(CGNode node) |
int |
MethodHandles.ContextInterpreterImpl.getNumberOfStatements(CGNode node) |
com.ibm.wala.util.intset.IntSet |
MethodHandles.ContextSelectorImpl.getRelevantParameters(CGNode caller,
CallSiteReference site) |
Iterator<CallSiteReference> |
MethodHandles.ContextInterpreterImpl.iterateCallSites(CGNode node) |
Iterator<FieldReference> |
MethodHandles.ContextInterpreterImpl.iterateFields(CGNode node,
com.ibm.wala.util.Predicate<SSAInstruction> filter) |
Iterator<FieldReference> |
MethodHandles.ContextInterpreterImpl.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
MethodHandles.ContextInterpreterImpl.iterateFieldsWritten(CGNode node) |
Iterator<NewSiteReference> |
MethodHandles.ContextInterpreterImpl.iterateNewSites(CGNode node) |
boolean |
MethodHandles.ContextInterpreterImpl.recordFactoryType(CGNode node,
IClass klass) |
boolean |
MethodHandles.ContextInterpreterImpl.understands(CGNode node) |
| Modifier and Type | Method and Description |
|---|---|
boolean |
InterprocAnalysisResult.containsResult(CGNode n)
Returns true iff an analysis result exists for the given call graph node.
|
ExceptionPruningAnalysis<I,T> |
InterprocAnalysisResult.getResult(CGNode n)
Returns the result of the interprocedural analysis for the given call graph node.
|
| Modifier and Type | Method and Description |
|---|---|
static boolean |
AnalysisUtil.isFakeRoot(CGNode node)
Checks if a node is FakeRoot
|
| Modifier and Type | Method and Description |
|---|---|
CGNode |
ICFGSupergraph.getProcOf(BasicBlockInContext<IExplodedBasicBlock> n) |
| Modifier and Type | Method and Description |
|---|---|
com.ibm.wala.util.graph.Graph<? extends CGNode> |
ICFGSupergraph.getProcedureGraph() |
| Modifier and Type | Method and Description |
|---|---|
Iterator<BasicBlockInContext<IExplodedBasicBlock>> |
ICFGSupergraph.getCallSites(BasicBlockInContext<IExplodedBasicBlock> r,
CGNode callee) |
BasicBlockInContext<IExplodedBasicBlock>[] |
ICFGSupergraph.getEntriesForProcedure(CGNode procedure) |
BasicBlockInContext<IExplodedBasicBlock>[] |
ICFGSupergraph.getExitsForProcedure(CGNode procedure) |
IR |
ICFGSupergraph.getIR(CGNode n) |
BasicBlockInContext<IExplodedBasicBlock> |
ICFGSupergraph.getLocalBlock(CGNode procedure,
int i) |
int |
ICFGSupergraph.getNumberOfBlocks(CGNode procedure) |
Iterator<? extends BasicBlockInContext<IExplodedBasicBlock>> |
ICFGSupergraph.getReturnSites(BasicBlockInContext<IExplodedBasicBlock> call,
CGNode callee) |
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
DemandRefinementPointsTo.PointsToComputer.calleeSubGraphMissingAndShouldNotBeAdded(boolean addGraphs,
CGNode callee,
PointerKeyAndState pkAndState)
when doing backward interprocedural propagation, is it true that we should not add a graph representation for a callee _and_
that the subgraph for the callee is missing?
|
| Modifier and Type | Field and Description |
|---|---|
protected CGNode |
SimpleDemandPointerFlowGraph.StatementVisitor.node
The node whose statements we are currently traversing
|
protected CGNode |
DemandPointerFlowGraph.StatementVisitor.node
The node whose statements we are currently traversing
|
| Modifier and Type | Field and Description |
|---|---|
protected Map<PointerKey,CGNode> |
AbstractFlowGraph.params
Map: LocalPointerKey -> CGNode.
|
protected Map<PointerKey,CGNode> |
AbstractFlowGraph.returns
Map:
LocalPointerKey -> CGNode. |
| Modifier and Type | Method and Description |
|---|---|
Set<CGNode> |
IFlowGraph.getPossibleTargets(CGNode caller,
CallSiteReference site,
LocalPointerKey actualPk)
get the callees that should be considered at a particular call site
|
Set<CGNode> |
AbstractDemandFlowGraph.getPossibleTargets(CGNode node,
CallSiteReference site,
LocalPointerKey actualPk) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
AbstractDemandFlowGraph.addBlockInstructionConstraints(CGNode node,
ControlFlowGraph<SSAInstruction,ISSABasicBlock> cfg,
ISSABasicBlock b,
AbstractDemandFlowGraph.FlowStatementVisitor v)
Add constraints for a particular basic block.
|
protected void |
SimpleDemandPointerFlowGraph.addBlockInstructionConstraints(CGNode node,
ControlFlowGraph<SSAInstruction,ISSABasicBlock> cfg,
ISSABasicBlock b,
SimpleDemandPointerFlowGraph.StatementVisitor v)
Add constraints for a particular basic block.
|
protected void |
DemandPointerFlowGraph.StatementVisitor.addExceptionDefConstraints(IR ir,
CGNode node,
List<ProgramCounter> peis,
PointerKey exceptionVar,
Set<IClass> catchClasses)
Generate constraints which assign exception values into an exception pointer
|
protected void |
AbstractFlowGraph.addExceptionDefConstraints(IR ir,
CGNode node,
List<ProgramCounter> peis,
PointerKey exceptionVar,
Set<IClass> catchClasses)
Generate constraints which assign exception values into an exception pointer
|
protected void |
AbstractFlowGraph.addNodeConstantConstraints(CGNode node,
IR ir)
add constraints for reference constants assigned to vars
|
protected void |
SimpleDemandPointerFlowGraph.addNodeInstructionConstraints(CGNode node,
IR ir,
DefUse du)
Add pointer flow constraints based on instructions in a given node
|
protected void |
AbstractDemandFlowGraph.addNodeInstructionConstraints(CGNode node,
IR ir,
DefUse du)
Add pointer flow constraints based on instructions in a given node
|
protected void |
SimpleDemandPointerFlowGraph.addNodePassthruExceptionConstraints(CGNode node,
IR ir)
Add constraints to represent the flow of exceptions to the exceptional return value for this node
|
protected void |
AbstractFlowGraph.addNodePassthruExceptionConstraints(CGNode node,
IR ir)
Add constraints to represent the flow of exceptions to the exceptional return value for this node
|
protected void |
AbstractFlowGraph.addNodesForInvocations(CGNode node,
IR ir)
For each invocation in the method, add nodes for actual parameters and return values
|
protected void |
DemandValueFlowGraph.addNodesForParameters(CGNode node,
IR ir) |
protected void |
DemandPointerFlowGraph.addNodesForParameters(CGNode node,
IR ir)
add nodes for parameters and return values
|
protected abstract void |
AbstractDemandFlowGraph.addNodesForParameters(CGNode node,
IR ir) |
void |
SimpleDemandPointerFlowGraph.addSubgraphForNode(CGNode node) |
void |
IFlowGraph.addSubgraphForNode(CGNode node)
add representation of flow for a node, if not already present
|
void |
AbstractDemandFlowGraph.addSubgraphForNode(CGNode node) |
static DemandPointerFlowGraph.NewMultiDimInfo |
DemandPointerFlowGraph.getInfoForNewMultiDim(SSANewInstruction instruction,
HeapModel heapModel,
CGNode node)
collect information about the new instructions and putfield instructions used to model an allocation of a multi-dimensional
array.
|
Set<CGNode> |
IFlowGraph.getPossibleTargets(CGNode caller,
CallSiteReference site,
LocalPointerKey actualPk)
get the callees that should be considered at a particular call site
|
Set<CGNode> |
AbstractDemandFlowGraph.getPossibleTargets(CGNode node,
CallSiteReference site,
LocalPointerKey actualPk) |
boolean |
IFlowGraph.hasSubgraphForNode(CGNode node) |
boolean |
AbstractDemandFlowGraph.hasSubgraphForNode(CGNode node) |
protected AbstractDemandFlowGraph.FlowStatementVisitor |
DemandValueFlowGraph.makeVisitor(CGNode node) |
protected AbstractDemandFlowGraph.FlowStatementVisitor |
DemandPointerFlowGraph.makeVisitor(CGNode node) |
protected abstract AbstractDemandFlowGraph.FlowStatementVisitor |
AbstractDemandFlowGraph.makeVisitor(CGNode node) |
protected void |
SimpleDemandPointerFlowGraph.unconditionallyAddConstraintsFromNode(CGNode node) |
protected void |
AbstractDemandFlowGraph.unconditionallyAddConstraintsFromNode(CGNode node,
IR ir) |
| Constructor and Description |
|---|
DemandPointerFlowGraph.StatementVisitor(HeapModel heapModel,
IFlowGraph g,
IClassHierarchy cha,
CallGraph cg,
CGNode node) |
SimpleDemandPointerFlowGraph.StatementVisitor(CGNode node,
IR ir,
DefUse du) |
| Modifier and Type | Method and Description |
|---|---|
CGNode |
MemoryAccess.getNode() |
static CGNode |
CallGraphMapUtil.mapCGNode(CGNode orig,
CallGraph fromCG,
CallGraph toCG)
map a call graph node from one call graph to the corresponding node in another.
|
| Modifier and Type | Method and Description |
|---|---|
static CGNode |
CallGraphMapUtil.mapCGNode(CGNode orig,
CallGraph fromCG,
CallGraph toCG)
map a call graph node from one call graph to the corresponding node in another.
|
| Constructor and Description |
|---|
MemoryAccess(int index,
CGNode node) |
PointerParamValueNumIterator(CGNode node) |
| Modifier and Type | Method and Description |
|---|---|
boolean |
ILiveObjectAnalysis.mayBeLive(CGNode allocMethod,
int allocPC,
CGNode m,
int instructionIndex) |
boolean |
FILiveObjectAnalysis.mayBeLive(CGNode allocMethod,
int allocPC,
CGNode m,
int instructionIndex) |
boolean |
ILiveObjectAnalysis.mayBeLive(InstanceKey ik,
CGNode m,
int instructionIndex) |
boolean |
FILiveObjectAnalysis.mayBeLive(InstanceKey ik,
CGNode m,
int instructionIndex) |
boolean |
ILiveObjectAnalysis.mayBeLive(InstanceKey ik,
CGNode m,
com.ibm.wala.util.intset.IntSet instructionIndices) |
boolean |
FILiveObjectAnalysis.mayBeLive(InstanceKey ik,
CGNode m,
com.ibm.wala.util.intset.IntSet instructionIndices) |
boolean |
TrivialMethodEscape.mayEscape(CGNode allocNode,
int allocPC,
CGNode node) |
boolean |
INodeEscapeAnalysis.mayEscape(CGNode allocNode,
int allocPC,
CGNode node) |
| Modifier and Type | Method and Description |
|---|---|
CGNode |
CallGraph.getFakeRootNode()
Return the (fake) interprocedural
root node of the call graph. |
CGNode |
CallGraph.getFakeWorldClinitNode() |
CGNode |
CallGraph.getNode(IMethod method,
Context C)
If you want to get all the nodes corresponding to a particular method, regardless of context, then use
getNodes |
| Modifier and Type | Method and Description |
|---|---|
static <T> Map<CGNode,Collection<T>> |
CallGraphTransitiveClosure.collectNodeResults(CallGraph cg,
com.ibm.wala.util.functions.Function<CGNode,Collection<T>> nodeResultComputer)
|
Collection<CGNode> |
CallGraph.getEntrypointNodes() |
Set<CGNode> |
CallGraph.getNodes(MethodReference m) |
Set<CGNode> |
CallGraph.getPossibleTargets(CGNode node,
CallSiteReference site)
Return the set of CGNodes that represent possible targets of a particular call site from a particular node
|
static <T> Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<T>> |
CallGraphTransitiveClosure.transitiveClosure(CallGraph cg,
Map<CGNode,Collection<T>> nodeResults)
Compute the transitive closure of an analysis result over all callees.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
CGNode.addTarget(CallSiteReference site,
CGNode target)
Deprecated.
|
IClass |
ClassTargetSelector.getAllocatedTarget(CGNode caller,
NewSiteReference site)
Given a calling node and a new site, return the type to be allocated.
|
IMethod |
MethodTargetSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IClass receiver)
Given a calling node, a call site and (optionally) a dispatch type, return the target method to be called.
|
Context |
ContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] actualParameters)
Given a calling node and a call site, returns the Context in which the callee should be evaluated.
|
int |
CallGraph.getNumberOfTargets(CGNode node,
CallSiteReference site) |
Iterator<CallSiteReference> |
CallGraph.getPossibleSites(CGNode src,
CGNode target) |
Set<CGNode> |
CallGraph.getPossibleTargets(CGNode node,
CallSiteReference site)
Return the set of CGNodes that represent possible targets of a particular call site from a particular node
|
com.ibm.wala.util.intset.IntSet |
ContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site)
Given a calling node and a call site, return the set of parameters based
on which this selector may choose to specialize contexts.
|
| Modifier and Type | Method and Description |
|---|---|
static <T> Map<CGNode,Collection<T>> |
CallGraphTransitiveClosure.collectNodeResults(CallGraph cg,
com.ibm.wala.util.functions.Function<CGNode,Collection<T>> nodeResultComputer)
|
static <T> Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<T>> |
CallGraphTransitiveClosure.transitiveClosure(CallGraph cg,
Map<CGNode,Collection<T>> nodeResults)
Compute the transitive closure of an analysis result over all callees.
|
| Modifier and Type | Method and Description |
|---|---|
CGNode |
CHACallGraph.findOrCreateNode(IMethod method,
Context C) |
protected CGNode |
CHACallGraph.makeFakeRootNode() |
protected CGNode |
CHACallGraph.makeFakeWorldClinitNode() |
| Modifier and Type | Method and Description |
|---|---|
protected com.ibm.wala.util.graph.NumberedEdgeManager<CGNode> |
CHACallGraph.getEdgeManager() |
Set<CGNode> |
CHACallGraph.getPossibleTargets(CGNode node,
CallSiteReference site) |
| Modifier and Type | Method and Description |
|---|---|
int |
CHACallGraph.getNumberOfTargets(CGNode node,
CallSiteReference site) |
Iterator<CallSiteReference> |
CHACallGraph.getPossibleSites(CGNode src,
CGNode target) |
Set<CGNode> |
CHACallGraph.getPossibleTargets(CGNode node,
CallSiteReference site) |
Iterator<CallSiteReference> |
ContextInsensitiveCHAContextInterpreter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
CHAContextInterpreter.iterateCallSites(CGNode node) |
boolean |
ContextInsensitiveCHAContextInterpreter.understands(CGNode node) |
boolean |
CHAContextInterpreter.understands(CGNode node)
Does this object understand the given method? The caller had better check this before inquiring on other properties.
|
| Modifier and Type | Class and Description |
|---|---|
class |
BasicCallGraph.NodeImpl
A class that represents the a normal node in a call graph.
|
class |
ExplicitCallGraph.ExplicitNode |
| Modifier and Type | Field and Description |
|---|---|
protected Map<MethodReference,Set<CGNode>> |
BasicCallGraph.mr2Nodes
A mapping from MethodReference to Set of nodes that represent this methodReference.
|
protected Collection<CGNode> |
PartialCallGraph.partialRoots |
| Modifier and Type | Method and Description |
|---|---|
CGNode |
ExplicitCallGraph.findOrCreateNode(IMethod method,
Context context) |
abstract CGNode |
BasicCallGraph.findOrCreateNode(IMethod method,
Context C)
Use with extreme care.
|
CGNode |
PartialCallGraph.getFakeRootNode() |
CGNode |
BasicCallGraph.getFakeRootNode() |
CGNode |
PartialCallGraph.getFakeWorldClinitNode() |
CGNode |
BasicCallGraph.getFakeWorldClinitNode() |
CGNode |
PartialCallGraph.getNode(IMethod method,
Context C) |
CGNode |
BasicCallGraph.getNode(IMethod method,
Context C) |
CGNode |
PartialCallGraph.getNode(int index) |
protected CGNode |
ExplicitCallGraph.makeFakeRootNode()
subclasses may wish to override!
|
protected abstract CGNode |
BasicCallGraph.makeFakeRootNode() |
protected CGNode |
ExplicitCallGraph.makeFakeWorldClinitNode()
subclasses may wish to override!
|
protected abstract CGNode |
BasicCallGraph.makeFakeWorldClinitNode() |
| Modifier and Type | Method and Description |
|---|---|
com.ibm.wala.util.graph.NumberedEdgeManager<CGNode> |
ExplicitCallGraph.getEdgeManager() |
Collection<CGNode> |
PartialCallGraph.getEntrypointNodes() |
Collection<CGNode> |
BasicCallGraph.getEntrypointNodes()
Note: not all successors of the root node are entrypoints
|
protected com.ibm.wala.util.graph.NumberedNodeManager<CGNode> |
BasicCallGraph.getNodeManager() |
Set<CGNode> |
PartialCallGraph.getNodes(MethodReference m) |
Set<CGNode> |
BasicCallGraph.getNodes(MethodReference m) |
protected Set<CGNode> |
ExplicitCallGraph.ExplicitNode.getPossibleTargets(CallSiteReference site) |
Set<CGNode> |
PartialCallGraph.getPossibleTargets(CGNode node,
CallSiteReference site) |
Set<CGNode> |
ExplicitCallGraph.getPossibleTargets(CGNode node,
CallSiteReference site) |
Iterator<CGNode> |
ExplicitCallGraph.ExplicitEdgeManager.getPredNodes(CGNode N) |
Iterator<CGNode> |
ExplicitCallGraph.ExplicitEdgeManager.getSuccNodes(CGNode N) |
Iterator<CGNode> |
PartialCallGraph.iterateNodes(com.ibm.wala.util.intset.IntSet nodes) |
Iterator<CGNode> |
BasicCallGraph.iterator()
We override this since this class supports remove() on nodes, but the superclass doesn't.
|
| Modifier and Type | Method and Description |
|---|---|
void |
ExplicitCallGraph.ExplicitEdgeManager.addEdge(CGNode src,
CGNode dst) |
boolean |
ExplicitCallGraph.ExplicitNode.addTarget(CallSiteReference site,
CGNode tNode) |
abstract boolean |
BasicCallGraph.NodeImpl.addTarget(CallSiteReference reference,
CGNode target) |
protected boolean |
ExplicitCallGraph.ExplicitNode.addTarget(int pc,
CGNode tNode) |
boolean |
BasicCallGraph.containsNode(CGNode N)
This implementation is necessary because the underlying SparseNumberedGraph may not support node membership tests.
|
IClass |
ClassHierarchyClassTargetSelector.getAllocatedTarget(CGNode caller,
NewSiteReference site) |
IMethod |
ClassHierarchyMethodTargetSelector.getCalleeTarget(CGNode caller,
CallSiteReference call,
IClass receiver)
This target selector searches the class hierarchy for the method matching the signature of the call that is appropriate for the
receiver type.
|
Context |
UnionContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver)
If only one Context exists return it, else return a DelegatingContext.
|
Context |
DelegatingContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver) |
Context |
DefaultContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver) |
Context |
ContextInsensitiveSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver) |
protected T |
BasicCallGraph.getInterpreter(CGNode node) |
int |
PartialCallGraph.getNumber(CGNode n) |
int |
PartialCallGraph.getNumberOfTargets(CGNode node,
CallSiteReference site) |
int |
ExplicitCallGraph.getNumberOfTargets(CGNode node,
CallSiteReference site) |
protected Iterator<CallSiteReference> |
ExplicitCallGraph.ExplicitNode.getPossibleSites(CGNode to) |
Iterator<CallSiteReference> |
PartialCallGraph.getPossibleSites(CGNode src,
CGNode target) |
Iterator<CallSiteReference> |
ExplicitCallGraph.getPossibleSites(CGNode src,
CGNode target) |
com.ibm.wala.util.intset.IntSet |
ExplicitCallGraph.getPossibleTargetNumbers(CGNode node,
CallSiteReference site) |
Set<CGNode> |
PartialCallGraph.getPossibleTargets(CGNode node,
CallSiteReference site) |
Set<CGNode> |
ExplicitCallGraph.getPossibleTargets(CGNode node,
CallSiteReference site) |
int |
ExplicitCallGraph.ExplicitEdgeManager.getPredNodeCount(CGNode N) |
com.ibm.wala.util.intset.IntSet |
PartialCallGraph.getPredNodeNumbers(CGNode node) |
com.ibm.wala.util.intset.IntSet |
ExplicitCallGraph.ExplicitEdgeManager.getPredNodeNumbers(CGNode node) |
Iterator<CGNode> |
ExplicitCallGraph.ExplicitEdgeManager.getPredNodes(CGNode N) |
com.ibm.wala.util.intset.IntSet |
UnionContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
com.ibm.wala.util.intset.IntSet |
DelegatingContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
com.ibm.wala.util.intset.IntSet |
DefaultContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
com.ibm.wala.util.intset.IntSet |
ContextInsensitiveSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
int |
ExplicitCallGraph.ExplicitEdgeManager.getSuccNodeCount(CGNode N) |
com.ibm.wala.util.intset.IntSet |
PartialCallGraph.getSuccNodeNumbers(CGNode node) |
com.ibm.wala.util.intset.IntSet |
ExplicitCallGraph.ExplicitEdgeManager.getSuccNodeNumbers(CGNode node) |
Iterator<CGNode> |
ExplicitCallGraph.ExplicitEdgeManager.getSuccNodes(CGNode N) |
boolean |
ExplicitCallGraph.ExplicitEdgeManager.hasEdge(CGNode src,
CGNode dst) |
boolean |
ClassHierarchyMethodTargetSelector.mightReturnSyntheticMethod(CGNode caller,
CallSiteReference site) |
void |
BasicCallGraph.registerEntrypoint(CGNode node)
record that a node is an entrypoint
|
protected void |
BasicCallGraph.registerNode(BasicCallGraph.Key K,
CGNode N) |
void |
ExplicitCallGraph.ExplicitEdgeManager.removeAllIncidentEdges(CGNode node) |
void |
ExplicitCallGraph.ExplicitEdgeManager.removeEdge(CGNode src,
CGNode dst) |
void |
ExplicitCallGraph.ExplicitEdgeManager.removeIncomingEdges(CGNode node) |
void |
BasicCallGraph.removeNodeAndEdges(CGNode N) |
void |
ExplicitCallGraph.ExplicitEdgeManager.removeOutgoingEdges(CGNode node) |
void |
ExplicitCallGraph.ExplicitNode.removeTarget(CGNode target) |
| Modifier and Type | Method and Description |
|---|---|
static PartialCallGraph |
PartialCallGraph.make(CallGraph cg,
Collection<CGNode> partialRoots) |
static PartialCallGraph |
PartialCallGraph.make(CallGraph cg,
Collection<CGNode> partialRoots,
Collection<CGNode> nodes) |
static PartialCallGraph |
PartialCallGraph.make(CallGraph cg,
Collection<CGNode> partialRoots,
Collection<CGNode> nodes) |
| Constructor and Description |
|---|
PartialCallGraph(CallGraph cg,
Collection<CGNode> partialRoots,
com.ibm.wala.util.graph.Graph<CGNode> partialGraph) |
PartialCallGraph(CallGraph cg,
Collection<CGNode> partialRoots,
com.ibm.wala.util.graph.Graph<CGNode> partialGraph) |
| Modifier and Type | Field and Description |
|---|---|
protected CGNode |
SSAPropagationCallGraphBuilder.ConstraintVisitor.node
The node whose statements we are currently traversing
|
protected CGNode |
PointerAnalysisImpl.ImplicitPointsToSetVisitor.node |
| Modifier and Type | Method and Description |
|---|---|
CGNode |
NodeKey.getNode() |
CGNode |
LocalPointerKey.getNode() |
CGNode |
AbstractTypeInNode.getNode() |
abstract CGNode |
AbstractLocalPointerKey.getNode() |
CGNode |
SSAPropagationCallGraphBuilder.ConstraintVisitor.getTargetForCall(CGNode caller,
CallSiteReference site,
IClass recv,
InstanceKey[] iKey) |
protected CGNode |
PropagationCallGraphBuilder.getTargetForCall(CGNode caller,
CallSiteReference site,
IClass recv,
InstanceKey[] iKey) |
| Modifier and Type | Method and Description |
|---|---|
Iterator<com.ibm.wala.util.collections.Pair<CGNode,NewSiteReference>> |
StringConstantCharArray.getCreationSites(CallGraph CG) |
Iterator<com.ibm.wala.util.collections.Pair<CGNode,NewSiteReference>> |
SmushedAllocationSiteInNode.getCreationSites(CallGraph CG) |
Iterator<com.ibm.wala.util.collections.Pair<CGNode,NewSiteReference>> |
InstanceKey.getCreationSites(CallGraph CG)
Get the creation sites of
this, i.e., the statements that may
allocate objects represented by this. |
Iterator<com.ibm.wala.util.collections.Pair<CGNode,NewSiteReference>> |
ConstantKey.getCreationSites(CallGraph CG) |
Iterator<com.ibm.wala.util.collections.Pair<CGNode,NewSiteReference>> |
ConcreteTypeKey.getCreationSites(CallGraph CG) |
Iterator<com.ibm.wala.util.collections.Pair<CGNode,NewSiteReference>> |
AllocationSiteInNode.getCreationSites(CallGraph CG) |
Iterator<com.ibm.wala.util.collections.Pair<CGNode,NewSiteReference>> |
AllocationSite.getCreationSites(CallGraph CG) |
protected Set<CGNode> |
SSAPropagationCallGraphBuilder.getTargetsForCall(CGNode caller,
SSAAbstractInvokeInstruction instruction,
InstanceKey[][] invs) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
SSAPropagationCallGraphBuilder.addBlockInstructionConstraints(CGNode node,
ControlFlowGraph<SSAInstruction,ISSABasicBlock> cfg,
SSACFG.BasicBlock b,
SSAPropagationCallGraphBuilder.ConstraintVisitor v,
com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor)
Add constraints for a particular basic block.
|
void |
PropagationCallGraphBuilder.addConstraintsFromChangedNode(CGNode node,
com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor)
Add constraints when the interpretation of a node changes (e.g.
|
protected boolean |
SSAPropagationCallGraphBuilder.addConstraintsFromNode(CGNode node,
com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor)
Visit all instructions in a node, and add dataflow constraints induced by each statement in the SSA form.
|
protected abstract boolean |
PropagationCallGraphBuilder.addConstraintsFromNode(CGNode n,
com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor)
Add constraints for a node.
|
protected void |
SSAPropagationCallGraphBuilder.addNodeInstructionConstraints(CGNode node,
com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor)
Add pointer flow constraints based on instructions in a given node
|
protected void |
SSAPropagationCallGraphBuilder.addNodePassthruExceptionConstraints(CGNode node,
IR ir,
DefUse du)
Add constraints to represent the flow of exceptions to the exceptional return value for this node
|
com.ibm.wala.util.intset.OrdinalSet<InstanceKey> |
PointerAnalysisImpl.computeImplicitPointsToSetAtGet(CGNode node,
FieldReference field,
int refVn,
boolean isStatic) |
Context |
TargetMethodContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] R) |
Context |
ReceiverTypeContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver) |
Context |
CloneContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
SSAContextInterpreter.getCFG(CGNode n) |
DefUse |
SSAContextInterpreter.getDU(CGNode node) |
FilteredPointerKey |
PropagationCallGraphBuilder.getFilteredPointerKeyForLocal(CGNode node,
int valueNumber,
FilteredPointerKey.TypeFilter filter) |
FilteredPointerKey |
PointerKeyFactory.getFilteredPointerKeyForLocal(CGNode node,
int valueNumber,
FilteredPointerKey.TypeFilter filter) |
FilteredPointerKey |
PointerAnalysisImpl.HModel.getFilteredPointerKeyForLocal(CGNode node,
int valueNumber,
FilteredPointerKey.TypeFilter filter) |
FilteredPointerKey |
PropagationCallGraphBuilder.getFilteredPointerKeyForLocal(CGNode node,
int valueNumber,
IClass filter) |
FilteredPointerKey |
PropagationCallGraphBuilder.getFilteredPointerKeyForLocal(CGNode node,
int valueNumber,
InstanceKey filter) |
InstanceKey |
SmushedAllocationSiteInstanceKeys.getInstanceKeyForAllocation(CGNode node,
NewSiteReference allocation) |
InstanceKey |
PropagationCallGraphBuilder.getInstanceKeyForAllocation(CGNode node,
NewSiteReference allocation) |
InstanceKey |
PointerAnalysisImpl.HModel.getInstanceKeyForAllocation(CGNode node,
NewSiteReference allocation) |
InstanceKey |
InstanceKeyFactory.getInstanceKeyForAllocation(CGNode node,
NewSiteReference allocation) |
InstanceKey |
ClassBasedInstanceKeys.getInstanceKeyForAllocation(CGNode node,
NewSiteReference allocation) |
InstanceKey |
AllocationSiteInNodeFactory.getInstanceKeyForAllocation(CGNode node,
NewSiteReference allocation) |
InstanceKey |
SmushedAllocationSiteInstanceKeys.getInstanceKeyForMultiNewArray(CGNode node,
NewSiteReference allocation,
int dim) |
InstanceKey |
PropagationCallGraphBuilder.getInstanceKeyForMultiNewArray(CGNode node,
NewSiteReference allocation,
int dim) |
InstanceKey |
PointerAnalysisImpl.HModel.getInstanceKeyForMultiNewArray(CGNode node,
NewSiteReference allocation,
int dim) |
InstanceKey |
InstanceKeyFactory.getInstanceKeyForMultiNewArray(CGNode node,
NewSiteReference allocation,
int dim) |
InstanceKey |
ClassBasedInstanceKeys.getInstanceKeyForMultiNewArray(CGNode node,
NewSiteReference allocation,
int dim) |
InstanceKey |
AllocationSiteInNodeFactory.getInstanceKeyForMultiNewArray(CGNode node,
NewSiteReference allocation,
int dim) |
InstanceKey |
SSAPropagationCallGraphBuilder.getInstanceKeyForPEI(CGNode node,
ProgramCounter instr,
TypeReference type) |
InstanceKey |
SmushedAllocationSiteInstanceKeys.getInstanceKeyForPEI(CGNode node,
ProgramCounter pei,
TypeReference type) |
InstanceKey |
PointerAnalysisImpl.HModel.getInstanceKeyForPEI(CGNode node,
ProgramCounter peiLoc,
TypeReference type) |
InstanceKey |
InstanceKeyFactory.getInstanceKeyForPEI(CGNode node,
ProgramCounter instr,
TypeReference type) |
InstanceKey |
ClassBasedInstanceKeys.getInstanceKeyForPEI(CGNode node,
ProgramCounter peiLoc,
TypeReference type) |
InstanceKey |
AllocationSiteInNodeFactory.getInstanceKeyForPEI(CGNode node,
ProgramCounter pei,
TypeReference type) |
static InstanceKey |
SSAPropagationCallGraphBuilder.getInstanceKeyForPEI(CGNode node,
ProgramCounter x,
TypeReference type,
InstanceKeyFactory ikFactory) |
protected InstanceKey[] |
SSAPropagationCallGraphBuilder.ConstraintVisitor.getInvariantContents(SymbolTable symbolTable,
DefUse du,
CGNode node,
int valueNumber) |
InstanceKey[] |
SSAPropagationCallGraphBuilder.getInvariantContents(SymbolTable symbolTable,
DefUse du,
CGNode node,
int valueNumber,
HeapModel hm)
precondition:contentsAreInvariant(valueNumber)
|
protected InstanceKey[] |
SSAPropagationCallGraphBuilder.getInvariantContents(SymbolTable symbolTable,
DefUse du,
CGNode node,
int valueNumber,
HeapModel hm,
boolean ensureIndexes) |
IR |
SSAContextInterpreter.getIR(CGNode node) |
int |
SSAContextInterpreter.getNumberOfStatements(CGNode node) |
PointerKey |
PropagationCallGraphBuilder.getPointerKeyForExceptionalReturnValue(CGNode node) |
PointerKey |
PointerKeyFactory.getPointerKeyForExceptionalReturnValue(CGNode node) |
PointerKey |
PointerAnalysisImpl.HModel.getPointerKeyForExceptionalReturnValue(CGNode node) |
PointerKey |
PropagationCallGraphBuilder.getPointerKeyForLocal(CGNode node,
int valueNumber) |
PointerKey |
PointerKeyFactory.getPointerKeyForLocal(CGNode node,
int valueNumber) |
PointerKey |
PointerAnalysisImpl.HModel.getPointerKeyForLocal(CGNode node,
int valueNumber) |
PointerKey |
PropagationCallGraphBuilder.getPointerKeyForReturnValue(CGNode node) |
PointerKey |
PointerKeyFactory.getPointerKeyForReturnValue(CGNode node) |
PointerKey |
PointerAnalysisImpl.HModel.getPointerKeyForReturnValue(CGNode node) |
com.ibm.wala.util.intset.IntSet |
TargetMethodContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
com.ibm.wala.util.intset.IntSet |
ReceiverTypeContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
com.ibm.wala.util.intset.IntSet |
CloneContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
CGNode |
SSAPropagationCallGraphBuilder.ConstraintVisitor.getTargetForCall(CGNode caller,
CallSiteReference site,
IClass recv,
InstanceKey[] iKey) |
protected CGNode |
PropagationCallGraphBuilder.getTargetForCall(CGNode caller,
CallSiteReference site,
IClass recv,
InstanceKey[] iKey) |
PointerKey |
SSAPropagationCallGraphBuilder.getTargetPointerKey(CGNode target,
int index)
TODO: enhance this logic using type inference TODO!!!: enhance filtering to consider concrete types, not just cones.
|
protected Set<CGNode> |
SSAPropagationCallGraphBuilder.getTargetsForCall(CGNode caller,
SSAAbstractInvokeInstruction instruction,
InstanceKey[][] invs) |
PointerKey |
SSAPropagationCallGraphBuilder.getUniqueCatchKey(SSAAbstractInvokeInstruction call,
IR ir,
CGNode node)
precondition: hasUniqueCatchBlock(call,node,cg)
|
boolean |
SSAPropagationCallGraphBuilder.hasNoInterestingUses(CGNode node,
int vn,
DefUse du) |
boolean |
PropagationCallGraphBuilder.haveAlreadyVisited(CGNode node) |
protected void |
SSAPropagationCallGraphBuilder.iterateCrossProduct(CGNode caller,
SSAAbstractInvokeInstruction call,
com.ibm.wala.util.intset.IntSet parameters,
InstanceKey[][] invariants,
com.ibm.wala.util.functions.VoidFunction<InstanceKey[]> f) |
protected SSAPropagationCallGraphBuilder.InterestingVisitor |
SSAPropagationCallGraphBuilder.makeInterestingVisitor(CGNode node,
int vn) |
protected SSAPropagationCallGraphBuilder.ConstraintVisitor |
SSAPropagationCallGraphBuilder.makeVisitor(CGNode node) |
protected void |
PropagationCallGraphBuilder.markAlreadyVisited(CGNode node) |
protected void |
PropagationCallGraphBuilder.markChanged(CGNode node) |
void |
PropagationCallGraphBuilder.markDiscovered(CGNode node)
record that we've discovered a node
|
protected void |
SSAPropagationCallGraphBuilder.processCallingConstraints(CGNode caller,
SSAAbstractInvokeInstruction instruction,
CGNode target,
InstanceKey[][] constParams,
PointerKey uniqueCatchKey) |
protected boolean |
SSAPropagationCallGraphBuilder.unconditionallyAddConstraintsFromNode(CGNode node,
com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor) |
protected abstract boolean |
PropagationCallGraphBuilder.unconditionallyAddConstraintsFromNode(CGNode node,
com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor) |
protected boolean |
PropagationCallGraphBuilder.wasChanged(CGNode node) |
| Constructor and Description |
|---|
AbstractTypeInNode(CGNode node,
IClass type) |
AllocationSiteInNode(CGNode node,
NewSiteReference allocation,
IClass type) |
LocalPointerKey(CGNode node,
int valueNumber) |
LocalPointerKeyWithFilter(CGNode node,
int valueNumber,
FilteredPointerKey.TypeFilter typeFilter) |
MultiNewArrayInNode(CGNode node,
NewSiteReference allocation,
ArrayClass type,
int dim) |
NodeKey(CGNode node) |
NormalAllocationInNode(CGNode node,
NewSiteReference allocation,
IClass type) |
ReturnValueKey(CGNode node) |
ReturnValueKeyWithFilter(CGNode node,
FilteredPointerKey.TypeFilter typeFilter) |
SmushedAllocationSiteInNode(CGNode node,
IClass type) |
SSAPropagationCallGraphBuilder.ConstraintVisitor(SSAPropagationCallGraphBuilder builder,
CGNode node) |
ZeroLengthArrayInNode(CGNode node,
NewSiteReference allocation,
IClass type) |
| Modifier and Type | Field and Description |
|---|---|
protected Map<CGNode,Set<IClass>> |
ZeroXInstanceKeys.smushMap
a Map from CGNode->Set
|
| Modifier and Type | Method and Description |
|---|---|
static CGNode |
ContainerContextSelector.findNodeRecursiveMatchingContext(IMethod m,
Context c)
This method walks recursively up the definition of a context C, to see if
the chain of contexts that give rise to C includes the method M.
|
CGNode |
CallerContext.getCaller() |
| Modifier and Type | Method and Description |
|---|---|
Context |
OneLevelSiteContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver) |
Context |
ContainerContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] keys) |
Context |
CallStringContextSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IMethod callee,
InstanceKey[] receiver) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
FallbackContextInterpreter.getCFG(CGNode n) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
DelegatingSSAContextInterpreter.getCFG(CGNode node) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
DefaultSSAInterpreter.getCFG(CGNode N) |
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
ContextInsensitiveSSAInterpreter.getCFG(CGNode N) |
DefUse |
FallbackContextInterpreter.getDU(CGNode node) |
DefUse |
DelegatingSSAContextInterpreter.getDU(CGNode node) |
DefUse |
DefaultSSAInterpreter.getDU(CGNode node) |
DefUse |
ContextInsensitiveSSAInterpreter.getDU(CGNode node) |
FilteredPointerKey |
DefaultPointerKeyFactory.getFilteredPointerKeyForLocal(CGNode node,
int valueNumber,
FilteredPointerKey.TypeFilter filter) |
InstanceKey |
ZeroXInstanceKeys.getInstanceKeyForAllocation(CGNode node,
NewSiteReference allocation) |
InstanceKey |
ZeroXInstanceKeys.getInstanceKeyForMultiNewArray(CGNode node,
NewSiteReference allocation,
int dim) |
InstanceKey |
ZeroXInstanceKeys.getInstanceKeyForPEI(CGNode node,
ProgramCounter pei,
TypeReference type) |
IR |
FallbackContextInterpreter.getIR(CGNode node) |
IR |
DelegatingSSAContextInterpreter.getIR(CGNode node) |
IR |
DefaultSSAInterpreter.getIR(CGNode node) |
IR |
ContextInsensitiveSSAInterpreter.getIR(CGNode node) |
protected int |
nCFAContextSelector.getLength(CGNode caller,
CallSiteReference site,
IMethod target) |
protected abstract int |
CallStringContextSelector.getLength(CGNode caller,
CallSiteReference site,
IMethod target) |
int |
FallbackContextInterpreter.getNumberOfStatements(CGNode node) |
int |
DelegatingSSAContextInterpreter.getNumberOfStatements(CGNode node) |
int |
DefaultSSAInterpreter.getNumberOfStatements(CGNode node) |
int |
ContextInsensitiveSSAInterpreter.getNumberOfStatements(CGNode node) |
PointerKey |
DefaultPointerKeyFactory.getPointerKeyForExceptionalReturnValue(CGNode node) |
PointerKey |
DefaultPointerKeyFactory.getPointerKeyForLocal(CGNode node,
int valueNumber) |
PointerKey |
DefaultPointerKeyFactory.getPointerKeyForReturnValue(CGNode node) |
com.ibm.wala.util.intset.IntSet |
OneLevelSiteContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
com.ibm.wala.util.intset.IntSet |
ContainerContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
com.ibm.wala.util.intset.IntSet |
CallStringContextSelector.getRelevantParameters(CGNode caller,
CallSiteReference site) |
Iterator<CallSiteReference> |
FallbackContextInterpreter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
DefaultSSAInterpreter.iterateCallSites(CGNode node) |
Iterator<FieldReference> |
FallbackContextInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
FallbackContextInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<NewSiteReference> |
FallbackContextInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
DefaultSSAInterpreter.iterateNewSites(CGNode node) |
boolean |
ContainerContextSelector.mayUnderstand(CGNode caller,
CallSiteReference site,
IMethod targetMethod,
InstanceKey receiver) |
boolean |
FallbackContextInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
DelegatingSSAContextInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
DefaultSSAInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
ContextInsensitiveSSAInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
FallbackContextInterpreter.understands(CGNode node) |
boolean |
DelegatingSSAContextInterpreter.understands(CGNode node) |
| Constructor and Description |
|---|
CallerContext(CGNode caller) |
CallerContextPair(CGNode caller,
Context baseContext) |
CallerSiteContext(CGNode caller,
CallSiteReference callSite) |
CallerSiteContextPair(CGNode caller,
CallSiteReference callSite,
Context baseContext) |
ExceptionReturnValueKey(CGNode node) |
| Modifier and Type | Class and Description |
|---|---|
class |
DelegatingExplicitCallGraph.DelegatingCGNode
In this implementation, super.targets is a mapping from call site ->
Object, where Object is a
A Mapping from call site -> Object, where Object is a
CGNode if we've discovered exactly one target for the site
or an IntSet of node numbers if we've discovered more than one target
for the site.
|
| Modifier and Type | Method and Description |
|---|---|
CGNode |
CallSite.getNode() |
| Modifier and Type | Method and Description |
|---|---|
Set<CGNode> |
DelegatingExplicitCallGraph.DelegatingCGNode.getPossibleTargets(CallSiteReference site) |
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
AbstractRTABuilder.addConstraintsFromNode(CGNode node,
com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor)
Visit all instructions in a node, and add dataflow constraints induced by each statement relevat to RTA
|
void |
DelegatingExplicitCallGraph.DelegatingCGNode.delegate(CallSiteReference site,
CGNode delegateNode,
CallSiteReference delegateSite) |
FilteredPointerKey |
TypeBasedHeapModel.getFilteredPointerKeyForLocal(CGNode node,
int valueNumber,
FilteredPointerKey.TypeFilter filter) |
InstanceKey |
TypeBasedHeapModel.getInstanceKeyForAllocation(CGNode node,
NewSiteReference allocation) |
InstanceKey |
TypeBasedHeapModel.getInstanceKeyForMultiNewArray(CGNode node,
NewSiteReference allocation,
int dim) |
InstanceKey |
TypeBasedHeapModel.getInstanceKeyForPEI(CGNode node,
ProgramCounter instr,
TypeReference type) |
PointerKey |
TypeBasedHeapModel.getPointerKeyForExceptionalReturnValue(CGNode node) |
FilteredPointerKey |
TypeBasedHeapModel.getPointerKeyForLocal(CGNode node,
int valueNumber)
Note that this always returns a
FilteredPointerKey, since the TypeBasedPointerAnalysis relies on the type
filter to compute points to sets. |
PointerKey |
TypeBasedHeapModel.getPointerKeyForReturnValue(CGNode node) |
Iterator<CallSiteReference> |
DelegatingRTAContextInterpreter.iterateCallSites(CGNode node) |
Iterator<CallSiteReference> |
DefaultRTAInterpreter.iterateCallSites(CGNode node) |
Iterator<FieldReference> |
RTAContextInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
DelegatingRTAContextInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
DefaultRTAInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
ContextInsensitiveRTAInterpreter.iterateFieldsRead(CGNode node) |
Iterator<FieldReference> |
RTAContextInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
DelegatingRTAContextInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
DefaultRTAInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<FieldReference> |
ContextInsensitiveRTAInterpreter.iterateFieldsWritten(CGNode node) |
Iterator<NewSiteReference> |
RTAContextInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
DelegatingRTAContextInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
DefaultRTAInterpreter.iterateNewSites(CGNode node) |
Iterator<NewSiteReference> |
ContextInsensitiveRTAInterpreter.iterateNewSites(CGNode node) |
protected com.ibm.wala.fixpoint.UnaryOperator<PointsToSetVariable> |
BasicRTABuilder.makeDispatchOperator(CallSiteReference site,
CGNode node) |
protected abstract com.ibm.wala.fixpoint.UnaryOperator<PointsToSetVariable> |
AbstractRTABuilder.makeDispatchOperator(CallSiteReference site,
CGNode node) |
boolean |
RTAContextInterpreter.recordFactoryType(CGNode node,
IClass klass)
record that the "factory" method of a node should be interpreted to allocate a particular class.
|
boolean |
DelegatingRTAContextInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
DefaultRTAInterpreter.recordFactoryType(CGNode node,
IClass klass) |
boolean |
ContextInsensitiveRTAInterpreter.recordFactoryType(CGNode node,
IClass klass) |
protected boolean |
AbstractRTABuilder.unconditionallyAddConstraintsFromNode(CGNode node,
com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor) |
boolean |
DelegatingRTAContextInterpreter.understands(CGNode node) |
boolean |
DefaultRTAInterpreter.understands(CGNode node) |
protected void |
BasicRTABuilder.updateSetsForNewClass(IClass klass,
InstanceKey iKey,
CGNode node,
NewSiteReference n)
Perform needed bookkeeping when a new class is discovered.
|
protected abstract void |
AbstractRTABuilder.updateSetsForNewClass(IClass klass,
InstanceKey iKey,
CGNode node,
NewSiteReference ns)
Perform needed bookkeeping when a new class is discovered.
|
void |
AbstractRTABuilder.visitInvoke(CGNode node,
CallSiteReference site)
Add a constraint for a call instruction
|
void |
AbstractRTABuilder.visitNew(CGNode node,
NewSiteReference newSite)
Add a constraint for an allocate
|
| Constructor and Description |
|---|
CallSite(CallSiteReference site,
CGNode node) |
| Modifier and Type | Method and Description |
|---|---|
CGNode |
PrunedCallGraph.getFakeRootNode() |
CGNode |
PrunedCallGraph.getFakeWorldClinitNode() |
CGNode |
PrunedCallGraph.getNode(IMethod method,
Context C) |
CGNode |
PrunedCallGraph.getNode(int number) |
| Modifier and Type | Method and Description |
|---|---|
Set<CGNode> |
CallGraphPruning.findApplicationNodes()
Searches all nodes in the callgraph that correspond to a method of the application (and not the system library).
|
Set<CGNode> |
CallGraphPruning.findApplicationNodes(int depth)
Searches all nodes in the callgraph that correspond to a method of the application (and not the system library).
|
Set<CGNode> |
CallGraphPruning.findNodes(int depth,
PruningPolicy policy)
Searches all nodes in the callgraph according to the given pruning policy.
|
Collection<CGNode> |
PrunedCallGraph.getEntrypointNodes() |
Set<CGNode> |
PrunedCallGraph.getNodes(MethodReference m) |
Set<CGNode> |
PrunedCallGraph.getPossibleTargets(CGNode node,
CallSiteReference site) |
Iterator<CGNode> |
PrunedCallGraph.getPredNodes(CGNode n) |
Iterator<CGNode> |
PrunedCallGraph.getSuccNodes(CGNode n) |
Iterator<CGNode> |
PrunedCallGraph.iterateNodes(com.ibm.wala.util.intset.IntSet s) |
Iterator<CGNode> |
PrunedCallGraph.iterator() |
| Modifier and Type | Method and Description |
|---|---|
void |
PrunedCallGraph.addEdge(CGNode src,
CGNode dst) |
void |
PrunedCallGraph.addNode(CGNode n) |
boolean |
PruningPolicy.check(CGNode n)
Returns whether the given node shall be kept.
|
boolean |
DoNotPrune.check(CGNode n) |
boolean |
ApplicationLoaderPolicy.check(CGNode n) |
boolean |
PrunedCallGraph.containsNode(CGNode n) |
int |
PrunedCallGraph.getNumber(CGNode N) |
int |
PrunedCallGraph.getNumberOfTargets(CGNode node,
CallSiteReference site) |
Iterator<CallSiteReference> |
PrunedCallGraph.getPossibleSites(CGNode src,
CGNode target) |
Set<CGNode> |
PrunedCallGraph.getPossibleTargets(CGNode node,
CallSiteReference site) |
int |
PrunedCallGraph.getPredNodeCount(CGNode n) |
com.ibm.wala.util.intset.IntSet |
PrunedCallGraph.getPredNodeNumbers(CGNode node) |
Iterator<CGNode> |
PrunedCallGraph.getPredNodes(CGNode n) |
int |
PrunedCallGraph.getSuccNodeCount(CGNode n) |
com.ibm.wala.util.intset.IntSet |
PrunedCallGraph.getSuccNodeNumbers(CGNode node) |
Iterator<CGNode> |
PrunedCallGraph.getSuccNodes(CGNode n) |
boolean |
PrunedCallGraph.hasEdge(CGNode src,
CGNode dst) |
void |
PrunedCallGraph.removeAllIncidentEdges(CGNode node) |
void |
PrunedCallGraph.removeEdge(CGNode src,
CGNode dst) |
void |
PrunedCallGraph.removeIncomingEdges(CGNode node) |
void |
PrunedCallGraph.removeNode(CGNode n) |
void |
PrunedCallGraph.removeNodeAndEdges(CGNode n) |
void |
PrunedCallGraph.removeOutgoingEdges(CGNode node) |
| Constructor and Description |
|---|
PrunedCallGraph(CallGraph cg,
Set<CGNode> keep) |
| Modifier and Type | Method and Description |
|---|---|
CGNode |
AbstractInterproceduralCFG.getCGNode(BasicBlockInContext B) |
CGNode |
BasicBlockInContext.getNode() |
| Modifier and Type | Method and Description |
|---|---|
Set<CGNode> |
AbstractInterproceduralCFG.getCallTargets(BasicBlockInContext<T> B) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
AbstractInterproceduralCFG.addEdgesToNonEntryBlock(CGNode n,
ControlFlowGraph<?,T> cfg,
SSAInstruction[] instrs,
T bb)
Add edges to the IPCFG for the incoming edges incident on a basic block bb.
|
Iterator<BasicBlockInContext<T>> |
AbstractInterproceduralCFG.getCallSites(BasicBlockInContext<T> returnBlock,
CGNode callee)
get the basic blocks which are call sites that may call callee and return to returnBlock if callee is null, answer return sites
for which no callee was found.
|
ControlFlowGraph<SSAInstruction,ISSABasicBlock> |
InterproceduralCFG.getCFG(CGNode n) |
ControlFlowGraph<SSAInstruction,IExplodedBasicBlock> |
ExplodedInterproceduralCFG.getCFG(CGNode n) |
abstract ControlFlowGraph<SSAInstruction,T> |
AbstractInterproceduralCFG.getCFG(CGNode n) |
BasicBlockInContext<T> |
AbstractInterproceduralCFG.getEntry(CGNode n) |
BasicBlockInContext<T> |
AbstractInterproceduralCFG.getExit(CGNode n) |
| Constructor and Description |
|---|
BasicBlockInContext(CGNode node,
T bb) |
| Constructor and Description |
|---|
AbstractInterproceduralCFG(CallGraph CG,
com.ibm.wala.util.Predicate<CGNode> relevant)
Build an Interprocedural CFG from a call graph.
|
ExplodedInterproceduralCFG(CallGraph cg,
com.ibm.wala.util.Predicate<CGNode> filter) |
InterproceduralCFG(CallGraph cg,
com.ibm.wala.util.collections.Filtersection<CGNode> filtersection) |
| Modifier and Type | Field and Description |
|---|---|
protected CGNode |
ModRef.RefVisitor.n |
protected CGNode |
ModRef.ModVisitor.n |
| Modifier and Type | Method and Description |
|---|---|
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> |
ModRef.computeMod(CallGraph cg,
PointerAnalysis<InstanceKey> pa)
For each call graph node, what heap locations (as determined by a heap model) may it write, including its callees transitively
|
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> |
ModRef.computeMod(CallGraph cg,
PointerAnalysis<InstanceKey> pa,
HeapExclusions heapExclude)
For each call graph node, what heap locations (as determined by a heap model) may it write, including its callees transitively
|
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> |
ModRef.computeRef(CallGraph cg,
PointerAnalysis<InstanceKey> pa)
For each call graph node, what heap locations (as determined by a heap model) may it read, including its callees transitively
|
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> |
ModRef.computeRef(CallGraph cg,
PointerAnalysis<InstanceKey> pa,
HeapExclusions heapExclude)
For each call graph node, what heap locations (as determined by a heap model) may it read, including its callees transitively
|
| Constructor and Description |
|---|
ModRef.ModVisitor(CGNode n,
Collection<PointerKey> result,
H h,
PointerAnalysis<InstanceKey> pa,
boolean ignoreAllocHeapDefs) |
ModRef.RefVisitor(CGNode n,
Collection<PointerKey> result,
PointerAnalysis<InstanceKey> pa,
H h) |
| Modifier and Type | Method and Description |
|---|---|
CGNode |
PDG.getCallGraphNode() |
CGNode |
Statement.getNode() |
| Modifier and Type | Method and Description |
|---|---|
Map<Statement,com.ibm.wala.util.intset.OrdinalSet<Statement>> |
HeapReachingDefs.computeReachingDefs(CGNode node,
IR ir,
PointerAnalysis<InstanceKey> pa,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> mod,
Collection<Statement> statements,
HeapExclusions exclusions,
CallGraph cg)
For each statement s, return the set of statements that may def the heap value read by s.
|
PDG |
SDG.getPDG(CGNode node) |
PDG |
ISDG.getPDG(CGNode node)
Get the program dependence graph constructed for a particular node.
|
static Statement |
PDG.ssaInstruction2Statement(CGNode node,
SSAInstruction s,
Map<SSAInstruction,Integer> instructionIndices,
IR ir) |
| Modifier and Type | Method and Description |
|---|---|
Map<Statement,com.ibm.wala.util.intset.OrdinalSet<Statement>> |
HeapReachingDefs.computeReachingDefs(CGNode node,
IR ir,
PointerAnalysis<InstanceKey> pa,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> mod,
Collection<Statement> statements,
HeapExclusions exclusions,
CallGraph cg)
For each statement s, return the set of statements that may def the heap value read by s.
|
| Constructor and Description |
|---|
PDG(CGNode node,
PointerAnalysis<InstanceKey> pa,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> mod,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> ref,
Slicer.DataDependenceOptions dOptions,
Slicer.ControlDependenceOptions cOptions,
HeapExclusions exclusions,
CallGraph cg,
ModRef modRef) |
PDG(CGNode node,
PointerAnalysis<InstanceKey> pa,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> mod,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> ref,
Slicer.DataDependenceOptions dOptions,
Slicer.ControlDependenceOptions cOptions,
HeapExclusions exclusions,
CallGraph cg,
ModRef modRef) |
PDG(CGNode node,
PointerAnalysis<InstanceKey> pa,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> mod,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> ref,
Slicer.DataDependenceOptions dOptions,
Slicer.ControlDependenceOptions cOptions,
HeapExclusions exclusions,
CallGraph cg,
ModRef modRef,
boolean ignoreAllocHeapDefs) |
PDG(CGNode node,
PointerAnalysis<InstanceKey> pa,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> mod,
Map<CGNode,com.ibm.wala.util.intset.OrdinalSet<PointerKey>> ref,
Slicer.DataDependenceOptions dOptions,
Slicer.ControlDependenceOptions cOptions,
HeapExclusions exclusions,
CallGraph cg,
ModRef modRef,
boolean ignoreAllocHeapDefs) |
| Modifier and Type | Method and Description |
|---|---|
PDG |
CISDG.getPDG(CGNode node) |
| Modifier and Type | Method and Description |
|---|---|
static LambdaSummaryClass |
LambdaSummaryClass.findOrCreate(CGNode caller,
SSAInvokeDynamicInstruction inst) |
IClass |
BypassClassTargetSelector.getAllocatedTarget(CGNode caller,
NewSiteReference site) |
IMethod |
LambdaMethodTargetSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IClass receiver) |
IMethod |
BypassMethodTargetSelector.getCalleeTarget(CGNode caller,
CallSiteReference site,
IClass dispatchType)
Check to see if a particular call site should be bypassed, before checking normal resolution of the receiver.
|
Copyright © 2015. All rights reserved.