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 @@ + +