public class AvoidEscapedUnicodeCharactersCheck extends AbstractCheck
Restrict 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. By the option it
is possible to allow using escapes for space literals.
Examples of using Unicode:
String unitAbbrev = "μs"; // Best: perfectly clear even without a comment. String unitAbbrev = "\u03bcs"; // Poor: the reader has no idea what this is.
An example of how to configure the check is:
<module name="AvoidEscapedUnicodeCharacters"/>
An example of non-printable(control) characters.
return '\ufeff' + content; // 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 with trail comment:
String unitAbbrev = "\u03bcs"; // Greek letter mu, "s"
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 literal contains only them:
String unitAbbrev = "\u03bc\u03bc\u03bc";
An example of how to configure the check to allow escapes if literal contains only them:
<module name="AvoidEscapedUnicodeCharacters"> <property name="allowIfAllCharactersEscaped" value="true"/> </module>
An example of how to configure the check to allow non-printable escapes:
<module name="AvoidEscapedUnicodeCharacters"> <property name="allowNonPrintableEscapes" value="true"/> </module>
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 escapes for space literals.
|
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,
java.lang.String line)
Whether the C style comment is trailing.
|
void |
setAllowByTailComment(boolean allow)
Set allowByTailComment.
|
void |
setAllowEscapesForControlCharacters(boolean allow)
Set allowIfAllCharactersEscaped.
|
void |
setAllowIfAllCharactersEscaped(boolean allow)
Set allowIfAllCharactersEscaped.
|
void |
setAllowNonPrintableEscapes(boolean allow)
Set allowSpaceEscapes.
|
void |
visitToken(DetailAST ast)
Called to process a token.
|
destroy, finishTree, getClassLoader, getFileContents, getLine, getLines, getTabWidth, getTokenNames, init, isCommentNodesRequired, leaveToken, log, log, setClassLoader, setFileContents, setMessages, setTabWidth, setTokens
getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, log, setId, setSeverity
configure, contextualize, finishLocalSetup, getConfiguration, setupChild
public 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 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()
AbstractCheck
getDefaultTokens
in class AbstractCheck
TokenTypes
public int[] getAcceptableTokens()
AbstractCheck
getAcceptableTokens
in class AbstractCheck
TokenTypes
public int[] getRequiredTokens()
AbstractCheck
getRequiredTokens
in class AbstractCheck
TokenTypes
public void beginTree(DetailAST rootAST)
AbstractCheck
beginTree
in class AbstractCheck
rootAST
- the root of the treepublic void visitToken(DetailAST ast)
AbstractCheck
visitToken
in class AbstractCheck
ast
- 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, java.lang.String line)
comment
- the comment to check.line
- the line where the comment starts.private 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.