code: private Statement statement(final Statement base) {
          return new Statement() {
              @Override
              public void evaluate() throws Throwable {
                  before();
                  doStateTransition(State.BEFORE_EXECUTED);
                  try {
                      base.evaluate();
                  } finally {
                      after();
                      doStateTransition(State.AFTER_EXECUTED);
                  }
              }
          };
      }
docs: Creates a statement that will execute {@code before) and {@code after)
  
  @param base
  the base statement to be executed
  @return
  the statement for invoking before and after