View Javadoc
1   ///////////////////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3   // Copyright (C) 2001-2026 the original author or authors.
4   //
5   // This library is free software; you can redistribute it and/or
6   // modify it under the terms of the GNU Lesser General Public
7   // License as published by the Free Software Foundation; either
8   // version 2.1 of the License, or (at your option) any later version.
9   //
10  // This library is distributed in the hope that it will be useful,
11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  // Lesser General Public License for more details.
14  //
15  // You should have received a copy of the GNU Lesser General Public
16  // License along with this library; if not, write to the Free Software
17  // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  ///////////////////////////////////////////////////////////////////////////////////////////////
19  
20  package com.puppycrawl.tools.checkstyle.checks.javadoc;
21  
22  import com.puppycrawl.tools.checkstyle.StatelessCheck;
23  import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
24  import com.puppycrawl.tools.checkstyle.api.DetailAST;
25  import com.puppycrawl.tools.checkstyle.api.TokenTypes;
26  import com.puppycrawl.tools.checkstyle.utils.JavadocUtil;
27  
28  /**
29   * <div>
30   * Checks that the Javadoc closing delimiter contains exactly one asterisk before
31   * the slash.
32   * </div>
33   *
34   * <p>
35   * The closing delimiter of a Javadoc comment is <code>*&#47;</code>. This check reports
36   * Javadoc comments whose closing delimiter is preceded by another asterisk, such as
37   * <code>**&#47;</code> or <code>***&#47;</code>.
38   * </p>
39   *
40   * @noinspection HtmlTagCanBeJavadocTag
41   * @noinspectionreason HtmlTagCanBeJavadocTag - HTML code tags allow escaping the slash
42   *      in Javadoc delimiter examples without rendering the entity text.
43   * @since 14.1.0
44   */
45  @StatelessCheck
46  public class JavadocEndCommentDelimiterCheck extends AbstractCheck {
47  
48      /**
49       * A key is pointing to the warning message text in "messages.properties"
50       * file.
51       */
52      public static final String MSG_KEY = "javadoc.end.delimiter";
53  
54      /**
55       * Creates a new {@code JavadocEndCommentDelimiterCheck} instance.
56       */
57      public JavadocEndCommentDelimiterCheck() {
58          // no code by default
59      }
60  
61      @Override
62      public int[] getDefaultTokens() {
63          return getRequiredTokens();
64      }
65  
66      @Override
67      public int[] getAcceptableTokens() {
68          return getRequiredTokens();
69      }
70  
71      @Override
72      public int[] getRequiredTokens() {
73          return new int[] {
74              TokenTypes.BLOCK_COMMENT_BEGIN,
75          };
76      }
77  
78      @Override
79      public boolean isCommentNodesRequired() {
80          return true;
81      }
82  
83      @Override
84      public void visitToken(DetailAST ast) {
85          if (JavadocUtil.isJavadocComment(ast)) {
86              final String commentContent = JavadocUtil.getBlockCommentContent(ast);
87  
88              if (commentContent.endsWith("*")) {
89                  log(ast.getLastChild(), MSG_KEY);
90              }
91          }
92      }
93  
94  }