Class 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.IGNORE type is provided. The desired style can be set through the elementStyle property.

Using the ElementStyleOption.EXPANDED style is more verbose. The expanded version is sometimes referred to as "named parameters" in other languages.

Using the ElementStyleOption.COMPACT style 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_ARRAY style is less verbose. It is similar to the ElementStyleOption.COMPACT style 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.ALWAYS type. To never have ending parenthesis use the ClosingParensOption.NEVER type. To not enforce a closing parenthesis preference a ClosingParensOption.IGNORE type is provided. Set this through the closingParens property.

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.ALWAYS type. To never have a trailing comma use the TrailingArrayCommaOption.NEVER type. To not enforce a trailing array comma preference a TrailingArrayCommaOption.IGNORE type is provided. Set this through the trailingArrayComma property.

By default the ElementStyleOption is set to COMPACT_NO_ARRAY, the TrailingArrayCommaOption is set to NEVER, and the ClosingParensOption is set to NEVER.

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 is com.puppycrawl.tools.checkstyle.checks.annotation.AnnotationUseStyleCheck$ElementStyleOption. Default value is compact_no_array.
  • Property closingParens - Define the policy for ending parenthesis. Type is com.puppycrawl.tools.checkstyle.checks.annotation.AnnotationUseStyleCheck$ClosingParensOption. Default value is never.
  • Property trailingArrayComma - Define the policy for trailing comma in arrays. Type is com.puppycrawl.tools.checkstyle.checks.annotation.AnnotationUseStyleCheck$TrailingArrayCommaOption. Default value is never.

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 expanded style, with a trailing array comma set to never and 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.TreeWalker

Violation Message Keys:

  • annotation.incorrect.style
  • annotation.parens.missing
  • annotation.parens.present
  • annotation.trailing.comma.missing
  • annotation.trailing.comma.present
Since:
5.0
  • Field Details

    • MSG_KEY_ANNOTATION_INCORRECT_STYLE

      public static final String MSG_KEY_ANNOTATION_INCORRECT_STYLE
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
    • MSG_KEY_ANNOTATION_PARENS_MISSING

      public static final String MSG_KEY_ANNOTATION_PARENS_MISSING
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
    • MSG_KEY_ANNOTATION_PARENS_PRESENT

      public static final String MSG_KEY_ANNOTATION_PARENS_PRESENT
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
    • MSG_KEY_ANNOTATION_TRAILING_COMMA_MISSING

      public static final String MSG_KEY_ANNOTATION_TRAILING_COMMA_MISSING
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
    • MSG_KEY_ANNOTATION_TRAILING_COMMA_PRESENT

      public static final String MSG_KEY_ANNOTATION_TRAILING_COMMA_PRESENT
      A key is pointing to the warning message text in "messages.properties" file.
      See Also:
    • ANNOTATION_ELEMENT_SINGLE_NAME

      private static final String ANNOTATION_ELEMENT_SINGLE_NAME
      The element name used to receive special linguistic support for annotation use.
      See Also:
    • elementStyle

      Define the annotation element styles.
    • trailingArrayComma

      Define the policy for trailing comma in arrays.
    • closingParens

      Define the policy for ending parenthesis.
  • Constructor Details

    • AnnotationUseStyleCheck

      public AnnotationUseStyleCheck()
  • Method Details

    • setElementStyle

      public void setElementStyle(String style)
      Setter to define the annotation element styles.
      Parameters:
      style - string representation
    • setTrailingArrayComma

      public void setTrailingArrayComma(String comma)
      Setter to define the policy for trailing comma in arrays.
      Parameters:
      comma - string representation
    • setClosingParens

      public void setClosingParens(String parens)
      Setter to define the policy for ending parenthesis.
      Parameters:
      parens - string representation
    • getOption

      private static <T extends Enum<T>> T getOption(Class<T> enumClass, String value)
      Retrieves an Enum type from a @{link String String}.
      Type Parameters:
      T - the enum type
      Parameters:
      enumClass - the enum class
      value - the string representing the enum
      Returns:
      the enum type
      Throws:
      IllegalArgumentException - when unable to parse value
    • getDefaultTokens

      public int[] getDefaultTokens()
      Description copied from class: AbstractCheck
      Returns the default token a check is interested in. Only used if the configuration for a check does not define the tokens.
      Specified by:
      getDefaultTokens in class AbstractCheck
      Returns:
      the default tokens
      See Also:
    • getRequiredTokens

      public int[] getRequiredTokens()
      Description copied from class: AbstractCheck
      The tokens that this check must be registered for.
      Specified by:
      getRequiredTokens in class AbstractCheck
      Returns:
      the token set this must be registered for.
      See Also:
    • getAcceptableTokens

      public int[] getAcceptableTokens()
      Description copied from class: AbstractCheck
      The 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:
      getAcceptableTokens in class AbstractCheck
      Returns:
      the token set this check is designed for.
      See Also:
    • visitToken

      public void visitToken(DetailAST ast)
      Description copied from class: AbstractCheck
      Called to process a token.
      Overrides:
      visitToken in class AbstractCheck
      Parameters:
      ast - the token to process
    • checkStyleType

      private void checkStyleType(DetailAST annotation)
      Checks to see if the AnnotationElementStyleOption is 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 init ANNOTATION_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