@Override public List<Statement> simplify() { if (_simplified != null) { return _simplified; } ImmutableList.Builder<Statement> simpleTrueStatementsBuilder = ImmutableList.builder(); ImmutableList.Builder<Statement> simpleFalseStatementsBuilder = ImmutableList.builder(); BooleanExpr simpleGuard = _guard.simplify(); for (Statement trueStatement : _trueStatements) { simpleTrueStatementsBuilder.addAll(trueStatement.simplify()); } List<Statement> simpleTrueStatements = simpleTrueStatementsBuilder.build(); for (Statement falseStatement : _falseStatements) { simpleFalseStatementsBuilder.addAll(falseStatement.simplify()); } List<Statement> simpleFalseStatements = simpleFalseStatementsBuilder.build(); if (simpleGuard.equals(BooleanExprs.TRUE)) { _simplified = simpleTrueStatements; } else if (simpleGuard.equals(BooleanExprs.FALSE)) { _simplified = simpleFalseStatements; } else if (simpleTrueStatements.isEmpty() && simpleFalseStatements.isEmpty()) { _simplified = Collections.emptyList(); } else { If simple = new If(getComment(), simpleGuard, simpleTrueStatements, simpleFalseStatements); _simplified = ImmutableList.of(simple); simple._simplified = _simplified; } return _simplified; } }
boolean atLeastOneComplex = false; for (BooleanExpr conjunct : _conjuncts) { BooleanExpr simpleConjunct = conjunct.simplify(); if (simpleConjunct.equals(BooleanExprs.FALSE)) { atLeastOneFalse = true;
BooleanExpr simpleDisjunct = disjunct.simplify(); if (simpleDisjunct.equals(BooleanExprs.FALSE)) {
@Test public void simplifyTwoStatements() { Disjunction two = new Disjunction(ImmutableList.of(CALL_EXPR_CONTEXT, CALL_STATEMENT_CONTEXT)); BooleanExpr simplified = two.simplify(); assertThat(simplified, allOf(instanceOf(Disjunction.class), equalTo(two))); assertThat(simplified.simplify(), is(simplified)); }