private void handleMultiply(SymbolicValue left, SymbolicValue right) { boolean leftIsZero = isZero(left); if (leftIsZero || isZero(right)) { reuseSymbolicValue(leftIsZero ? left : right); } else if (isNonZero(left) && isNonZero(right)) { deferConstraint(ZeroConstraint.NON_ZERO); } }
public void init(MethodTree methodTree, CFG cfg) { for (SECheck checker : checks) { checker.init(methodTree, cfg); } }
@Override public String toString() { return "Range_" + op.name(); } }
@VisibleForTesting public ExplodedGraphWalker(BehaviorCache behaviorCache, SemanticModel semanticModel) { List<SECheck> checks = Lists.newArrayList(new NullDereferenceCheck(), new DivisionByZeroCheck(), new UnclosedResourcesCheck(), new LocksNotUnlockedCheck(), new NonNullSetToNullCheck(), new NoWayOutLoopCheck()); this.alwaysTrueOrFalseExpressionCollector = new AlwaysTrueOrFalseExpressionCollector(); this.checkerDispatcher = new CheckerDispatcher(this, checks); this.behaviorCache = behaviorCache; this.semanticModel = semanticModel; }
public ExplodedGraphWalker(JavaFileScannerContext context) { alwaysTrueOrFalseChecker = new ConditionAlwaysTrueOrFalseCheck(); this.checkerDispatcher = new CheckerDispatcher(this, context, Lists.<SECheck>newArrayList(alwaysTrueOrFalseChecker, new NullDereferenceCheck(), new UnclosedResourcesCheck(), new LocksNotUnlockedCheck())); }
@Override public ProgramState checkPostStatement(CheckerContext context, Tree syntaxNode) { if (syntaxNode.is(Tree.Kind.ASSIGNMENT)) { handleAssignment(context, (AssignmentExpressionTree) syntaxNode); } return super.checkPostStatement(context, syntaxNode); }
private boolean isConditionUnreachable(ForStatementTree tree) { UpdatesCollector collector = new UpdatesCollector(); tree.accept(collector); ConditionType condition = new ConditionType(tree.condition(), collector); return !condition.isMatched(); } }
public void executeCheckEndOfExecution() { for (SECheck checker : checks) { checker.checkEndOfExecution(this); } }
private void handlePlusMinus(SymbolicValue left, SymbolicValue right) { boolean leftIsZero = isZero(left); if (leftIsZero || isZero(right)) { reuseSymbolicValue(leftIsZero ? right : left); } }
public boolean executeCheckPreStatement(Tree syntaxNode) { this.syntaxNode = syntaxNode; ProgramState ps; for (SECheck checker : checks) { ps = checker.checkPreStatement(this, syntaxNode); if (ps == null) { return false; } explodedGraphWalker.programState = ps; } return true; }
public void executeCheckEndOfExecutionPath(ConstraintManager constraintManager) { for (SECheck checker : checks) { checker.checkEndOfExecutionPath(this, constraintManager); } }
@VisibleForTesting public ExplodedGraphWalker(BehaviorCache behaviorCache, SemanticModel semanticModel) { List<SECheck> checks = Lists.newArrayList(new NullDereferenceCheck(), new DivisionByZeroCheck(), new UnclosedResourcesCheck(), new LocksNotUnlockedCheck(), new NonNullSetToNullCheck(), new NoWayOutLoopCheck()); this.alwaysTrueOrFalseExpressionCollector = new AlwaysTrueOrFalseExpressionCollector(); this.checkerDispatcher = new CheckerDispatcher(this, checks); this.behaviorCache = behaviorCache; this.semanticModel = semanticModel; }
private void handleMultiply(SymbolicValue left, SymbolicValue right) { boolean leftIsZero = isZero(left); if (leftIsZero || isZero(right)) { reuseSymbolicValue(leftIsZero ? left : right); } else if (isNonZero(left) && isNonZero(right)) { deferConstraint(ZeroConstraint.NON_ZERO); } }
public void executeCheckEndOfExecution() { for (SECheck checker : checks) { checker.checkEndOfExecution(this); } }
public void init(MethodTree methodTree, CFG cfg) { for (SECheck checker : checks) { checker.init(methodTree, cfg); } }
private void handlePlusMinus(SymbolicValue left, SymbolicValue right) { boolean leftIsZero = isZero(left); if (leftIsZero || isZero(right)) { reuseSymbolicValue(leftIsZero ? right : left); } }
public boolean executeCheckPreStatement(Tree syntaxNode) { this.syntaxNode = syntaxNode; ProgramState ps; for (SECheck checker : checks) { ps = checker.checkPreStatement(this, syntaxNode); if (ps == null) { return false; } explodedGraphWalker.programState = ps; } return true; }
public void executeCheckEndOfExecutionPath(ConstraintManager constraintManager) { for (SECheck checker : checks) { checker.checkEndOfExecutionPath(this, constraintManager); } }
@Override public String toString() { return "Range_" + op.name(); } }
public void executeCheckEndOfExecution() { for (SECheck checker : checks) { checker.checkEndOfExecution(this); } }