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 index bca7ec8a9..978b42e11 100755 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/JavadocLexer.g4 +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/JavadocLexer.g4 @@ -94,7 +94,7 @@ CHAR : . ; ////////////////////////////////////////////////////////////////////////////////////// mode param; Space0: WS -> type(WS); -PARAMETER_NAME: [a-zA-Z0-9<>_-]+ -> mode(DEFAULT_MODE); +PARAMETER_NAME: [a-zA-Z0-9<>_$]+ -> mode(DEFAULT_MODE); Char1: . { skipCurrentTokenConsuming(); @@ -120,10 +120,10 @@ Newline5: NEWLINE Leading_asterisk3: LEADING_ASTERISK -> type(LEADING_ASTERISK); XmlTagOpen1: '<' -> type(OPEN), pushMode(xmlTagDefinition); STRING: '"' .*? '"' {referenceCatched = false;} -> mode(DEFAULT_MODE); -PACKAGE: [a-z] ([a-z_-] | '.')+ [a-z_-] {referenceCatched = true;}; +PACKAGE: [a-z$] ([a-z_$] | '.')+ [a-z_$] {referenceCatched = true;}; DOT: '.'; HASH: '#' {referenceCatched = true;} -> mode(classMemeber); -CLASS: [A-Z] [a-zA-Z0-9_-]* {referenceCatched = true;}; +CLASS: [A-Z] [a-zA-Z0-9_$]* {referenceCatched = true;}; End20: JAVADOC_INLINE_TAG_END { insideJavadocInlineTag--; @@ -141,10 +141,10 @@ Char2: . ////////////////////////////////////////////////////////////////////////////////////// mode classMemeber; -MEMBER: [a-zA-Z0-9_-]+ {!insideReferenceArguments}?; +MEMBER: [a-zA-Z0-9_$]+ {!insideReferenceArguments}?; LEFT_BRACE: '(' {insideReferenceArguments=true;}; RIGHT_BRACE: ')' {insideReferenceArguments=false;}; -ARGUMENT: ([a-zA-Z0-9_-] | '.' | '[' | ']')+ {insideReferenceArguments}?; +ARGUMENT: ([a-zA-Z0-9_$] | '.' | '[' | ']')+ {insideReferenceArguments}?; COMMA: ',' {insideReferenceArguments}?; Leading_asterisk6: LEADING_ASTERISK { @@ -188,7 +188,7 @@ Char20: . ////////////////////////////////////////////////////////////////////////////////////// mode serialField; Space2: WS -> type(WS); -FIELD_NAME: [a-zA-Z0-9_-]+ -> mode(serialFieldFieldType); +FIELD_NAME: [a-zA-Z0-9_$]+ -> mode(serialFieldFieldType); Char3: . { skipCurrentTokenConsuming(); @@ -198,7 +198,7 @@ Char3: . ////////////////////////////////////////////////////////////////////////////////////// mode serialFieldFieldType; Space3: WS -> type(WS); -FIELD_TYPE: [a-zA-Z0-9_-]+ -> mode(DEFAULT_MODE); +FIELD_TYPE: [a-zA-Z0-9_$]+ -> mode(DEFAULT_MODE); Char4: . { skipCurrentTokenConsuming(); @@ -206,7 +206,7 @@ Char4: . ////////////////////////////////////////////////////////////////////////////////////// mode exception; Space4: WS -> type(WS); -CLASS_NAME: ([a-zA-Z0-9_-] | '.')+ -> mode(DEFAULT_MODE); +CLASS_NAME: ([a-zA-Z0-9_$] | '.')+ -> mode(DEFAULT_MODE); Char5: . { skipCurrentTokenConsuming(); diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocParseTreeTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocParseTreeTest.java index 6831e96d4..8f8ea61dd 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocParseTreeTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocParseTreeTest.java @@ -281,6 +281,16 @@ public class JavadocParseTreeTest compareTrees(expectedTree, generatedTree); } + @Test + public void dollarInLink() + throws IOException + { + String filename = folderWithInputFiles + "/javadocTags/DollarInLink.txt"; + ParseTree generatedTree = parseJavadoc(getFileContent(new File(filename))); + ParseTree expectedTree = ParseTreeBuilder.treeDollarInLink(); + compareTrees(expectedTree, generatedTree); + } + private void compareTrees(ParseTree t1, ParseTree t2) { Assert.assertEquals(t1.toStringTree(parser), t2.toStringTree(parser)); diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/ParseTreeBuilder.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/ParseTreeBuilder.java index 85cbe184c..5b42b9a30 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/ParseTreeBuilder.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/ParseTreeBuilder.java @@ -2428,4 +2428,45 @@ public class ParseTreeBuilder vfDcF.addChild(rrjXS); return vfDcF; } + + public static ParseTree treeDollarInLink() + { + JavadocContext yCrNh = new JavadocContext(null, 0); + JavadocInlineTagContext yZEPk = new JavadocInlineTagContext(yCrNh, 0); + CommonToken QaRFV = new CommonToken(JavadocTokenTypes.JAVADOC_INLINE_TAG_START, "{"); + yZEPk.addChild(QaRFV); + CommonToken LnzvV = new CommonToken(JavadocTokenTypes.LINK_LITERAL, "@link"); + yZEPk.addChild(LnzvV); + CommonToken WcdhT = new CommonToken(JavadocTokenTypes.WS, " "); + yZEPk.addChild(WcdhT); + ReferenceContext yPHKq = new ReferenceContext(yZEPk, 0); + CommonToken tfKuW = new CommonToken(JavadocTokenTypes.CLASS, "My$Class"); + yPHKq.addChild(tfKuW); + CommonToken asCBP = new CommonToken(JavadocTokenTypes.HASH, "#"); + yPHKq.addChild(asCBP); + CommonToken VfpBA = new CommonToken(JavadocTokenTypes.MEMBER, "$$simple_$Method"); + yPHKq.addChild(VfpBA); + ParametersContext zUjHC = new ParametersContext(yPHKq, 0); + CommonToken evbHg = new CommonToken(JavadocTokenTypes.LEFT_BRACE, "("); + zUjHC.addChild(evbHg); + CommonToken mpzxn = new CommonToken(JavadocTokenTypes.ARGUMENT, "_A78"); + zUjHC.addChild(mpzxn); + CommonToken kOOdW = new CommonToken(JavadocTokenTypes.COMMA, ","); + zUjHC.addChild(kOOdW); + CommonToken LvnuO = new CommonToken(JavadocTokenTypes.WS, " "); + zUjHC.addChild(LvnuO); + CommonToken IScAu = new CommonToken(JavadocTokenTypes.ARGUMENT, "$8$"); + zUjHC.addChild(IScAu); + CommonToken aULsN = new CommonToken(JavadocTokenTypes.RIGHT_BRACE, ")"); + zUjHC.addChild(aULsN); + yPHKq.addChild(zUjHC); + yZEPk.addChild(yPHKq); + CommonToken DCMuM = new CommonToken(JavadocTokenTypes.JAVADOC_INLINE_TAG_END, "}"); + yZEPk.addChild(DCMuM); + yCrNh.addChild(yZEPk); + CommonToken AcQbE = new CommonToken(JavadocTokenTypes.EOF, ""); + yCrNh.addChild(AcQbE); + return yCrNh; + } + } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/javadocTags/DollarInLink.txt b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/javadocTags/DollarInLink.txt new file mode 100644 index 000000000..622f30cb9 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/grammars/javadoc/javadocTags/DollarInLink.txt @@ -0,0 +1 @@ +{@link My$Class#$$simple_$Method(_A78, $8$)} \ No newline at end of file