class StatementRewriter {

  public AstNode rewrite(final AstNode node, final C context) {
    return rewriter.process(node, context);
  }

    StatementRewriter(
      final BiFunction<Expression, C, Expression> expressionRewriter,
      final BiFunction<AstNode, Context<C>, Optional<AstNode>> plugin);
    StatementRewriter(
      final BiFunction<Expression, C, Expression> expressionRewriter,
      final BiFunction<AstNode, Context<C>, Optional<AstNode>> plugin,
      final BiFunction<AstNode, C, AstNode> rewriter);

}