com.ibm.wala.demandpa.alg
Class DemandRefinementPointsTo

java.lang.Object
  extended by com.ibm.wala.demandpa.alg.AbstractDemandPointsTo
      extended by com.ibm.wala.demandpa.alg.DemandRefinementPointsTo
All Implemented Interfaces:
IDemandPointerAnalysis

public class DemandRefinementPointsTo
extends AbstractDemandPointsTo

Demand-driven refinement-based points-to analysis.


Nested Class Summary
protected  class DemandRefinementPointsTo.PointsToComputer
          Points-to analysis algorithm code.
static class DemandRefinementPointsTo.PointsToResult
          Possible results of a query.
 
Field Summary
protected  IFlowGraph g
           
 
Fields inherited from class com.ibm.wala.demandpa.alg.AbstractDemandPointsTo
cg, cha, fam, heapModel, numNodesTraversed, options
 
Constructor Summary
DemandRefinementPointsTo(CallGraph cg, ThisFilteringHeapModel model, MemoryAccessMap fam, ClassHierarchy cha, AnalysisOptions options, StateMachineFactory<IFlowLabel> stateMachineFactory)
           
DemandRefinementPointsTo(CallGraph cg, ThisFilteringHeapModel model, MemoryAccessMap fam, ClassHierarchy cha, AnalysisOptions options, StateMachineFactory<IFlowLabel> stateMachineFactory, IFlowGraph flowGraph)
           
 
Method Summary
 java.util.Collection<InstanceKey> getPointsTo(PointerKey pk)
           
 Pair<DemandRefinementPointsTo.PointsToResult,java.util.Collection<InstanceKey>> getPointsTo(PointerKey pk, Predicate<java.util.Collection<InstanceKey>> p2setPred)
          compute a points-to set for a pointer key, aiming to satisfy some predicate
 RefinementPolicy getRefinementPolicy()
           
 RefinementPolicyFactory getRefinementPolicyFactory()
           
 StateMachineFactory<IFlowLabel> getStateMachineFactory()
           
 void setRefinementPolicyFactory(RefinementPolicyFactory refinementPolicyFactory)
           
 void setStateMachineFactory(StateMachineFactory<IFlowLabel> stateMachineFactory)
           
protected  void startNewQuery()
          re-initialize state for a new query
 
Methods inherited from class com.ibm.wala.demandpa.alg.AbstractDemandPointsTo
getBaseCallGraph, getClassHierarchy, getHeapModel, getNumNodesTraversed, getTraversalBudget, incrementNumNodesTraversed, setNumNodesTraversed, setTraversalBudget
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

g

protected final IFlowGraph g
Constructor Detail

DemandRefinementPointsTo

public DemandRefinementPointsTo(CallGraph cg,
                                ThisFilteringHeapModel model,
                                MemoryAccessMap fam,
                                ClassHierarchy cha,
                                AnalysisOptions options,
                                StateMachineFactory<IFlowLabel> stateMachineFactory)

DemandRefinementPointsTo

public DemandRefinementPointsTo(CallGraph cg,
                                ThisFilteringHeapModel model,
                                MemoryAccessMap fam,
                                ClassHierarchy cha,
                                AnalysisOptions options,
                                StateMachineFactory<IFlowLabel> stateMachineFactory,
                                IFlowGraph flowGraph)
Method Detail

getRefinementPolicy

public RefinementPolicy getRefinementPolicy()

startNewQuery

protected void startNewQuery()
re-initialize state for a new query


getPointsTo

public Pair<DemandRefinementPointsTo.PointsToResult,java.util.Collection<InstanceKey>> getPointsTo(PointerKey pk,
                                                                                                   Predicate<java.util.Collection<InstanceKey>> p2setPred)
                                                                                            throws java.lang.IllegalArgumentException
compute a points-to set for a pointer key, aiming to satisfy some predicate

Parameters:
pk - the pointer key
p2setPred - the desired predicate that the points-to set should ideally satisfy
Returns:
a pair consisting of (1) a DemandRefinementPointsTo.PointsToResult indicating whether a points-to set satisfying the predicate was computed, and (2) the last computed points-to set for the variable (possibly null if no points-to set could be computed in the budget)
Throws:
java.lang.IllegalArgumentException - if pk is not a LocalPointerKey; to eventually be fixed

getPointsTo

public java.util.Collection<InstanceKey> getPointsTo(PointerKey pk)
Returns:
the points-to set of pk, or null if the points-to set can't be computed in the allocated budget

getStateMachineFactory

public StateMachineFactory<IFlowLabel> getStateMachineFactory()

setStateMachineFactory

public void setStateMachineFactory(StateMachineFactory<IFlowLabel> stateMachineFactory)

getRefinementPolicyFactory

public RefinementPolicyFactory getRefinementPolicyFactory()

setRefinementPolicyFactory

public void setRefinementPolicyFactory(RefinementPolicyFactory refinementPolicyFactory)