Class AnnotationUseStyleCheck
- java.lang.Object
-
- com.puppycrawl.tools.checkstyle.api.AutomaticBean
-
- com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
-
- com.puppycrawl.tools.checkstyle.api.AbstractCheck
-
- com.puppycrawl.tools.checkstyle.checks.annotation.AnnotationUseStyleCheck
-
- All Implemented Interfaces:
Configurable,Contextualizable
public final class AnnotationUseStyleCheck extends AbstractCheck
Checks the style of elements in annotations.
Annotations have three element styles starting with the least verbose.
-
ElementStyleOption.COMPACT_NO_ARRAY -
ElementStyleOption.COMPACT -
ElementStyleOption.EXPANDED
To not enforce an element style a
ElementStyleOption.IGNOREtype is provided. The desired style can be set through theelementStyleproperty.Using the
ElementStyleOption.EXPANDEDstyle is more verbose. The expanded version is sometimes referred to as "named parameters" in other languages.Using the
ElementStyleOption.COMPACTstyle is less verbose. This style can only be used when there is an element called 'value' which is either the sole element or all other elements have default values.Using the
ElementStyleOption.COMPACT_NO_ARRAYstyle is less verbose. It is similar to theElementStyleOption.COMPACTstyle but single value arrays are flagged. With annotations a single value array does not need to be placed in an array initializer.The ending parenthesis are optional when using annotations with no elements. To always require ending parenthesis use the
ClosingParensOption.ALWAYStype. To never have ending parenthesis use theClosingParensOption.NEVERtype. To not enforce a closing parenthesis preference aClosingParensOption.IGNOREtype is provided. Set this through theclosingParensproperty.Annotations also allow you to specify arrays of elements in a standard format. As with normal arrays, a trailing comma is optional. To always require a trailing comma use the
TrailingArrayCommaOption.ALWAYStype. To never have a trailing comma use theTrailingArrayCommaOption.NEVERtype. To not enforce a trailing array comma preference aTrailingArrayCommaOption.IGNOREtype is provided. Set this through thetrailingArrayCommaproperty.By default the
ElementStyleOptionis set toCOMPACT_NO_ARRAY, theTrailingArrayCommaOptionis set toNEVER, and theClosingParensOptionis set toNEVER.According to the JLS, it is legal to include a trailing comma in arrays used in annotations but Sun's Java 5 & 6 compilers will not compile with this syntax. This may in be a bug in Sun's compilers since eclipse 3.4's built-in compiler does allow this syntax as defined in the JLS. Note: this was tested with compilers included with JDK versions 1.5.0.17 and 1.6.0.11 and the compiler included with eclipse 3.4.1.
See Java Language specification, §9.7.
-
Property
elementStyle- Define the annotation element styles. Type iscom.puppycrawl.tools.checkstyle.checks.annotation.AnnotationUseStyleCheck$ElementStyleOption. Default value iscompact_no_array. -
Property
closingParens- Define the policy for ending parenthesis. Type iscom.puppycrawl.tools.checkstyle.checks.annotation.AnnotationUseStyleCheck$ClosingParensOption. Default value isnever. -
Property
trailingArrayComma- Define the policy for trailing comma in arrays. Type iscom.puppycrawl.tools.checkstyle.checks.annotation.AnnotationUseStyleCheck$TrailingArrayCommaOption. Default value isnever.
To configure the check:
<module name="AnnotationUseStyle"/>
Example:
@Deprecated // OK @SomeArrays(pooches={DOGS.LEO}) // Violation - COMPACT_NO_ARRAY @SuppressWarnings({""}) // Violation - COMPACT_NO_ARRAY public class TestOne { } @SomeArrays(pooches={DOGS.LEO}, um={}, test={"bleh"}) // Violation - COMPACT_NO_ARRAY @SuppressWarnings("") // OK @Deprecated() // Violation - cannot have closing parenthesis class TestTwo { }To configure the check to enforce an
expandedstyle, with a trailing array comma set toneverand always including the closing parenthesis.<module name="AnnotationUseStyle"> <property name="elementStyle" value="expanded"/> <property name="trailingArrayComma" value="never"/> <property name="closingParens" value="always"/> </module>
Example:
@Deprecated // Violation - must have closing parenthesis @SomeArrays(pooches={DOGS.LEO}) // OK @SuppressWarnings({""}) // Violation - EXPANDED public class TestOne { } @SomeArrays(pooches={DOGS.LEO}, um={}, test={"bleh"}) // OK @SuppressWarnings("") // Violation - EXPANDED @Deprecated() // OK class TestTwo { }Parent is
com.puppycrawl.tools.checkstyle.TreeWalkerViolation Message Keys:
-
annotation.incorrect.style -
annotation.parens.missing -
annotation.parens.present -
annotation.trailing.comma.missing -
annotation.trailing.comma.present
- Since:
- 5.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classAnnotationUseStyleCheck.ClosingParensOptionDefines the two styles for defining elements in an annotation.static classAnnotationUseStyleCheck.ElementStyleOptionDefines the styles for defining elements in an annotation.static classAnnotationUseStyleCheck.TrailingArrayCommaOptionDefines the two styles for defining elements in an annotation.-
Nested classes/interfaces inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBean
AutomaticBean.OutputStreamOptions
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.StringANNOTATION_ELEMENT_SINGLE_NAMEThe element name used to receive special linguistic support for annotation use.private AnnotationUseStyleCheck.ClosingParensOptionclosingParensDefine the policy for ending parenthesis.private AnnotationUseStyleCheck.ElementStyleOptionelementStyleDefine the annotation element styles.static java.lang.StringMSG_KEY_ANNOTATION_INCORRECT_STYLEA key is pointing to the warning message text in "messages.properties" file.static java.lang.StringMSG_KEY_ANNOTATION_PARENS_MISSINGA key is pointing to the warning message text in "messages.properties" file.static java.lang.StringMSG_KEY_ANNOTATION_PARENS_PRESENTA key is pointing to the warning message text in "messages.properties" file.static java.lang.StringMSG_KEY_ANNOTATION_TRAILING_COMMA_MISSINGA key is pointing to the warning message text in "messages.properties" file.static java.lang.StringMSG_KEY_ANNOTATION_TRAILING_COMMA_PRESENTA key is pointing to the warning message text in "messages.properties" file.private AnnotationUseStyleCheck.TrailingArrayCommaOptiontrailingArrayCommaDefine the policy for trailing comma in arrays.
-
Constructor Summary
Constructors Constructor Description AnnotationUseStyleCheck()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidcheckCheckClosingParensOption(DetailAST ast)Checks to see if the closing parenthesis are present if required or prohibited.private voidcheckCompactNoArrayStyle(DetailAST annotation)Checks for compact no array style type violations.private voidcheckCompactStyle(DetailAST annotation)Checks for compact style type violations.private voidcheckExpandedStyle(DetailAST annotation)Checks for expanded style type violations.private voidcheckStyleType(DetailAST annotation)Checks to see if theAnnotationElementStyleOptionis correct.private voidcheckTrailingComma(DetailAST annotation)Checks to see if the trailing comma is present if required or prohibited.int[]getAcceptableTokens()The configurable token set.int[]getDefaultTokens()Returns the default token a check is interested in.private static <T extends java.lang.Enum<T>>
TgetOption(java.lang.Class<T> enumClass, java.lang.String value)Retrieves anEnumtype from a @{link String String}.int[]getRequiredTokens()The tokens that this check must be registered for.private static booleanhasArguments(DetailAST annotation)Checks that annotation has arguments.private voidlogCommaViolation(DetailAST ast)Logs a trailing array comma violation if one exists.voidsetClosingParens(java.lang.String parens)Setter to define the policy for ending parenthesis.voidsetElementStyle(java.lang.String style)Setter to define the annotation element styles.voidsetTrailingArrayComma(java.lang.String comma)Setter to define the policy for trailing comma in arrays.voidvisitToken(DetailAST ast)Called to process a token.-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractCheck
beginTree, clearViolations, destroy, finishTree, getFileContents, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, init, isCommentNodesRequired, leaveToken, log, log, log, setFileContents, setTabWidth, setTokens
-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
finishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverity
-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBean
configure, contextualize, getConfiguration, setupChild
-
-
-
-
Field Detail
-
MSG_KEY_ANNOTATION_INCORRECT_STYLE
public static final java.lang.String MSG_KEY_ANNOTATION_INCORRECT_STYLE
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
MSG_KEY_ANNOTATION_PARENS_MISSING
public static final java.lang.String MSG_KEY_ANNOTATION_PARENS_MISSING
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
MSG_KEY_ANNOTATION_PARENS_PRESENT
public static final java.lang.String MSG_KEY_ANNOTATION_PARENS_PRESENT
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
MSG_KEY_ANNOTATION_TRAILING_COMMA_MISSING
public static final java.lang.String MSG_KEY_ANNOTATION_TRAILING_COMMA_MISSING
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
MSG_KEY_ANNOTATION_TRAILING_COMMA_PRESENT
public static final java.lang.String MSG_KEY_ANNOTATION_TRAILING_COMMA_PRESENT
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
ANNOTATION_ELEMENT_SINGLE_NAME
private static final java.lang.String ANNOTATION_ELEMENT_SINGLE_NAME
The element name used to receive special linguistic support for annotation use.- See Also:
- Constant Field Values
-
elementStyle
private AnnotationUseStyleCheck.ElementStyleOption elementStyle
Define the annotation element styles.
-
trailingArrayComma
private AnnotationUseStyleCheck.TrailingArrayCommaOption trailingArrayComma
Define the policy for trailing comma in arrays.
-
closingParens
private AnnotationUseStyleCheck.ClosingParensOption closingParens
Define the policy for ending parenthesis.
-
-
Constructor Detail
-
AnnotationUseStyleCheck
public AnnotationUseStyleCheck()
-
-
Method Detail
-
setElementStyle
public void setElementStyle(java.lang.String style)
Setter to define the annotation element styles.- Parameters:
style- string representation
-
setTrailingArrayComma
public void setTrailingArrayComma(java.lang.String comma)
Setter to define the policy for trailing comma in arrays.- Parameters:
comma- string representation
-
setClosingParens
public void setClosingParens(java.lang.String parens)
Setter to define the policy for ending parenthesis.- Parameters:
parens- string representation
-
getOption
private static <T extends java.lang.Enum<T>> T getOption(java.lang.Class<T> enumClass, java.lang.String value)
Retrieves anEnumtype from a @{link String String}.- Type Parameters:
T- the enum type- Parameters:
enumClass- the enum classvalue- the string representing the enum- Returns:
- the enum type
- Throws:
java.lang.IllegalArgumentException- when unable to parse value
-
getDefaultTokens
public int[] getDefaultTokens()
Description copied from class:AbstractCheckReturns the default token a check is interested in. Only used if the configuration for a check does not define the tokens.- Specified by:
getDefaultTokensin classAbstractCheck- Returns:
- the default tokens
- See Also:
TokenTypes
-
getRequiredTokens
public int[] getRequiredTokens()
Description copied from class:AbstractCheckThe tokens that this check must be registered for.- Specified by:
getRequiredTokensin classAbstractCheck- Returns:
- the token set this must be registered for.
- See Also:
TokenTypes
-
getAcceptableTokens
public int[] getAcceptableTokens()
Description copied from class:AbstractCheckThe configurable token set. Used to protect Checks against malicious users who specify an unacceptable token set in the configuration file. The default implementation returns the check's default tokens.- Specified by:
getAcceptableTokensin classAbstractCheck- Returns:
- the token set this check is designed for.
- See Also:
TokenTypes
-
visitToken
public void visitToken(DetailAST ast)
Description copied from class:AbstractCheckCalled to process a token.- Overrides:
visitTokenin classAbstractCheck- Parameters:
ast- the token to process
-
checkStyleType
private void checkStyleType(DetailAST annotation)
Checks to see if theAnnotationElementStyleOptionis correct.- Parameters:
annotation- the annotation token
-
checkExpandedStyle
private void checkExpandedStyle(DetailAST annotation)
Checks for expanded style type violations.- Parameters:
annotation- the annotation token
-
hasArguments
private static boolean hasArguments(DetailAST annotation)
Checks that annotation has arguments.- Parameters:
annotation- to check- Returns:
- true if annotation has arguments, false otherwise
-
checkCompactStyle
private void checkCompactStyle(DetailAST annotation)
Checks for compact style type violations.- Parameters:
annotation- the annotation token
-
checkCompactNoArrayStyle
private void checkCompactNoArrayStyle(DetailAST annotation)
Checks for compact no array style type violations.- Parameters:
annotation- the annotation token
-
checkTrailingComma
private void checkTrailingComma(DetailAST annotation)
Checks to see if the trailing comma is present if required or prohibited.- Parameters:
annotation- the annotation token
-
logCommaViolation
private void logCommaViolation(DetailAST ast)
Logs a trailing array comma violation if one exists.- Parameters:
ast- the array initANNOTATION_ARRAY_INIT.
-
checkCheckClosingParensOption
private void checkCheckClosingParensOption(DetailAST ast)
Checks to see if the closing parenthesis are present if required or prohibited.- Parameters:
ast- the annotation token
-
-