diff --git a/pom.xml b/pom.xml
old mode 100644
new mode 100755
index 8b36fe8e0..a3771a2d0
--- a/pom.xml
+++ b/pom.xml
@@ -160,6 +160,11 @@
antlr
2.7.7
+
+ org.antlr
+ antlr4-runtime
+ 4.3
+
commons-beanutils
commons-beanutils-core
@@ -287,7 +292,7 @@
-
+
org.codehaus.mojo
antlr-maven-plugin
@@ -304,6 +309,25 @@
+
+
+
+ org.antlr
+ antlr4-maven-plugin
+ 4.3
+
+ true
+ ${basedir}/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc
+ ${project.build.directory}/generated-sources/antlr/com/puppycrawl/tools/checkstyle/grammars/javadoc
+
+
+
+
+ antlr4
+
+
+
+
org.codehaus.mojo
@@ -319,14 +343,15 @@
${project.build.directory}/generated-sources/antlr/
+ ${project.build.directory}/generated-sources/antlr/javadoc
-
+
org.apache.maven.plugins
maven-antrun-plugin
@@ -637,7 +662,7 @@
org.apache.maven.plugins
maven-checkstyle-plugin
- checkstyle_checks.xml
+ ${project.build.directory}/checkstyle_checks.xml
checkstyle.suppressions.file
suppressions.xml
java.header
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypes.java b/src/main/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypes.java
new file mode 100644
index 000000000..54c7a9cb9
--- /dev/null
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypes.java
@@ -0,0 +1,264 @@
+////////////////////////////////////////////////////////////////////////////////
+// checkstyle: Checks Java source code for adherence to a set of rules.
+// Copyright (C) 2001-2014 Oliver Burn
+//
+// 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.api;
+
+import com.puppycrawl.tools.checkstyle.grammars.javadoc.JavadocParser;
+
+public final class JavadocTokenTypes
+{
+ private static final int mRuleTypesOffset = 10000;
+
+ // root node
+ public static final int JAVADOC = JavadocParser.RULE_javadoc + mRuleTypesOffset;
+
+ //--------------------------------------------------------------------------------------------//
+ //------------------ JAVADOC TAGS --------------------------------------------//
+ //--------------------------------------------------------------------------------------------//
+
+ public static final int JAVADOC_TAG = JavadocParser.RULE_javadocTag + mRuleTypesOffset;
+ public static final int JAVADOC_INLINE_TAG = JavadocParser.RULE_javadocInlineTag + mRuleTypesOffset;
+
+ public static final int RETURN_LITERAL = JavadocParser.RETURN_LITERAL;
+ public static final int DEPRECATED_LITERAL = JavadocParser.DEPRECATED_LITERAL;
+ public static final int SINCE_LITERAL = JavadocParser.SINCE_LITERAL;
+ public static final int SERIAL_DATA_LITERAL = JavadocParser.SERIAL_DATA_LITERAL;
+ public static final int SERIAL_FIELD_LITERAL = JavadocParser.SERIAL_FIELD_LITERAL;
+ public static final int PARAM_LITERAL = JavadocParser.PARAM_LITERAL;
+ public static final int SEE_LITERAL = JavadocParser.SEE_LITERAL;
+ public static final int SERIAL_LITERAL = JavadocParser.SERIAL_LITERAL;
+ public static final int VERSION_LITERAL = JavadocParser.VERSION_LITERAL;
+ public static final int CUSTOM_NAME = JavadocParser.CUSTOM_NAME;
+ public static final int EXCEPTION_LITERAL = JavadocParser.EXCEPTION_LITERAL;
+ public static final int THROWS_LITERAL = JavadocParser.THROWS_LITERAL;
+ public static final int AUTHOR_LITERAL = JavadocParser.AUTHOR_LITERAL;
+
+ public static final int JAVADOC_INLINE_TAG_START = JavadocParser.JAVADOC_INLINE_TAG_START; // '{'
+ public static final int JAVADOC_INLINE_TAG_END = JavadocParser.JAVADOC_INLINE_TAG_END; // '}'
+
+ public static final int CODE_LITERAL = JavadocParser.CODE_LITERAL;
+ public static final int DOC_ROOT_LITERAL = JavadocParser.DOC_ROOT_LITERAL;
+ public static final int LINK_LITERAL = JavadocParser.LINK_LITERAL;
+ public static final int INHERIT_DOC_LITERAL = JavadocParser.INHERIT_DOC_LITERAL;
+ public static final int LINKPLAIN_LITERAL = JavadocParser.LINKPLAIN_LITERAL;
+ public static final int LITERAL_LITERAL = JavadocParser.LITERAL_LITERAL; // @literal
+ public static final int VALUE_LITERAL = JavadocParser.VALUE_LITERAL;
+
+ // @see and {@link} argument
+ public static final int REFERENCE = JavadocParser.RULE_reference + mRuleTypesOffset;
+
+ // @see and {@link} reference components
+ public static final int PACKAGE = JavadocParser.PACKAGE;
+ public static final int CLASS = JavadocParser.CLASS;
+ public static final int DOT = JavadocParser.DOT;
+ public static final int HASH = JavadocParser.HASH; // #
+ public static final int MEMBER = JavadocParser.MEMBER;
+ public static final int PARAMETERS = JavadocParser.RULE_parameters + mRuleTypesOffset; // parent node for LEFT_BRACE, RIGHT_BRACE, ARGUMENT, COMMA nodes
+ public static final int LEFT_BRACE = JavadocParser.LEFT_BRACE;
+ public static final int RIGHT_BRACE = JavadocParser.RIGHT_BRACE;
+ public static final int ARGUMENT = JavadocParser.ARGUMENT;
+ public static final int COMMA = JavadocParser.COMMA;
+
+ // @see and {@link} argument
+ public static final int STRING = JavadocParser.STRING; // "text"
+
+ // description argument for many Javadoc tags
+ public static final int DESCRIPTION = JavadocParser.RULE_description + mRuleTypesOffset;
+
+ // First argument of @exception: @exception class-name description
+ public static final int CLASS_NAME = JavadocParser.CLASS_NAME;
+
+ // First argument of @param: @param parameter-name description
+ public static final int PARAMETER_NAME = JavadocParser.PARAMETER_NAME;
+
+ // @serial and @serialField arguments
+ public static final int LITERAL_EXCLUDE = JavadocParser.LITERAL_EXCLUDE;
+ public static final int LITERAL_INCLUDE = JavadocParser.LITERAL_INCLUDE;
+ public static final int FIELD_NAME = JavadocParser.FIELD_NAME;
+ public static final int FIELD_TYPE = JavadocParser.FIELD_TYPE;
+
+
+ //--------------------------------------------------------------------------------------------//
+ //------------------ HTML TAGS -----------------------------------------------//
+ //--------------------------------------------------------------------------------------------//
+
+ public static final int HTML_ELEMENT = JavadocParser.RULE_htmlElement + mRuleTypesOffset; // parent node for all html tags
+ public static final int HTML_ELEMENT_OPEN = JavadocParser.RULE_htmlElementOpen + mRuleTypesOffset + mRuleTypesOffset; //
+ public static final int HTML_ELEMENT_CLOSE = JavadocParser.RULE_htmlElementClose + mRuleTypesOffset; //
+
+ public static final int HTML_TAG = JavadocParser.RULE_htmlTag + mRuleTypesOffset; // non-special HTML tag
+ public static final int HTML_TAG_NAME = JavadocParser.HTML_TAG_NAME; // identifier inside HTML tag: tag name or attribute name
+ public static final int ATTRIBUTE = JavadocParser.RULE_attribute + mRuleTypesOffset + mRuleTypesOffset; // html tag attribute. Parent node for: HTML_TAG_IDENT, EQUALS, ATTR_VALUE
+
+ // HTML tag components
+ public static final int OPEN = JavadocParser.OPEN; // '<'
+ public static final int SLASH = JavadocParser.SLASH; // '/'
+ public static final int CLOSE = JavadocParser.CLOSE; // '>'
+ public static final int SLASH_CLOSE = JavadocParser.SLASH_CLOSE; // '/>'
+ public static final int EQUALS = JavadocParser.EQUALS; // '='
+ public static final int ATTR_VALUE = JavadocParser.ATTR_VALUE; // attribute value
+
+ /////////////////////// HTML TAGS WITH OPTIONAL CLOSE TAG /////////////////////////////////////
+ public static final int PARAGRAPH = JavadocParser.RULE_paragraph + mRuleTypesOffset;
+ public static final int P_TAG_OPEN = JavadocParser.RULE_pTagOpen + mRuleTypesOffset;
+ public static final int P_TAG_CLOSE = JavadocParser.RULE_pTagClose + mRuleTypesOffset;
+ public static final int P_HTML_TAG_NAME = JavadocParser.P_HTML_TAG_NAME;
+
+ public static final int LI = JavadocParser.RULE_li + mRuleTypesOffset;
+ public static final int LI_TAG_OPEN = JavadocParser.RULE_liTagOpen + mRuleTypesOffset;
+ public static final int LI_TAG_CLOSE = JavadocParser.RULE_liTagClose + mRuleTypesOffset;
+ public static final int LI_HTML_TAG_NAME = JavadocParser.LI_HTML_TAG_NAME;
+
+ public static final int TR = JavadocParser.RULE_tr + mRuleTypesOffset;
+ public static final int TR_TAG_OPEN = JavadocParser.RULE_trTagOpen + mRuleTypesOffset;
+ public static final int TR_TAG_CLOSE = JavadocParser.RULE_trTagClose + mRuleTypesOffset;
+ public static final int TR_HTML_TAG_NAME = JavadocParser.TR_HTML_TAG_NAME;
+
+ public static final int TD = JavadocParser.RULE_td + mRuleTypesOffset;
+ public static final int TD_TAG_OPEN = JavadocParser.RULE_tdTagOpen + mRuleTypesOffset;
+ public static final int TD_TAG_CLOSE = JavadocParser.RULE_tdTagClose + mRuleTypesOffset;
+ public static final int TD_HTML_TAG_NAME = JavadocParser.TD_HTML_TAG_NAME;
+
+ public static final int TH = JavadocParser.RULE_th + mRuleTypesOffset;
+ public static final int TH_TAG_OPEN = JavadocParser.RULE_thTagOpen + mRuleTypesOffset;
+ public static final int TH_TAG_CLOSE = JavadocParser.RULE_thTagClose + mRuleTypesOffset;
+ public static final int TH_HTML_TAG_NAME = JavadocParser.TH_HTML_TAG_NAME;
+
+ public static final int BODY = JavadocParser.RULE_body + mRuleTypesOffset;
+ public static final int BODY_TAG_OPEN = JavadocParser.RULE_bodyTagOpen + mRuleTypesOffset;
+ public static final int BODY_TAG_CLOSE = JavadocParser.RULE_bodyTagClose + mRuleTypesOffset;
+ public static final int BODY_HTML_TAG_NAME = JavadocParser.BODY_HTML_TAG_NAME;
+
+ public static final int COLGROUP = JavadocParser.RULE_colgroup + mRuleTypesOffset;
+ public static final int COLGROUP_TAG_OPEN = JavadocParser.RULE_colgroupTagOpen + mRuleTypesOffset;
+ public static final int COLGROUP_TAG_CLOSE = JavadocParser.RULE_colgroupTagClose + mRuleTypesOffset;
+ public static final int COLGROUP_HTML_TAG_NAME = JavadocParser.COLGROUP_HTML_TAG_NAME;
+
+ public static final int DD = JavadocParser.RULE_dd + mRuleTypesOffset;
+ public static final int DD_TAG_OPEN = JavadocParser.RULE_ddTagOpen + mRuleTypesOffset;
+ public static final int DD_TAG_CLOSE = JavadocParser.RULE_ddTagClose + mRuleTypesOffset;
+ public static final int DD_HTML_TAG_NAME = JavadocParser.DD_HTML_TAG_NAME;
+
+ public static final int DT = JavadocParser.RULE_dt + mRuleTypesOffset;
+ public static final int DT_TAG_OPEN = JavadocParser.RULE_dtTagOpen + mRuleTypesOffset;
+ public static final int DT_TAG_CLOSE = JavadocParser.RULE_dtTagClose + mRuleTypesOffset;
+ public static final int DT_HTML_TAG_NAME = JavadocParser.DT_HTML_TAG_NAME;
+
+ public static final int HEAD = JavadocParser.RULE_head + mRuleTypesOffset;
+ public static final int HEAD_TAG_OPEN = JavadocParser.RULE_headTagOpen + mRuleTypesOffset;
+ public static final int HEAD_TAG_CLOSE = JavadocParser.RULE_headTagClose + mRuleTypesOffset;
+ public static final int HEAD_HTML_TAG_NAME = JavadocParser.HEAD_HTML_TAG_NAME;
+
+ public static final int HTML = JavadocParser.RULE_html + mRuleTypesOffset;
+ public static final int HTML_TAG_OPEN = JavadocParser.RULE_htmlTagOpen + mRuleTypesOffset;
+ public static final int HTML_TAG_CLOSE = JavadocParser.RULE_htmlTagClose + mRuleTypesOffset;
+ public static final int HTML_HTML_TAG_NAME = JavadocParser.HTML_HTML_TAG_NAME;
+
+ public static final int OPTION = JavadocParser.RULE_option + mRuleTypesOffset;
+ public static final int OPTION_TAG_OPEN = JavadocParser.RULE_optionTagOpen + mRuleTypesOffset;
+ public static final int OPTION_TAG_CLOSE = JavadocParser.RULE_optionTagClose + mRuleTypesOffset;
+ public static final int OPTION_HTML_TAG_NAME = JavadocParser.OPTION_HTML_TAG_NAME;
+
+ public static final int TBODY = JavadocParser.RULE_tbody + mRuleTypesOffset;
+ public static final int TBODY_TAG_OPEN = JavadocParser.RULE_tbodyTagOpen + mRuleTypesOffset;
+ public static final int TBODY_TAG_CLOSE = JavadocParser.RULE_tbodyTagClose + mRuleTypesOffset;
+ public static final int TBODY_HTML_TAG_NAME = JavadocParser.TBODY_HTML_TAG_NAME;
+
+ public static final int TFOOT = JavadocParser.RULE_tfoot + mRuleTypesOffset;
+ public static final int TFOOT_TAG_OPEN = JavadocParser.RULE_tfootTagOpen + mRuleTypesOffset;
+ public static final int TFOOT_TAG_CLOSE = JavadocParser.RULE_tfootTagClose + mRuleTypesOffset;
+ public static final int TFOOT_HTML_TAG_NAME = JavadocParser.TFOOT_HTML_TAG_NAME;
+
+ public static final int THEAD = JavadocParser.RULE_thead + mRuleTypesOffset;
+ public static final int THEAD_TAG_OPEN = JavadocParser.RULE_theadTagOpen + mRuleTypesOffset;
+ public static final int THEAD_TAG_CLOSE = JavadocParser.RULE_theadTagClose + mRuleTypesOffset;
+ public static final int THEAD_HTML_TAG_NAME = JavadocParser.THEAD_HTML_TAG_NAME;
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ /////////////////////// SINGLETON HTML TAGS //////////////////////////////////////////////////
+ public static final int SINGLETON_ELEMENT = JavadocParser.RULE_singletonElement + mRuleTypesOffset; // parent node for all singleton tags
+
+ public static final int SINGLETON_TAG = JavadocParser.RULE_singletonTag + mRuleTypesOffset; // non-special singleton tag
+
+ public static final int AREA_TAG = JavadocParser.RULE_areaTag + mRuleTypesOffset;
+ public static final int AREA_HTML_TAG_NAME = JavadocParser.AREA_HTML_TAG_NAME;
+
+ public static final int BASE_TAG = JavadocParser.RULE_baseTag + mRuleTypesOffset;
+ public static final int BASE_HTML_TAG_NAME = JavadocParser.BASE_HTML_TAG_NAME;
+
+ public static final int BASEFRONT_TAG = JavadocParser.RULE_basefrontTag + mRuleTypesOffset;
+ public static final int BASEFRONT_HTML_TAG_NAME = JavadocParser.BASEFRONT_HTML_TAG_NAME;
+
+ public static final int BR_TAG = JavadocParser.RULE_brTag + mRuleTypesOffset;
+ public static final int BR_HTML_TAG_NAME = JavadocParser.BR_HTML_TAG_NAME;
+
+ public static final int COL_TAG = JavadocParser.RULE_colTag + mRuleTypesOffset;
+ public static final int COL_HTML_TAG_NAME = JavadocParser.COL_HTML_TAG_NAME;
+
+ public static final int FRAME_TAG = JavadocParser.RULE_frameTag + mRuleTypesOffset;
+ public static final int FRAME_HTML_TAG_NAME = JavadocParser.FRAME_HTML_TAG_NAME;
+
+ public static final int HR_TAG = JavadocParser.RULE_hrTag + mRuleTypesOffset;
+ public static final int HR_HTML_TAG_NAME = JavadocParser.HR_HTML_TAG_NAME;
+
+ public static final int IMG_TAG = JavadocParser.RULE_imgTag + mRuleTypesOffset;
+ public static final int IMG_HTML_TAG_NAME = JavadocParser.IMG_HTML_TAG_NAME;
+
+ public static final int INPUT_TAG = JavadocParser.RULE_inputTag + mRuleTypesOffset;
+ public static final int INPUT_HTML_TAG_NAME = JavadocParser.INPUT_HTML_TAG_NAME;
+
+ public static final int ISINDEX_TAG = JavadocParser.RULE_isindexTag + mRuleTypesOffset;
+ public static final int ISINDEX_HTML_TAG_NAME = JavadocParser.ISINDEX_HTML_TAG_NAME;
+
+ public static final int LINK_TAG = JavadocParser.RULE_linkTag + mRuleTypesOffset;
+ public static final int LINK_HTML_TAG_NAME = JavadocParser.LINK_HTML_TAG_NAME;
+
+ public static final int META_TAG = JavadocParser.RULE_metaTag + mRuleTypesOffset;
+ public static final int META_HTML_TAG_NAME = JavadocParser.META_HTML_TAG_NAME;
+
+ public static final int PARAM_TAG = JavadocParser.RULE_paramTag + mRuleTypesOffset;
+ public static final int PARAM_HTML_TAG_NAME = JavadocParser.PARAM_HTML_TAG_NAME;
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+
+ // HTML comments
+ public static final int HTML_COMMENT = JavadocParser.RULE_htmlComment + mRuleTypesOffset + mRuleTypesOffset;
+ public static final int HTML_COMMENT_START = JavadocParser.HTML_COMMENT_START; //
+
+ public static final int CDATA = JavadocParser.CDATA; // ''
+
+ //--------------------------------------------------------------------------------------------//
+ //------------------ OTHER ---------------------------------------------------//
+ //--------------------------------------------------------------------------------------------//
+
+ public static final int LEADING_ASTERISK = JavadocParser.LEADING_ASTERISK;
+ public static final int NEWLINE = JavadocParser.NEWLINE; // \n
+ public static final int CHAR = JavadocParser.CHAR; // any symbol
+ public static final int WS = JavadocParser.WS; // whitespace, \t
+ public static final int TEXT = JavadocParser.RULE_text + mRuleTypesOffset; // CHAR and WS sequence
+
+ public static final int EOF = JavadocParser.EOF; // end of file
+
+
+
+ private JavadocTokenTypes()
+ {
+ }
+
+}
diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/JavadocLexer.g4 b/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/JavadocLexer.g4
new file mode 100755
index 000000000..52c0a7856
--- /dev/null
+++ b/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/JavadocLexer.g4
@@ -0,0 +1,404 @@
+lexer grammar JavadocLexer;
+
+@lexer::header {
+package com.puppycrawl.tools.checkstyle.grammars.javadoc;
+
+import java.util.*;
+}
+
+@lexer::members {
+ boolean recognizeXmlTags = true;
+ boolean isJavadocTagAvailable = true;
+ int insideJavadocInlineTag = 0;
+ boolean insidePreTag = false;
+ boolean referenceCatched = false;
+
+ boolean insideReferenceArguments = false;
+
+ boolean htmlTagNameCatched = false;
+ boolean attributeCatched = false;
+
+ int previousTokenType = 0;
+ int previousToPreviousTokenType = 0;
+
+ public void emit(Token token) {
+ super.emit(token);
+ previousToPreviousTokenType = previousTokenType;
+ previousTokenType = token.getType();
+
+ if (previousTokenType == NEWLINE) {
+ isJavadocTagAvailable = true;
+ } else if (previousTokenType != WS && previousTokenType != LEADING_ASTERISK) {
+ isJavadocTagAvailable = false;
+ }
+ }
+
+ public void skipCurrentTokenConsuming() {
+ _input.seek(_input.index() - 1);
+ }
+
+}
+
+LEADING_ASTERISK : ( (' '|'\t') {_tokenStartCharPositionInLine == 0}? ) (' '|'\t')* '*'
+ | '*' {_tokenStartCharPositionInLine == 0}?
+ ;
+
+HTML_COMMENT_START : '' -> mode(DEFAULT_MODE);
+LeadingAst: LEADING_ASTERISK -> type(LEADING_ASTERISK);
+Newline6: NEWLINE -> type(NEWLINE);
+WhiteSpace: WS -> type(WS);
+CommentChar: . -> type(CHAR);
\ No newline at end of file
diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/JavadocParser.g4 b/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/JavadocParser.g4
new file mode 100755
index 000000000..cfde119cf
--- /dev/null
+++ b/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/JavadocParser.g4
@@ -0,0 +1,908 @@
+parser grammar JavadocParser;
+
+options { tokenVocab=JavadocLexer; }
+
+@parser::header {
+package com.puppycrawl.tools.checkstyle.grammars.javadoc;
+}
+
+@parser::members {
+ boolean isNextJavadocTag() {
+ int token1 = _input.LA(2);
+ int token2 = _input.LA(3);
+ return isJavadocTag(token1)
+ || (token1 == WS && isJavadocTag(token2));
+ }
+
+ boolean isJavadocTag(int type) {
+ switch(type) {
+ case AUTHOR_LITERAL:
+ case DEPRECATED_LITERAL:
+ case EXCEPTION_LITERAL:
+ case PARAM_LITERAL:
+ case RETURN_LITERAL:
+ case SEE_LITERAL:
+ case SERIAL_LITERAL:
+ case SERIAL_FIELD_LITERAL:
+ case SERIAL_DATA_LITERAL:
+ case SINCE_LITERAL:
+ case THROWS_LITERAL:
+ case VERSION_LITERAL:
+ case CUSTOM_NAME:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ boolean isSameTagNames(ParserRuleContext htmlTagOpen, ParserRuleContext htmlTagClose) {
+ String openTag = htmlTagOpen.getToken(HTML_TAG_NAME, 0).getText().toLowerCase();
+ String closeTag = htmlTagClose.getToken(HTML_TAG_NAME, 0).getText().toLowerCase();
+ System.out.println(openTag + " - " + closeTag);
+ return openTag.equals(closeTag);
+ }
+}
+
+javadoc: (
+ htmlElement
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag
+ )*
+ (LEADING_ASTERISK? WS* javadocTag)*
+ EOF;
+
+htmlElement: htmlTag
+ | singletonElement
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+
+ | pTagClose
+ | liTagClose
+ | trTagClose
+ | tdTagClose
+ | thTagClose
+ | bodyTagClose
+ | colgroupTagClose
+ | ddTagClose
+ | dtTagClose
+ | headTagClose
+ | htmlTagClose
+ | optionTagClose
+ | tbodyTagClose
+ | theadTagClose
+ | tfootTagClose
+ ;
+
+htmlElementOpen: OPEN HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+htmlElementClose: OPEN SLASH HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+attribute: HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* EQUALS (NEWLINE | LEADING_ASTERISK | WS)* (ATTR_VALUE | text | HTML_TAG_NAME);
+
+htmlTag: htmlElementOpen (htmlElement
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)* htmlElementClose //{isSameTagNames($htmlElementOpen.ctx, $htmlElementClose.ctx)}?
+
+ | htmlElementOpen (htmlElement
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ {notifyErrorListeners($htmlElementOpen.ctx.getToken(HTML_TAG_NAME, 0).getSymbol(), "javadoc.missed.html.close", null);}
+ ;
+
+//////////////////////////////////////////////////////////////////////////////////////
+//////////////////// HTML TAGS WITH OPTIONAL END TAG ////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////
+pTagOpen: OPEN P_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+pTagClose: OPEN SLASH P_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+paragraph: pTagOpen
+ (htmlTag
+ | singletonTag
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ pTagClose
+ ;
+
+liTagOpen: OPEN LI_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+liTagClose: OPEN SLASH LI_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+li: liTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ liTagClose
+ ;
+
+trTagOpen: OPEN TR_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+trTagClose: OPEN SLASH TR_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+tr: trTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ trTagClose
+ ;
+
+tdTagOpen: OPEN TD_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+tdTagClose: OPEN SLASH TD_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+td: tdTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ tdTagClose
+ ;
+
+thTagOpen: OPEN TH_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+thTagClose: OPEN SLASH TH_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+th: thTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ thTagClose
+ ;
+
+bodyTagOpen: OPEN BODY_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+bodyTagClose: OPEN SLASH BODY_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+body: bodyTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ bodyTagClose
+ ;
+
+colgroupTagOpen: OPEN COLGROUP_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+colgroupTagClose: OPEN SLASH COLGROUP_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+colgroup: colgroupTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ colgroupTagClose
+ ;
+
+ddTagOpen: OPEN DD_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+ddTagClose: OPEN SLASH DD_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+dd: ddTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ ddTagClose
+ ;
+
+dtTagOpen: OPEN DT_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+dtTagClose: OPEN SLASH DT_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+dt: dtTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ dtTagClose
+ ;
+
+headTagOpen: OPEN HEAD_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+headTagClose: OPEN SLASH HEAD_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+head: headTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | html
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ headTagClose
+ ;
+
+htmlTagOpen: OPEN HTML_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+htmlTagClose: OPEN SLASH HTML_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+html: htmlTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | option
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ htmlTagClose
+ ;
+
+optionTagOpen: OPEN OPTION_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+optionTagClose: OPEN SLASH OPTION_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+option: optionTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | tbody
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ optionTagClose
+ ;
+
+tbodyTagOpen: OPEN TBODY_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+tbodyTagClose: OPEN SLASH TBODY_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+tbody: tbodyTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | thead
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | theadTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ tbodyTagClose
+ ;
+
+tfootTagOpen: OPEN TFOOT_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+tfootTagClose: OPEN SLASH TFOOT_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+tfoot: tfootTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | thead
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | theadTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ tfootTagClose
+ ;
+
+theadTagOpen: OPEN THEAD_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+theadTagClose: OPEN SLASH THEAD_HTML_TAG_NAME (NEWLINE | LEADING_ASTERISK | WS)* CLOSE;
+thead: theadTagOpen
+ (htmlTag
+ | singletonTag
+ | paragraph
+ | li
+ | tr
+ | td
+ | th
+ | body
+ | colgroup
+ | dd
+ | dt
+ | head
+ | html
+ | option
+ | tbody
+ | tfoot
+ | pTagOpen
+ | liTagOpen
+ | trTagOpen
+ | tdTagOpen
+ | thTagOpen
+ | bodyTagOpen
+ | colgroupTagOpen
+ | ddTagOpen
+ | dtTagOpen
+ | headTagOpen
+ | htmlTagOpen
+ | optionTagOpen
+ | tbodyTagOpen
+ | tfootTagOpen
+ | ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag)*
+ theadTagClose
+ ;
+
+//////////////////////////////////////////////////////////////////////////////////////
+////////////////////////// SINLETON HTML TAGS //////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////
+singletonElement: singletonTag
+ | areaTag
+ | baseTag
+ | basefrontTag
+ | brTag
+ | colTag
+ | frameTag
+ | hrTag
+ | imgTag
+ | inputTag
+ | isindexTag
+ | linkTag
+ | metaTag
+ | paramTag
+
+ | wrongSinletonTag
+ ;
+
+singletonTag: OPEN
+ (
+ HTML_TAG_NAME
+ | P_HTML_TAG_NAME
+ | LI_HTML_TAG_NAME
+ | TR_HTML_TAG_NAME
+ | TD_HTML_TAG_NAME
+ | TH_HTML_TAG_NAME
+ | BODY_HTML_TAG_NAME
+ | COLGROUP_HTML_TAG_NAME
+ | DD_HTML_TAG_NAME
+ | DT_HTML_TAG_NAME
+ | HEAD_HTML_TAG_NAME
+ | HTML_HTML_TAG_NAME
+ | OPTION_HTML_TAG_NAME
+ | TBODY_HTML_TAG_NAME
+ | TFOOT_HTML_TAG_NAME
+ | THEAD_HTML_TAG_NAME
+ )
+ (attribute | NEWLINE | LEADING_ASTERISK | WS)* SLASH_CLOSE;
+
+areaTag: OPEN AREA_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+baseTag: OPEN BASE_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+basefrontTag: OPEN BASEFRONT_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+brTag: OPEN BR_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+colTag: OPEN COL_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+frameTag: OPEN FRAME_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+hrTag: OPEN HR_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+imgTag: OPEN IMG_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+inputTag: OPEN INPUT_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+isindexTag: OPEN ISINDEX_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+linkTag: OPEN LINK_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+metaTag: OPEN META_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+paramTag: OPEN PARAM_HTML_TAG_NAME (attribute | NEWLINE | LEADING_ASTERISK | WS)* (SLASH_CLOSE | CLOSE);
+
+wrongSinletonTag: OPEN SLASH singletonTagName CLOSE {notifyErrorListeners($singletonTagName.start, "javadoc.wrong.singleton.html.tag", null);}
+ ;
+singletonTagName: (AREA_HTML_TAG_NAME
+ | BASE_HTML_TAG_NAME
+ | BASEFRONT_HTML_TAG_NAME
+ | BR_HTML_TAG_NAME
+ | COL_HTML_TAG_NAME
+ | FRAME_HTML_TAG_NAME
+ | HR_HTML_TAG_NAME
+ | IMG_HTML_TAG_NAME
+ | INPUT_HTML_TAG_NAME
+ | ISINDEX_HTML_TAG_NAME
+ | LINK_HTML_TAG_NAME
+ | META_HTML_TAG_NAME
+ | PARAM_HTML_TAG_NAME
+ )
+ ;
+
+
+//////////////////////////////////////////////////////////////////////////////////////
+////////////////////////// JAVADOC TAGS ////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////
+description: (
+ ({!isNextJavadocTag()}? LEADING_ASTERISK)
+ | htmlComment
+ | CDATA
+ | NEWLINE
+ | text
+ | javadocInlineTag
+ | htmlElement
+ )+;
+
+reference:
+ (
+ PACKAGE (DOT | CLASS)* HASH? MEMBER? parameters?
+ | (DOT | CLASS)+ HASH? MEMBER? parameters?
+ | HASH? MEMBER parameters?
+ )
+ ;
+parameters: LEFT_BRACE (ARGUMENT | COMMA | WS | NEWLINE | LEADING_ASTERISK)* RIGHT_BRACE;
+
+javadocTag: AUTHOR_LITERAL (WS | NEWLINE)* description?
+
+ | DEPRECATED_LITERAL (WS | NEWLINE)* description?
+
+ | EXCEPTION_LITERAL (WS | NEWLINE)* CLASS_NAME? (WS | NEWLINE)* description?
+
+ | PARAM_LITERAL (WS | NEWLINE)* PARAMETER_NAME? (WS | NEWLINE)* description?
+
+ | RETURN_LITERAL (WS | NEWLINE)* description?
+
+ | SEE_LITERAL (WS | NEWLINE)* reference? (STRING | htmlElement)* (WS | NEWLINE)* description?
+
+ | SERIAL_LITERAL (WS | NEWLINE)* (LITERAL_INCLUDE | LITERAL_EXCLUDE)? description?
+
+ | SERIAL_DATA_LITERAL (WS | NEWLINE)* description?
+
+ | SERIAL_FIELD_LITERAL (WS | NEWLINE)* FIELD_NAME? (WS | NEWLINE)* FIELD_TYPE? (WS | NEWLINE)* description?
+
+ | SINCE_LITERAL (WS | NEWLINE)* description?
+
+ | THROWS_LITERAL (WS | NEWLINE)* CLASS_NAME? (WS | NEWLINE)* description?
+
+ | VERSION_LITERAL (WS | NEWLINE)* description?
+
+ | CUSTOM_NAME (WS | NEWLINE)* description?
+ ;
+//////////////////////////////////////////////////////////////////////////////////////
+////////////////////////// JAVADOC INLINE TAGS /////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////
+javadocInlineTag:
+ JAVADOC_INLINE_TAG_START
+ (
+ CODE_LITERAL (WS | NEWLINE | LEADING_ASTERISK | text)*
+ | DOC_ROOT_LITERAL (WS | NEWLINE | LEADING_ASTERISK)*
+ | INHERIT_DOC_LITERAL (WS | NEWLINE | LEADING_ASTERISK)*
+ | LINK_LITERAL (WS | NEWLINE | LEADING_ASTERISK)* reference description?
+ | LINKPLAIN_LITERAL (WS | NEWLINE | LEADING_ASTERISK)* reference description?
+ | LITERAL_LITERAL (WS | NEWLINE | LEADING_ASTERISK | text)*
+ | VALUE_LITERAL (WS | NEWLINE | LEADING_ASTERISK)* reference?
+ | CUSTOM_NAME (WS | NEWLINE | LEADING_ASTERISK)+ description?
+ )
+ JAVADOC_INLINE_TAG_END
+ ;
+
+
+htmlComment: HTML_COMMENT_START (text | NEWLINE | LEADING_ASTERISK)* HTML_COMMENT_END;
+
+text : (CHAR | WS)+ ;
diff --git a/suppressions.xml b/suppressions.xml
index 0b308956c..19588037a 100644
--- a/suppressions.xml
+++ b/suppressions.xml
@@ -53,4 +53,6 @@
+
+