Class WorklistBasedOptimisticCallgraphBuilder
- java.lang.Object
-
- com.ibm.wala.cast.js.callgraph.fieldbased.FieldBasedCallGraphBuilder
-
- com.ibm.wala.cast.js.callgraph.fieldbased.WorklistBasedOptimisticCallgraphBuilder
-
public class WorklistBasedOptimisticCallgraphBuilder extends FieldBasedCallGraphBuilder
Optimistic call graph builder that propagates inter-procedural data flow iteratively as call edges are discovered. Slower, but potentially more sound thanPessimisticCallGraphBuilder.This variant uses a worklist algorithm, generally making it scale better than
OptimisticCallgraphBuilder, which repeatedly runs the pessimistic algorithm.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.ibm.wala.cast.js.callgraph.fieldbased.FieldBasedCallGraphBuilder
FieldBasedCallGraphBuilder.CallGraphResult
-
-
Field Summary
Fields Modifier and Type Field Description intITERATION_CUTOFFThe maximum number of iterations to perform.-
Fields inherited from class com.ibm.wala.cast.js.callgraph.fieldbased.FieldBasedCallGraphBuilder
cache, cha, constructors, options, supportFullPointerAnalysis, targetSelector
-
-
Constructor Summary
Constructors Constructor Description WorklistBasedOptimisticCallgraphBuilder(com.ibm.wala.ipa.cha.IClassHierarchy cha, com.ibm.wala.ipa.callgraph.AnalysisOptions options, com.ibm.wala.ipa.callgraph.IAnalysisCacheView cache, boolean supportFullPointerAnalysis, int bound)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddFlowEdge(FlowGraph flowgraph, Vertex from, Vertex to, java.util.Set<Vertex> worklist)FlowGraphbuildFlowGraph(com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor)Build a flow graph for the program to be analysed.java.util.Set<com.ibm.wala.util.collections.Pair<CallVertex,FuncVertex>>extractCallGraphEdges(FlowGraph flowgraph, com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor)Extract call edges from the flow graph into high-level representation.voidprocessPendingCallWorklist(FlowGraph flowgraph, java.util.Map<Vertex,java.util.Set<FuncVertex>> pendingCallWorklist, VertexFactory factory, java.util.Map<Vertex,java.util.Set<FuncVertex>> reachingFunctions, java.util.Map<VarVertex,com.ibm.wala.util.collections.Pair<JavaScriptInvoke,java.lang.Boolean>> reflectiveCalleeVertices, java.util.Set<Vertex> worklist)voidprocessPendingReflectiveCallWorklist(FlowGraph flowgraph, java.util.Map<Vertex,java.util.Set<FuncVertex>> pendingReflectiveCallWorklist, java.util.Map<VarVertex,com.ibm.wala.util.collections.Pair<JavaScriptInvoke,java.lang.Boolean>> reflectiveCalleeVertices, java.util.Set<Vertex> worklist)-
Methods inherited from class com.ibm.wala.cast.js.callgraph.fieldbased.FieldBasedCallGraphBuilder
addEdgeToJSCallGraph, buildCallGraph, extract, extract, flowGraphFactory, handleFunctionCallOrApplyInvocation
-
-
-
-
Constructor Detail
-
WorklistBasedOptimisticCallgraphBuilder
public WorklistBasedOptimisticCallgraphBuilder(com.ibm.wala.ipa.cha.IClassHierarchy cha, com.ibm.wala.ipa.callgraph.AnalysisOptions options, com.ibm.wala.ipa.callgraph.IAnalysisCacheView cache, boolean supportFullPointerAnalysis, int bound)
-
-
Method Detail
-
buildFlowGraph
public FlowGraph buildFlowGraph(com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor) throws com.ibm.wala.util.CancelException
Description copied from class:FieldBasedCallGraphBuilderBuild a flow graph for the program to be analysed.- Specified by:
buildFlowGraphin classFieldBasedCallGraphBuilder- Throws:
com.ibm.wala.util.CancelException
-
extractCallGraphEdges
public java.util.Set<com.ibm.wala.util.collections.Pair<CallVertex,FuncVertex>> extractCallGraphEdges(FlowGraph flowgraph, com.ibm.wala.util.MonitorUtil.IProgressMonitor monitor) throws com.ibm.wala.util.CancelException
Description copied from class:FieldBasedCallGraphBuilderExtract call edges from the flow graph into high-level representation.- Overrides:
extractCallGraphEdgesin classFieldBasedCallGraphBuilder- Throws:
com.ibm.wala.util.CancelException
-
processPendingCallWorklist
public void processPendingCallWorklist(FlowGraph flowgraph, java.util.Map<Vertex,java.util.Set<FuncVertex>> pendingCallWorklist, VertexFactory factory, java.util.Map<Vertex,java.util.Set<FuncVertex>> reachingFunctions, java.util.Map<VarVertex,com.ibm.wala.util.collections.Pair<JavaScriptInvoke,java.lang.Boolean>> reflectiveCalleeVertices, java.util.Set<Vertex> worklist)
-
processPendingReflectiveCallWorklist
public void processPendingReflectiveCallWorklist(FlowGraph flowgraph, java.util.Map<Vertex,java.util.Set<FuncVertex>> pendingReflectiveCallWorklist, java.util.Map<VarVertex,com.ibm.wala.util.collections.Pair<JavaScriptInvoke,java.lang.Boolean>> reflectiveCalleeVertices, java.util.Set<Vertex> worklist)
-
-