diff --git a/.ci/jsoref-spellchecker/whitelist.words b/.ci/jsoref-spellchecker/whitelist.words index 1287d1daea24..5219fe346de0 100644 --- a/.ci/jsoref-spellchecker/whitelist.words +++ b/.ci/jsoref-spellchecker/whitelist.words @@ -641,6 +641,7 @@ javadocblocktaglocation javadoccontentlocation javadocdetailnodeparser javadocmethod +javadocmissingwhitespaceafterasterisk javadocpackage javadocparagraph javadocpropertiesgenerator diff --git a/config/checkstyle_checks.xml b/config/checkstyle_checks.xml index b339309d5cc2..29eec0307ce9 100644 --- a/config/checkstyle_checks.xml +++ b/config/checkstyle_checks.xml @@ -513,6 +513,7 @@ + diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/PackageObjectFactory.java b/src/main/java/com/puppycrawl/tools/checkstyle/PackageObjectFactory.java index d5820a6a667f..6323aa361602 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/PackageObjectFactory.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/PackageObjectFactory.java @@ -636,6 +636,8 @@ private static void fillChecksFromJavadocPackage() { BASE_PACKAGE + ".checks.javadoc.JavadocContentLocationCheck"); NAME_TO_FULL_MODULE_NAME.put("JavadocMethodCheck", BASE_PACKAGE + ".checks.javadoc.JavadocMethodCheck"); + NAME_TO_FULL_MODULE_NAME.put("JavadocMissingWhitespaceAfterAsteriskCheck", + BASE_PACKAGE + ".checks.javadoc.JavadocMissingWhitespaceAfterAsteriskCheck"); NAME_TO_FULL_MODULE_NAME.put("JavadocPackageCheck", BASE_PACKAGE + ".checks.javadoc.JavadocPackageCheck"); NAME_TO_FULL_MODULE_NAME.put("JavadocParagraphCheck", diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypes.java b/src/main/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypes.java index de1881a95c28..2c0578033476 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypes.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypes.java @@ -460,7 +460,7 @@ public final class JavadocTokenTypes { * *

Example:

*
{@docRoot
-     *}
+ * } * Tree: *
      *   |--JAVADOC_INLINE_TAG[1x0] : [{@docRoot \n}]
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/NewlineAtEndOfFileCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/NewlineAtEndOfFileCheck.java
index ede15cb0ab02..9500003513c9 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/NewlineAtEndOfFileCheck.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/NewlineAtEndOfFileCheck.java
@@ -29,7 +29,7 @@
 import com.puppycrawl.tools.checkstyle.api.FileText;
 
 /**
- *

+ *

* Checks whether files end with a line separator. *

*

diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheck.java index 643b428b109e..f39b95cb2343 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/FinalLocalVariableCheck.java @@ -794,7 +794,7 @@ public Optional findFinalVariableCandidateForAst(DetailA } - /**Represents information about final local variable candidate. */ + /** Represents information about final local variable candidate. */ private static class FinalVariableCandidate { /** Identifier token. */ diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/DesignForExtensionCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/DesignForExtensionCheck.java index 0efea610891c..92b1795a6ade 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/DesignForExtensionCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/design/DesignForExtensionCheck.java @@ -205,7 +205,7 @@ * * public int foo4() {return 4;} // violation * } - *

+ * * * @since 3.1 */ diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/RedundantImportCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/RedundantImportCheck.java index 6c3a1bf3cfa4..4c71e4eeb688 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/RedundantImportCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/RedundantImportCheck.java @@ -33,14 +33,14 @@ * Checks for redundant import statements. An import statement is * considered redundant if: *

- *
    - *
  • It is a duplicate of another import. This is, when a class is imported - * more than once.
  • - *
  • The class non-statically imported is from the {@code java.lang} - * package, e.g. importing {@code java.lang.String}.
  • - *
  • The class non-statically imported is from the same package as the - * current package.
  • - *
+ *
    + *
  • It is a duplicate of another import. This is, when a class is imported + * more than once.
  • + *
  • The class non-statically imported is from the {@code java.lang} + * package, e.g. importing {@code java.lang.String}.
  • + *
  • The class non-statically imported is from the same package as the + * current package.
  • + *
*

* To configure the check: *

diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocContentLocationCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocContentLocationCheck.java index 8b4a9416b2e9..50edadc73f24 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocContentLocationCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocContentLocationCheck.java @@ -110,7 +110,7 @@ * * This comment is OK because it starts from the second line. * */ * /** This comment is OK because it is on the single line. */ - * + * *

* To ensure that Javadoc content starts from the first line: *

diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMissingWhitespaceAfterAsteriskCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMissingWhitespaceAfterAsteriskCheck.java new file mode 100644 index 000000000000..ed888a4b2f47 --- /dev/null +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMissingWhitespaceAfterAsteriskCheck.java @@ -0,0 +1,134 @@ +//////////////////////////////////////////////////////////////////////////////// +// checkstyle: Checks Java source code for adherence to a set of rules. +// Copyright (C) 2001-2020 the original author or authors. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//////////////////////////////////////////////////////////////////////////////// + +package com.puppycrawl.tools.checkstyle.checks.javadoc; + +import com.puppycrawl.tools.checkstyle.StatelessCheck; +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.DetailNode; +import com.puppycrawl.tools.checkstyle.api.JavadocTokenTypes; +import com.puppycrawl.tools.checkstyle.utils.JavadocUtil; +import com.puppycrawl.tools.checkstyle.utils.TokenUtil; + +/** + *

+ * Checks that at there is least one whitespace after the leading asterisk. + *

+ *
    + *
  • + * Property {@code violateExecutionOnNonTightHtml} - Control when to print violations + * if the Javadoc being examined by this check violates the tight html rules defined at + * Tight-HTML Rules. + * Default value is {@code false}. + *
  • + *
+ *

+ * To configure the default check: + *

+ *
+ * <module name="JavadocMissingWhitespaceAfterAsterisk"/>
+ * 
+ *

+ * Code Example: + *

+ *
+ * class TestClass {
+ *   /**
+ *     *This is invalid java doc.
+ *     */
+ *   void invalidJavaDocMethod() {
+ *   }
+  *   /**
+ *     * This is valid java doc.
+ *     */
+ *   void validJavaDocMethod() {
+ *   }
+ *   /**This is invalid single linejava doc. */
+ *   void InvalidSingleLineJavaDocMethod() {
+ *   }
+ * }
+ * 
+ * + * @since 8.31 + */ +@StatelessCheck +public class JavadocMissingWhitespaceAfterAsteriskCheck extends AbstractJavadocCheck { + + /** + * A key is pointing to the warning message text in "messages.properties" file. + */ + public static final String MSG_KEY = "javadoc.missing.whitespace"; + + @Override + public int[] getDefaultJavadocTokens() { + return new int[] { + JavadocTokenTypes.JAVADOC, + JavadocTokenTypes.LEADING_ASTERISK, + }; + } + + @Override + public int[] getAcceptableJavadocTokens() { + return getDefaultJavadocTokens(); + } + + @Override + public int[] getRequiredJavadocTokens() { + return getDefaultJavadocTokens(); + } + + @Override + public void visitJavadocToken(DetailNode detailNode) { + if (detailNode.getType() == JavadocTokenTypes.JAVADOC + && isSingleLineJavadoc(getBlockCommentAst())) { + checkWhitespaceAfterAsterisk(JavadocUtil.getFirstChild(detailNode)); + } + else { + final DetailNode nextSibling = JavadocUtil.getNextSibling(detailNode); + if (nextSibling != null && nextSibling.getType() != JavadocTokenTypes.EOF) { + checkWhitespaceAfterAsterisk(nextSibling); + } + } + } + + /** + * Checks if there is at least one whitespace after leading asterisk. + * + * @param node the node after the leading asterisk. + */ + private void checkWhitespaceAfterAsterisk(DetailNode node) { + final String tagText = node.getText(); + + if (!Character.isWhitespace(tagText.charAt(0))) { + log(node.getLineNumber(), node.getColumnNumber(), MSG_KEY); + } + } + + /** + * Checks if comment is single line comment. + * + * @param blockCommentStart the AST tree in which a block comment starts + * @return true, if comment is single line comment. + */ + private static boolean isSingleLineJavadoc(DetailAST blockCommentStart) { + final DetailAST blockCommentEnd = blockCommentStart.getLastChild(); + return TokenUtil.areOnSameLine(blockCommentStart, blockCommentEnd); + } + +} diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/SummaryJavadocCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/SummaryJavadocCheck.java index 30630939d010..52594cd79eb6 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/SummaryJavadocCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/SummaryJavadocCheck.java @@ -32,7 +32,7 @@ import com.puppycrawl.tools.checkstyle.utils.JavadocUtil; /** - *

+ *

* Checks that * * Javadoc summary sentence does not contain phrases that are not recommended to use. diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/filters/SuppressionXpathFilter.java b/src/main/java/com/puppycrawl/tools/checkstyle/filters/SuppressionXpathFilter.java index 29c505fed1ae..093a81a0df5b 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/filters/SuppressionXpathFilter.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/filters/SuppressionXpathFilter.java @@ -199,6 +199,9 @@ * JavadocBlockTagLocation * *

  • + * JavadocMissingWhitespaceAfterAsterisk + *
  • + *
  • * JavadocParagraph *
  • *
  • diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages.properties b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages.properties index f0881b5f5fae..c0029376a836 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages.properties +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages.properties @@ -13,6 +13,7 @@ javadoc.invalidInheritDoc=Invalid use of the '{'@inheritDoc'}' tag. javadoc.legacyPackageHtml=Legacy package.html file should be removed. javadoc.missed.html.close=Javadoc comment at column {0} has parse error. Missed HTML close tag ''{1}''. Sometimes it means that close tag missed for one of previous tags. javadoc.missing=Missing a Javadoc comment. +javadoc.missing.whitespace=Missing a whitespace after the leading asterisk. javadoc.noPeriod=First sentence should end with a period. javadoc.packageInfo=Missing package-info.java file. javadoc.paragraph.line.before=

    tag should be preceded with an empty line. diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_de.properties b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_de.properties index 54a43a8f57bf..9829cbb343c5 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_de.properties +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_de.properties @@ -13,6 +13,7 @@ javadoc.invalidInheritDoc=Unerlaubte Verwendung des Tags '{'@inheritDoc'}'. javadoc.legacyPackageHtml=Die veraltete Datei package.html sollte entfernt werden. javadoc.missed.html.close=Der Javadoc-Kommentar an Position {0} führt zu einem Parserfehler. Fehlendes schließendes HTML-Tag ''{1}''. Manchmal bedeutet dies, dass das schließende Tag eines vorgehenden Tags fehlt. javadoc.missing=Es fehlt ein Javadoc-Kommentar. +javadoc.missing.whitespace=Nach dem Sternchen fehlt ein Leerzeichen. javadoc.noPeriod=Der erste Satz sollte mit einem Punkt enden. javadoc.packageInfo=Es fehlt eine package-info.java. javadoc.paragraph.line.before=Einem

    -Tag im Javadoc sollte eine leere Zeile vorangestellt werden. diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_es.properties b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_es.properties index 4cf75c105b2b..6fadafa25588 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_es.properties +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_es.properties @@ -13,6 +13,7 @@ javadoc.invalidInheritDoc=Uso no válido del '{'inheritDoc '}' etiqueta. javadoc.legacyPackageHtml=Archivo package.html legado debe ser eliminado. javadoc.missed.html.close=Javadoc comentario en la columna {0} tiene parse error. Perdidas HTML cerca etiqueta ''{1}''. A veces esto significa que cerca de la etiqueta se perdió por una de las etiquetas anteriores. javadoc.missing=Falta el comentario Javadoc. +javadoc.missing.whitespace=Falta un espacio en blanco después del asterisco principal. javadoc.noPeriod=La primera frase debería finalizar con un punto. javadoc.packageInfo=Falta el archivo package-info.java. javadoc.paragraph.line.before=

    etiqueta debe ir precedida de una línea vacía. diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fi.properties b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fi.properties index ddbaddc7af73..9162337168a8 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fi.properties +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fi.properties @@ -13,6 +13,7 @@ javadoc.invalidInheritDoc=Virheellinen käyttö '{'inheritDoc '}' tag. javadoc.legacyPackageHtml=Legacy package.html tiedosto tulisi poistaa. javadoc.missed.html.close=Javadoc kommentti sarakkeessa {0} on Jäsennysvirhe. Missed HTML lähellä tag ''{1}''. Joskus se tarkoittaa, että lähellä tag jäi yhden edellisen tunnisteita. javadoc.missing=Javadoc-kommentti puuttuu. +javadoc.missing.whitespace=Valkoinen tila puuttuu edessä olevan tähden jälkeen. javadoc.noPeriod=Ensimmäinen virke pitäisi päättyä aikana. javadoc.packageInfo=Puuttuu package-info.java tiedosto. javadoc.paragraph.line.before=

    tag pitäisi edeltää tyhjä rivi. diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fr.properties b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fr.properties index 4d0952535d50..b582258a84e9 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fr.properties +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fr.properties @@ -13,6 +13,7 @@ javadoc.invalidInheritDoc=Utilisation invalide de la balise '{'@inheritDoc '}'. javadoc.legacyPackageHtml=L''ancien fichier package.html doit être supprimé. javadoc.missed.html.close=Le commentaire Javadoc à la colonne {0} ne peut être analysé. La balise HTML fermante ''{1}'' n''a pas été trouvée. Parfois, cela signifie qu''une des balises fermantes précédentes est manquante. javadoc.missing=Commentaire Javadoc manquant. +javadoc.missing.whitespace=Manque un espace après l'astérisque de tête. javadoc.noPeriod=La première ligne de la Javadoc doit se terminer avec un point. javadoc.packageInfo=Le fichier package-info.java est manquant. javadoc.paragraph.line.before=La balise

    doit être précédée d''une ligne vide. diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_ja.properties b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_ja.properties index 8b41deae92e6..499840f8ef8f 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_ja.properties +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_ja.properties @@ -13,6 +13,7 @@ javadoc.invalidInheritDoc='{' @inheritDoc '}'タグの使用が無効です。 javadoc.legacyPackageHtml=古い形式のpackage.htmlファイルは削除してください。 javadoc.missed.html.close={0} 桁目の Javadoc コメントでパースエラーが発生しました。HTML タグ ''{1}'' が閉じていません。どこかもっと前のタグが閉じていない可能性もあります。 javadoc.missing=Javadoc コメントがありません。 +javadoc.missing.whitespace=先頭のアスタリスクの後に空白がありません。 javadoc.noPeriod=最初の一文はピリオドで終わらなければなりません。 javadoc.packageInfo=package-info.javaファイルがありません。 javadoc.paragraph.line.before=

    タグの前には空行を入れてください。 diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_pt.properties b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_pt.properties index 08f3e618ed89..c70bbcaa71d8 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_pt.properties +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_pt.properties @@ -13,6 +13,7 @@ javadoc.invalidInheritDoc=Uso inválido da tag '{'inheritDoc '}'. javadoc.legacyPackageHtml=O arquivo package.html legado deve ser removido. javadoc.missed.html.close=O comentário de Javadoc na coluna {0} tem erro sintático. Faltou uma etiqueta de fechamento HTML ''{1}''. Às vezes, isso significa que uma etiqueta de fechamento foi esquecida em uma das etiquetas HTML anteriores. javadoc.missing=Falta o comentário Javadoc. +javadoc.missing.whitespace=Falta um espaço em branco após o asterisco inicial. javadoc.noPeriod=A primeira frase deve acabar num ponto final. javadoc.packageInfo=O arquivo package-info.java está faltando. javadoc.paragraph.line.before=A tag

    deveria ser precedida por uma linha vazia. diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_tr.properties b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_tr.properties index 1e3abcfabda6..a7c8dae599dd 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_tr.properties +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_tr.properties @@ -13,6 +13,7 @@ javadoc.invalidInheritDoc='{'@inheritDoc'}' etiketi kullanımı geçersiz. javadoc.legacyPackageHtml=Eskide kalan package.html dosyaları kaldırılmalı. javadoc.missed.html.close=Sütununda Javadoc comment {0} hatası ayrıştırmak vardır. Cevapsız HTML yakın etiketi ''{1}'' Bazen yakın etiketi önceki etiketler biri için kaçırmış demektir. javadoc.missing=Javadoc açıklaması eksik. +javadoc.missing.whitespace=Önde gelen yıldız işaretinden sonra boşluk bırakma. javadoc.noPeriod=İlk cümle nokta ile bitmeli. javadoc.packageInfo=package-info.java dosyası eksik. javadoc.paragraph.line.before=

    etiketi boş bir çizgi ile gelmelidir. diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_zh.properties b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_zh.properties index 1e2ea4f2b64d..6f44cc2900e2 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_zh.properties +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_zh.properties @@ -13,6 +13,7 @@ javadoc.invalidInheritDoc='{'@inheritDoc'}' 标签使用方式错误。 javadoc.legacyPackageHtml=文件 package.html 应被删除。 javadoc.missed.html.close=Javadoc 第 {0} 个字符解析错误。缺少 HTML 闭合标签: ''{1}''。 有时这代表前一标签未闭合。 javadoc.missing=缺少 Javadoc 。 +javadoc.missing.whitespace=前导星号后缺少空格。 javadoc.noPeriod=Javadoc 首句应以句号结尾。 javadoc.packageInfo=缺少 package-info.java 文件。 javadoc.paragraph.line.before=

    标签前应有空行。 diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMissingWhitespaceAfterAsteriskCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMissingWhitespaceAfterAsteriskCheckTest.java new file mode 100644 index 000000000000..56401076ad9e --- /dev/null +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocMissingWhitespaceAfterAsteriskCheckTest.java @@ -0,0 +1,92 @@ +//////////////////////////////////////////////////////////////////////////////// +// checkstyle: Checks Java source code for adherence to a set of rules. +// Copyright (C) 2001-2020 the original author or authors. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//////////////////////////////////////////////////////////////////////////////// + +package com.puppycrawl.tools.checkstyle.checks.javadoc; + +import static com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocMissingWhitespaceAfterAsteriskCheck.MSG_KEY; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +import org.junit.jupiter.api.Test; + +import com.puppycrawl.tools.checkstyle.AbstractModuleTestSupport; +import com.puppycrawl.tools.checkstyle.DefaultConfiguration; +import com.puppycrawl.tools.checkstyle.api.JavadocTokenTypes; + +public class JavadocMissingWhitespaceAfterAsteriskCheckTest + extends AbstractModuleTestSupport { + + @Override + protected String getPackageLocation() { + return "com/puppycrawl/tools/checkstyle/checks/javadoc" + + + "/javadocmissingwhitespaceafterasterisk"; + } + + @Test + public void testGetDefaultJavadocTokens() { + final JavadocMissingWhitespaceAfterAsteriskCheck checkObj = + new JavadocMissingWhitespaceAfterAsteriskCheck(); + final int[] expected = { + JavadocTokenTypes.JAVADOC, + JavadocTokenTypes.LEADING_ASTERISK, + }; + assertArrayEquals(expected, checkObj.getDefaultJavadocTokens(), + "Default tokens are invalid"); + } + + @Test + public void testGetAcceptableJavadocTokens() { + final JavadocMissingWhitespaceAfterAsteriskCheck checkObj = + new JavadocMissingWhitespaceAfterAsteriskCheck(); + final int[] expected = { + JavadocTokenTypes.JAVADOC, + JavadocTokenTypes.LEADING_ASTERISK, + }; + assertArrayEquals(expected, checkObj.getAcceptableJavadocTokens(), + "Default acceptable tokens are invalid"); + } + + @Test + public void testGetRequiredJavadocTokens() { + final JavadocMissingWhitespaceAfterAsteriskCheck checkObj = + new JavadocMissingWhitespaceAfterAsteriskCheck(); + final int[] expected = { + JavadocTokenTypes.JAVADOC, + JavadocTokenTypes.LEADING_ASTERISK, + }; + assertArrayEquals(expected, checkObj.getRequiredJavadocTokens(), + "Default required tokens are invalid"); + } + + @Test + public void testDefault() throws Exception { + final DefaultConfiguration checkConfig = + createModuleConfig(JavadocMissingWhitespaceAfterAsteriskCheck.class); + final String[] expected = { + "16:7: " + getCheckMessage(MSG_KEY), + "22:7: " + getCheckMessage(MSG_KEY), + "28:7: " + getCheckMessage(MSG_KEY), + "34:7: " + getCheckMessage(MSG_KEY), + "45:8: " + getCheckMessage(MSG_KEY), + "48:8: " + getCheckMessage(MSG_KEY), + }; + verify(checkConfig, getPath("InputJavadocMissingWhitespaceAfterAsterisk.java"), expected); + } + +} diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java index 092a63dfd480..68fe5efcc10b 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java @@ -110,6 +110,7 @@ public class XpathRegressionTest extends AbstractModuleTestSupport { Collections.unmodifiableSet(new HashSet<>(Arrays.asList( "AtclauseOrder", "JavadocBlockTagLocation", + "JavadocMissingWhitespaceAfterAsterisk", "JavadocParagraph", "JavadocTagContinuationIndentation", "MissingDeprecated", diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/javadocmissingwhitespaceafterasterisk/InputJavadocMissingWhitespaceAfterAsterisk.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/javadocmissingwhitespaceafterasterisk/InputJavadocMissingWhitespaceAfterAsterisk.java new file mode 100644 index 000000000000..85e557cac8cd --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/javadoc/javadocmissingwhitespaceafterasterisk/InputJavadocMissingWhitespaceAfterAsterisk.java @@ -0,0 +1,53 @@ +package com.puppycrawl.tools.checkstyle.checks.javadoc.javadocmissingwhitespaceafterasterisk; +class InputJavadocMissingWhitespaceAfterAsterisk +{ + /** + * + * This is ok. + **/ + void foo() {} + + /** + * This is ok. + */ + void foo1() {} + + /** + *This is not ok. + */ + void foo2() {} + + /** + * This is not ok. + *@see Something + */ + void foo3() {} + + /** + * @see + *This is not ok. + */ + void foo4() {} + + /** + *

    +     *This is not ok.
    +     * 
    + */ + void foo5() {} + + /** This is ok. */ + void bar() {} + + /** @see Something */ + void bar1() {} + + /**@see Something*/ + void bar2() {} + + /**This is not ok. */ + void bar4() {} + + /** This is ok. **/ + void bar5() {} +} diff --git a/src/xdocs/checks.xml b/src/xdocs/checks.xml index c441c0206047..1b8a29eeb11e 100644 --- a/src/xdocs/checks.xml +++ b/src/xdocs/checks.xml @@ -404,6 +404,11 @@ JavadocMethod Checks the Javadoc of a method or constructor. + + + JavadocMissingWhitespaceAfterAsterisk + Checks that at there is least one whitespace after the leading asterisk. + JavadocPackage Checks that each Java package has a Javadoc file used for commenting. diff --git a/src/xdocs/config_filters.xml b/src/xdocs/config_filters.xml index 99a90c3a0d4b..2939f2a45db0 100644 --- a/src/xdocs/config_filters.xml +++ b/src/xdocs/config_filters.xml @@ -957,6 +957,7 @@ public class UserService {
    • AtclauseOrder
    • JavadocBlockTagLocation
    • +
    • JavadocMissingWhitespaceAfterAsterisk
    • JavadocParagraph
    • JavadocTagContinuationIndentation
    • MissingDeprecated
    • diff --git a/src/xdocs/config_javadoc.xml b/src/xdocs/config_javadoc.xml index eae1e535bed3..2e1ba494ee32 100644 --- a/src/xdocs/config_javadoc.xml +++ b/src/xdocs/config_javadoc.xml @@ -847,6 +847,116 @@ public void doSomething9(File file) throws IOException { +
      +

      Since Checkstyle 8.31

      + +

      + Checks that at there is least one whitespace after the leading asterisk. +

      +
      + + +
      + + + + + + + + + + + + + + + +
      namedescriptiontypedefault valuesince
      violateExecutionOnNonTightHtml + Control when to print violations if the Javadoc being examined by this check + violates the tight html rules defined at + Tight-HTML Rules.Booleanfalse8.3
      +
      +
      + + +

      + To configure the default check: +

      + +<module name="JavadocMissingWhitespaceAfterAsterisk"/> + +

      + Code Example: +

      + +class TestClass { + /** + *This is invalid java doc. + */ + void invalidJavaDocMethod() { + } + /** + * This is valid java doc. + */ + void validJavaDocMethod() { + } + /**This is invalid single linejava doc. */ + void InvalidSingleLineJavaDocMethod() { + } +} + +
      + + + + + + + +

      + All messages can be customized if the default message doesn't suit you. + Please see the documentation to learn how to. +

      +
      + + +

      + com.puppycrawl.tools.checkstyle.checks.javadoc +

      +
      + + +

      + TreeWalker +

      +
      +
      +

      Since Checkstyle 5.0