com.ibm.wala.cast.ipa.callgraph
Class AstSSAPropagationCallGraphBuilder

java.lang.Object
  extended by com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder
      extended by com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder
          extended by com.ibm.wala.cast.ipa.callgraph.AstSSAPropagationCallGraphBuilder
All Implemented Interfaces:
CallGraphBuilder, HeapModel, InstanceKeyFactory, PointerKeyFactory
Direct Known Subclasses:
AstJavaSSAPropagationCallGraphBuilder, CrossLanguageSSAPropagationCallGraphBuilder, JSSSAPropagationCallGraphBuilder

public abstract class AstSSAPropagationCallGraphBuilder
extends SSAPropagationCallGraphBuilder


Nested Class Summary
protected static class AstSSAPropagationCallGraphBuilder.AstConstraintVisitor
           
static class AstSSAPropagationCallGraphBuilder.AstInterestingVisitor
           
static class AstSSAPropagationCallGraphBuilder.AstPointerAnalysisImpl
           
 
Nested classes/interfaces inherited from class com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder
SSAPropagationCallGraphBuilder.ConstraintVisitor, SSAPropagationCallGraphBuilder.InterestingVisitor
 
Nested classes/interfaces inherited from class com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder
PropagationCallGraphBuilder.ArrayLoadOperator, PropagationCallGraphBuilder.ArrayStoreOperator, PropagationCallGraphBuilder.FilterOperator, PropagationCallGraphBuilder.GetFieldOperator, PropagationCallGraphBuilder.InstanceArrayStoreOperator, PropagationCallGraphBuilder.InstancePutFieldOperator, PropagationCallGraphBuilder.InverseFilterOperator, PropagationCallGraphBuilder.MutableBoolean, PropagationCallGraphBuilder.PutFieldOperator, PropagationCallGraphBuilder.TypedPointerKey
 
Field Summary
static boolean DEBUG_PROPERTIES
           
static boolean DEBUG_TYPE_INFERENCE
           
 
Fields inherited from class com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder
PERIODIC_WIPE_SOFT_CACHES, SHORT_CIRCUIT_SINGLE_USES, WIPE_SOFT_CACHE_INTERVAL
 
Fields inherited from class com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder
assignOperator, callGraph, cha, contextSelector, DEBUG_GENERAL, entrypointCallSites, filterOperator, instanceKeyFactory, inverseFilterOperator, options, pointerKeyFactory, system
 
Constructor Summary
protected AstSSAPropagationCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, PointerKeyFactory pointerKeyFactory)
           
 
Method Summary
protected  ExplicitCallGraph createEmptyCallGraph(IClassHierarchy cha, AnalysisOptions options)
           
 boolean hasNoInterestingUses(CGNode node, int vn, DefUse du)
           
protected  boolean isUncataloguedField(IClass type, java.lang.String fieldName)
          each language can specify whether a particular field name should be stored in object catalogs or not.
 SSAContextInterpreter makeDefaultContextInterpreters(SSAContextInterpreter appContextInterpreter, AnalysisOptions options, IClassHierarchy cha)
           
protected  SSAPropagationCallGraphBuilder.InterestingVisitor makeInterestingVisitor(CGNode node, int vn)
           
protected  SSAPropagationCallGraphBuilder.ConstraintVisitor makeVisitor(ExplicitCallGraph.ExplicitNode node)
           
protected abstract  boolean useObjectCatalog()
          should we maintain an object catalog for each instance key, storing the names of all known properties of the instance key? required to handle EachElementGetInstructions.
 
Methods inherited from class com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder
addBlockInstructionConstraints, addConstraintsFromNode, addNodeInstructionConstraints, addNodePassthruExceptionConstraints, contentsAreInvariant, contentsAreInvariant, getCaughtExceptionTypes, getCFAContextInterpreter, getIncomingPEIs, getInstanceKeyForPEI, getInstanceKeyForPEI, getInvariantContents, getInvariantContents, getTargetPointerKey, getTargetsForCall, getUniqueCatchKey, hasUniqueCatchBlock, isConstantRef, iterateCrossProduct, iteratePointerKeys, makeSolver, makeVisitor, processCallingConstraints, unconditionallyAddConstraintsFromNode
 
