docs: @Override
    public Description matchEmptyStatement(EmptyStatementTree tree, VisitorState state) {
      boolean matches = false;
      Tree parent = state.getPath().getParentPath().getLeaf();
      if (parent.getKind() == IF) {
        IfTree parentAsIf = (IfTree) parent;
        matches =
            (parentAsIf.getThenStatement() instanceof EmptyStatementTree)
                && (parentAsIf.getElseStatement() == null);
      }
      if (!matches) {
        return Description.NO_MATCH;
      }
  
      /*
       * We suggest different fixes depending on what follows the parent if statement.
       * If there is no statement following the if, then suggest deleting the whole
       * if statement. If the next statement is a block, then suggest deleting the
       * empty then part of the if.  If the next statement is not a block, then also
       * suggest deleting the empty then part of the if.
       */
      boolean nextStmtIsNull =
          parentNode(nextStatement(Matchers.<StatementTree>isSame(null))).matches(tree, state);
  
      assert (state.getPath().getParentPath().getLeaf().getKind() == IF);
      IfTree ifParent = (IfTree) state.getPath().getParentPath().getLeaf();
      if (nextStmtIsNull) {
        // No following statements. Delete whole if.
        return describeMatch(parent, SuggestedFix.delete(parent));
      } else {
        // There are more statements. Delete the empty then part of the if.
        return describeMatch(
            ifParent.getThenStatement(), SuggestedFix.delete(ifParent.getThenStatement()));
      }
    }