Class UniquePropertiesCheck

  • All Implemented Interfaces:
    Configurable, Contextualizable, FileSetCheck

    public class UniquePropertiesCheck
    extends AbstractFileSetCheck

    Detects duplicated keys in properties files.

    Rationale: Multiple property keys usually appear after merge or rebase of several branches. While there are no problems in runtime, there can be a confusion due to having different values for the duplicated properties.

    • Property fileExtensions - Specify file type extension of the files to check. Type is java.lang.String[]. Default value is .properties.

    To configure the check:

     <module name="UniqueProperties"/>
     

    Example: in foo.properties file

     key.one=44
     key.two=32 // OK
     key.one=54 // violation
     

    To configure the check to scan custom file extensions:

     <module name="UniqueProperties">
      <property name="fileExtensions" value="customProperties"/>
     </module>
     

    Example: in foo.customProperties file

     key.one=44
     key.two=32 // OK
     key.one=54 // violation
     

    Example: in foo.properties file

     key.one=44
     key.two=32 // OK
     key.one=54 // OK, file is not checked
     

    Parent is com.puppycrawl.tools.checkstyle.Checker

    Violation Message Keys:

    • properties.duplicate.property
    • unable.open.cause
    Since:
    5.7
    • Field Detail

      • MSG_KEY

        public static final java.lang.String MSG_KEY
        Localization key for check violation.
        See Also:
        Constant Field Values
      • MSG_IO_EXCEPTION_KEY

        public static final java.lang.String MSG_IO_EXCEPTION_KEY
        Localization key for IO exception occurred on file open.
        See Also:
        Constant Field Values
      • SPACE_PATTERN

        private static final java.util.regex.Pattern SPACE_PATTERN
        Pattern matching single space.
    • Constructor Detail

      • UniquePropertiesCheck

        public UniquePropertiesCheck()
        Construct the check with default values.
    • Method Detail

      • processFiltered

        protected void processFiltered​(java.io.File file,
                                       FileText fileText)
        Description copied from class: AbstractFileSetCheck
        Called to process a file that matches the specified file extensions.
        Specified by:
        processFiltered in class AbstractFileSetCheck
        Parameters:
        file - the file to be processed
        fileText - the contents of the file.
      • getLineNumber

        private static int getLineNumber​(FileText fileText,
                                         java.lang.String keyName)
        Method returns line number the key is detected in the checked properties files first.
        Parameters:
        fileText - FileText object contains the lines to process
        keyName - key name to look for
        Returns:
        line number of first occurrence. If no key found in properties file, 1 is returned
      • getKeyPattern

        private static java.util.regex.Pattern getKeyPattern​(java.lang.String keyName)
        Method returns regular expression pattern given key name.
        Parameters:
        keyName - key name to look for
        Returns:
        regular expression pattern given key name