Methods inherited from class com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder
addAssignmentsForCatchPointerKey, addConstraintsFromChangedNode, addConstraintsFromNewNodes, assignInstanceToCatch, catches, customInit, filterForClass, getAnalysisCache, getCallGraph, getClassHierarchy, getContextInterpreter, getContextSelector, getFilteredPointerKeyForLocal, getFilteredPointerKeyForLocal, getFilteredPointerKeyForLocal, getInstanceKeyForAllocation, getInstanceKeyForClassObject, getInstanceKeyForConstant, getInstanceKeyForMultiNewArray, getInstanceKeys, getInstanceKeysForClass, getJavaLangObject, getMutableInstanceKeysForClass, getOptions, getPointerAnalysis, getPointerKeyFactory, getPointerKeyForArrayContents, getPointerKeyForExceptionalReturnValue, getPointerKeyForInstanceField, getPointerKeyForLocal, getPointerKeyForReturnValue, getPointerKeyForStaticField, getPropagationSystem, getSolver, getTargetForCall, haveAlreadyVisited, isJavaLangObject, makeCallGraph, makeCallGraph, makeSystem, markAlreadyVisited, markChanged, markDiscovered, representsNullType, setContextInterpreter, setContextSelector, setInstanceKeys, wasChanged
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.ibm.wala.ipa.callgraph.propagation.HeapModel
getClassHierarchy
 
Methods inherited from interface com.ibm.wala.ipa.callgraph.propagation.InstanceKeyFactory
getInstanceKeyForAllocation, getInstanceKeyForClassObject, getInstanceKeyForConstant, getInstanceKeyForMultiNewArray
 
Methods inherited from interface com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory
getFilteredPointerKeyForLocal, getPointerKeyForArrayContents, getPointerKeyForExceptionalReturnValue, getPointerKeyForInstanceField, getPointerKeyForLocal, getPointerKeyForReturnValue, getPointerKeyForStaticField
 

Field Detail

DEBUG_TYPE_INFERENCE

public static final boolean DEBUG_TYPE_INFERENCE
See Also:
Constant Field Values

DEBUG_PROPERTIES

public static final boolean DEBUG_PROPERTIES
See Also:
Constant Field Values
Constructor Detail

AstSSAPropagationCallGraphBuilder

protected AstSSAPropagationCallGraphBuilder(IClassHierarchy cha,
                                            AnalysisOptions options,
                                            AnalysisCache cache,
                                            PointerKeyFactory pointerKeyFactory)
Method Detail

useObjectCatalog

protected abstract boolean useObjectCatalog()
should we maintain an object catalog for each instance key, storing the names of all known properties of the instance key? required to handle EachElementGetInstructions.

See Also:
AstSSAPropagationCallGraphBuilder.AstConstraintVisitor.visitPut(SSAPutInstruction), AstSSAPropagationCallGraphBuilder.AstConstraintVisitor.visitEachElementGet(EachElementGetInstruction)

isUncataloguedField

protected boolean isUncataloguedField(IClass type,
                                      java.lang.String fieldName)
each language can specify whether a particular field name should be stored in object catalogs or not. By default, always return false.


makeDefaultContextInterpreters

public SSAContextInterpreter makeDefaultContextInterpreters(SSAContextInterpreter appContextInterpreter,
                                                            AnalysisOptions options,
                                                            IClassHierarchy cha)

createEmptyCallGraph

protected ExplicitCallGraph createEmptyCallGraph(IClassHierarchy cha,
                                                 AnalysisOptions options)
Overrides:
createEmptyCallGraph in class PropagationCallGraphBuilder

makeInterestingVisitor

protected SSAPropagationCallGraphBuilder.InterestingVisitor makeInterestingVisitor(CGNode node,
                                                                                   int vn)
Overrides:
makeInterestingVisitor in class SSAPropagationCallGraphBuilder

hasNoInterestingUses

public boolean hasNoInterestingUses(CGNode node,
                                    int vn,
                                    DefUse du)
Overrides:
hasNoInterestingUses in class SSAPropagationCallGraphBuilder

makeVisitor

protected SSAPropagationCallGraphBuilder.ConstraintVisitor makeVisitor(ExplicitCallGraph.ExplicitNode node)