public class AvoidEscapedUnicodeCharactersCheck extends AbstractCheck
Restricts using Unicode escapes (such as \u221e). It is possible to allow using escapes for non-printable, control characters. Also, this check can be configured to allow using escapes if trail comment is present. By the option it is possible to allow using escapes if literal contains only them.
allowEscapesForControlCharacters - Allow use escapes for
non-printable, control characters.
Type is boolean.
Default value is false.
allowByTailComment - Allow use escapes if trail comment is present.
Type is boolean.
Default value is false.
allowIfAllCharactersEscaped - Allow if all characters in literal are escaped.
Type is boolean.
Default value is false.
allowNonPrintableEscapes - Allow use escapes for
non-printable, whitespace characters.
Type is boolean.
Default value is false.
To configure the check:
<module name="AvoidEscapedUnicodeCharacters"/>
Examples of using Unicode:
String unitAbbrev = "μs"; // OK, perfectly clear even without a comment.
String unitAbbrev = "\u03bcs";// violation, the reader has no idea what this is.
return '\ufeff' + content; // OK, an example of non-printable,
// control characters (byte order mark).
An example of how to configure the check to allow using escapes for non-printable, control characters:
<module name="AvoidEscapedUnicodeCharacters"> <property name="allowEscapesForControlCharacters" value="true"/> </module>
Example of using escapes for non-printable, control characters:
String unitAbbrev = "μs"; // OK, a normal String String unitAbbrev = "\u03bcs"; // violation, "\u03bcs" is a printable character. return '\ufeff' + content; // OK, non-printable control character.
An example of how to configure the check to allow using escapes if trail comment is present:
<module name="AvoidEscapedUnicodeCharacters"> <property name="allowByTailComment" value="true"/> </module>
Example of using escapes if trail comment is present:
String unitAbbrev = "μs"; // OK, a normal String String unitAbbrev = "\u03bcs"; // OK, Greek letter mu, "s" return '\ufeff' + content; // -----^--------------------- violation, comment is not used within same line.
An example of how to configure the check to allow if all characters in literal are escaped.
<module name="AvoidEscapedUnicodeCharacters"> <property name="allowIfAllCharactersEscaped" value="true"/> </module>
Example of using escapes if all characters in literal are escaped:
String unitAbbrev = "μs"; // OK, a normal String
String unitAbbrev = "\u03bcs"; // violation, not all characters are escaped ('s').
String unitAbbrev = "\u03bc\u03bc\u03bc"; // OK
String unitAbbrev = "\u03bc\u03bcs";// violation, not all characters are escaped ('s').
return '\ufeff' + content; // OK, all control characters are escaped
An example of how to configure the check to allow using escapes for non-printable whitespace characters:
<module name="AvoidEscapedUnicodeCharacters"> <property name="allowNonPrintableEscapes" value="true"/> </module>
Example of using escapes for non-printable whitespace characters:
String unitAbbrev = "μs"; // OK, a normal String String unitAbbrev1 = "\u03bcs"; // violation, printable escape character. String unitAbbrev2 = "\u03bc\u03bc\u03bc"; // violation, printable escape character. String unitAbbrev3 = "\u03bc\u03bcs";// violation, printable escape character. return '\ufeff' + content; // OK, non-printable escape character.
Parent is com.puppycrawl.tools.checkstyle.TreeWalker
Violation Message Keys:
forbid.escaped.unicode.char
AutomaticBean.OutputStreamOptions| Modifier and Type | Field and Description |
|---|---|
private static java.util.regex.Pattern |
ALL_ESCAPED_CHARS
Regular expression for all escaped chars.
|
private boolean |
allowByTailComment
Allow use escapes if trail comment is present.
|
private boolean |
allowEscapesForControlCharacters
Allow use escapes for non-printable, control characters.
|
private boolean |
allowIfAllCharactersEscaped
Allow if all characters in literal are escaped.
|
private boolean |
allowNonPrintableEscapes
Allow use escapes for non-printable, whitespace characters.
|
private java.util.Map<java.lang.Integer,java.util.List<TextBlock>> |
blockComments
C style comments.
|
private static java.util.regex.Pattern |
ESCAPED_BACKSLASH
Regular expression for escaped backslash.
|
static java.lang.String |
MSG_KEY
A key is pointing to the warning message text in "messages.properties"
file.
|
private static java.util.regex.Pattern |
NON_PRINTABLE_CHARS
Regular expression for non-printable unicode chars.
|
private java.util.Map<java.lang.Integer,TextBlock> |
singlelineComments
Cpp style comments.
|
private static java.util.regex.Pattern |
UNICODE_CONTROL
Regular expression Unicode control characters.
|
private static java.util.regex.Pattern |
UNICODE_REGEXP
Regular expression for Unicode chars.
|
| Constructor and Description |
|---|
AvoidEscapedUnicodeCharactersCheck() |
| Modifier and Type | Method and Description |
|---|---|
void |
beginTree(DetailAST rootAST)
Called before the starting to process a tree.
|
private static int |
countMatches(java.util.regex.Pattern pattern,
java.lang.String target)
Count regexp matches into String literal.
|
int[] |
getAcceptableTokens()
The configurable token set.
|
int[] |
getDefaultTokens()
Returns the default token a check is interested in.
|
int[] |
getRequiredTokens()
The tokens that this check must be registered for.
|
private boolean |
hasTrailComment(DetailAST ast)
Check if trail comment is present after ast token.
|
private static boolean |
hasUnicodeChar(java.lang.String literal)
Checks if literal has Unicode chars.
|
private boolean |
isAllCharactersEscaped(java.lang.String literal)
Checks if all characters in String literal is escaped.
|
private static boolean |
isOnlyUnicodeValidChars(java.lang.String literal,
java.util.regex.Pattern pattern)
Check if String literal contains Unicode control chars.
|
private static boolean |
isTrailingBlockComment(TextBlock comment,
int... codePoints)
Whether the C style comment is trailing.
|
void |
setAllowByTailComment(boolean allow)
Setter to allow use escapes if trail comment is present.
|
void |
setAllowEscapesForControlCharacters(boolean allow)
Setter to allow use escapes for non-printable, control characters.
|
void |
setAllowIfAllCharactersEscaped(boolean allow)
Setter to allow if all characters in literal are escaped.
|
void |
setAllowNonPrintableEscapes(boolean allow)
Setter to allow use escapes for non-printable, whitespace characters.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
clearViolations, destroy, finishTree, getFileContents, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, init, isCommentNodesRequired, leaveToken, log, log, log, setFileContents, setTabWidth, setTokensfinishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverityconfigure, contextualize, getConfiguration, setupChildpublic static final java.lang.String MSG_KEY
private static final java.util.regex.Pattern UNICODE_REGEXP
private static final java.util.regex.Pattern UNICODE_CONTROL
private static final java.util.regex.Pattern ALL_ESCAPED_CHARS
private static final java.util.regex.Pattern ESCAPED_BACKSLASH
private static final java.util.regex.Pattern NON_PRINTABLE_CHARS
private java.util.Map<java.lang.Integer,TextBlock> singlelineComments
private java.util.Map<java.lang.Integer,java.util.List<TextBlock>> blockComments
private boolean allowEscapesForControlCharacters
private boolean allowByTailComment
private boolean allowIfAllCharactersEscaped
private boolean allowNonPrintableEscapes
public AvoidEscapedUnicodeCharactersCheck()
public final void setAllowEscapesForControlCharacters(boolean allow)
allow - user's value.public final void setAllowByTailComment(boolean allow)
allow - user's value.public final void setAllowIfAllCharactersEscaped(boolean allow)
allow - user's value.public final void setAllowNonPrintableEscapes(boolean allow)
allow - user's value.public int[] getDefaultTokens()
AbstractCheckgetDefaultTokens in class AbstractCheckTokenTypespublic int[] getAcceptableTokens()
AbstractCheckgetAcceptableTokens in class AbstractCheckTokenTypespublic int[] getRequiredTokens()
AbstractCheckgetRequiredTokens in class AbstractCheckTokenTypespublic void beginTree(DetailAST rootAST)
AbstractCheckbeginTree in class AbstractCheckrootAST - the root of the treepublic void visitToken(DetailAST ast)
AbstractCheckvisitToken in class AbstractCheckast - the token to processprivate static boolean hasUnicodeChar(java.lang.String literal)
literal - String literal.private static boolean isOnlyUnicodeValidChars(java.lang.String literal, java.util.regex.Pattern pattern)
literal - String literal.pattern - RegExp for valid characters.private boolean hasTrailComment(DetailAST ast)
ast - current token.private static boolean isTrailingBlockComment(TextBlock comment, int... codePoints)
comment - the comment to check.codePoints - the first line of the comment, in unicode code pointsprivate static int countMatches(java.util.regex.Pattern pattern, java.lang.String target)
pattern - pattern.target - String literal.private boolean isAllCharactersEscaped(java.lang.String literal)
literal - current literal.Copyright © 2001-2022. All Rights Reserved.