Class NullPointerSolver<B extends ISSABasicBlock>
java.lang.Object
com.ibm.wala.fixedpoint.impl.AbstractFixedPointSolver<NullPointerState>
com.ibm.wala.fixedpoint.impl.DefaultFixedPointSolver<NullPointerState>
com.ibm.wala.dataflow.graph.DataflowSolver<B, NullPointerState>
com.ibm.wala.cfg.exc.intra.NullPointerSolver<B>
- All Implemented Interfaces:
FixedPointConstants, IFixedPointSolver<NullPointerState>, VerboseAction
public class NullPointerSolver<B extends ISSABasicBlock>
extends DataflowSolver<B, NullPointerState>
Intraprocedural dataflow analysis to detect impossible NullPointerExceptions.
- Author:
- Juergen Graf <graf@kit.edu>
-
Nested Class Summary
Nested classes/interfaces inherited from class AbstractFixedPointSolver
AbstractFixedPointSolver.Statement -
Field Summary
Fields inherited from class AbstractFixedPointSolver
DEFAULT_PERIODIC_MAINTENANCE_INTERVAL, DEFAULT_VERBOSE_INTERVAL, verbose, workListModifier and TypeFieldDescriptionstatic final intstatic final intstatic final booleanprotected Worklistworklist for the iterative solverFields inherited from interface FixedPointConstants
CHANGED, CHANGED_AND_FIXED, CHANGED_MASK, FIXED_MASK, NOT_CHANGED, NOT_CHANGED_AND_FIXED, SIDE_EFFECT_MASKModifier and TypeFieldDescriptionstatic final byteA return value which indicates that a lhs has changed, and the statement might need to be evaluated again.static final byteA return value which indicates that lhs has changed, and the statement need not be evaluated again.static final intThe bit-mask which defines the "CHANGED" flagstatic final intThe bit-mask which defines the "FIXED" flagstatic final byteA return value which indicates that lhs has not changed, and the statement might need to be evaluated again.static final byteA return value which indicates that lhs has not changed, and the statement need not be evaluated again.static final intThe bit-mask which defines the "SIDE EFFECT" flag -
Constructor Summary
ConstructorsConstructorDescriptionNullPointerSolver(NullPointerFrameWork<B> problem, int maxVarNum, B entry, IR ir, ParameterState initialState) NullPointerSolver(NullPointerFrameWork<B> problem, int maxVarNum, IR ir, B entry) -
Method Summary
Modifier and TypeMethodDescriptionprotected NullPointerStatemakeEdgeVariable(B src, B dst) protected NullPointerStatemakeNodeVariable(B n, boolean IN) protected NullPointerState[]makeStmtRHS(int size) Methods inherited from class DataflowSolver
buildEquations, getEdge, getEdge, getIn, getOut, getProblem, initializeVariables, initializeWorkListModifier and TypeMethodDescriptionprotected voidbuildEquations(boolean toWorkList, boolean eager) protected voidInitialize all lattice vars in the system.protected voidInitialize the work list for iteration.jMethods inherited from class DefaultFixedPointSolver
getFixedPointSystemMethods inherited from class AbstractFixedPointSolver
addAllStatementsToWorkList, addToWorkList, changedVariable, emptyWorkList, getMaxEvalBetweenTopo, getMinSizeForTopSort, getNumberOfEvaluations, getPeriodicMaintainInterval, getStatements, getTopologicalGrowthFactor, getVerboseInterval, incNumberOfEvaluations, initForFirstSolve, isChanged, isFixed, isSideEffect, lineBreak, newStatement, newStatement, newStatement, newStatement, newStatement, orderStatements, performVerboseAction, periodicMaintenance, removeStatement, setMaxEvalBetweenTopo, setMinEquationsForTopSort, setTopologicalGrowthFactor, solve, toStringModifier and TypeMethodDescriptionvoidAdd all to the work list.voidAdd a step to the work list.voidCall this method when the contents of a variable changes.booleanintintintprotected intsubclasses should override as desired.Iterator<? extends INodeWithNumber> doubleprotected intsubclasses should override as desired.voidvoidSome setup which occurs only before the first solvestatic booleanisChanged(byte code) static booleanisFixed(byte code) static booleanisSideEffect(byte code) static StringbooleannewStatement(NullPointerState lhs, NullaryOperator<NullPointerState> operator, boolean toWorkList, boolean eager) Add a step with zero operands on the right-hand side.booleannewStatement(NullPointerState lhs, AbstractOperator<NullPointerState> operator, NullPointerState[] rhs, boolean toWorkList, boolean eager) Add a step to the system with an arbitrary number of operands on the right-hand side.booleannewStatement(NullPointerState lhs, AbstractOperator<NullPointerState> operator, NullPointerState op1, NullPointerState op2, boolean toWorkList, boolean eager) Add an equation with two operands on the right-hand side.booleannewStatement(NullPointerState lhs, AbstractOperator<NullPointerState> operator, NullPointerState op1, NullPointerState op2, NullPointerState op3, boolean toWorkList, boolean eager) Add a step with three operands on the right-hand side.booleannewStatement(NullPointerState lhs, UnaryOperator<NullPointerState> operator, NullPointerState rhs, boolean toWorkList, boolean eager) Add a step with one operand on the right-hand side.voidvoidoptional method used for performance debuggingprotected voida method that will be called every N evaluations.voidvoidsetMaxEvalBetweenTopo(int i) voidsetMinEquationsForTopSort(int i) voidsetTopologicalGrowthFactor(double d) booleansolve(MonitorUtil.IProgressMonitor monitor) Solve the set of dataflow graph.toString()
-
Constructor Details
-
NullPointerSolver
-
NullPointerSolver
public NullPointerSolver(NullPointerFrameWork<B> problem, int maxVarNum, B entry, IR ir, ParameterState initialState)
-
-
Method Details
-
makeEdgeVariable
- Specified by:
makeEdgeVariablein classDataflowSolver<B extends ISSABasicBlock, NullPointerState>
-
makeNodeVariable
- Specified by:
makeNodeVariablein classDataflowSolver<B extends ISSABasicBlock, NullPointerState>- Parameters:
n- a node- Returns:
- a fresh variable to represent the lattice value at the IN or OUT of n
-
makeStmtRHS
- Specified by:
makeStmtRHSin classAbstractFixedPointSolver<NullPointerState>
-