Class PropertyCacheFile

java.lang.Object
com.puppycrawl.tools.checkstyle.PropertyCacheFile

public final class PropertyCacheFile extends Object
This class maintains a persistent(on file-system) store of the files that have checked ok(no validation events) and their associated timestamp. It is used to optimize Checkstyle between few launches. It is mostly useful for plugin and extensions of Checkstyle. It uses a property file for storage. A hashcode of the Configuration is stored in the cache file to ensure the cache is invalidated when the configuration has changed.
  • Field Details

    • CONFIG_HASH_KEY

      public static final String CONFIG_HASH_KEY
      The property key to use for storing the hashcode of the configuration. To avoid name clashes with the files that are checked the key is chosen in such a way that it cannot be a valid file name.
      See Also:
    • EXTERNAL_RESOURCE_KEY_PREFIX

      public static final String EXTERNAL_RESOURCE_KEY_PREFIX
      The property prefix to use for storing the hashcode of an external resource. To avoid name clashes with the files that are checked the prefix is chosen in such a way that it cannot be a valid file name and makes it clear it is a resource.
      See Also:
    • BUFFER_SIZE

      private static final int BUFFER_SIZE
      Size of default byte array for buffer.
      See Also:
    • BUFFER

      private static final byte[] BUFFER
      Default buffer for reading from streams.
    • BASE_16

      private static final int BASE_16
      Default number for base 16 encoding.
      See Also:
    • details

      private final Properties details
      The details on files.
    • config

      private final Configuration config
      Configuration object.
    • fileName

      private final String fileName
      File name of cache.
    • configHash

      private String configHash
      Generated configuration hash.
  • Constructor Details

  • Method Details

    • load

      public void load() throws IOException
      Load cached values from file.
      Throws:
      IOException - when there is a problems with file read
    • persist

      public void persist() throws IOException
      Cleans up the object and updates the cache file.
      Throws:
      IOException - when there is a problems with file save
    • reset

      public void reset()
      Resets the cache to be empty except for the configuration hash.
    • isInCache

      public boolean isInCache(String uncheckedFileName, long timestamp)
      Checks that file is in cache.
      Parameters:
      uncheckedFileName - the file to check
      timestamp - the timestamp of the file to check
      Returns:
      whether the specified file has already been checked ok
    • put

      public void put(String checkedFileName, long timestamp)
      Records that a file checked ok.
      Parameters:
      checkedFileName - name of the file that checked ok
      timestamp - the timestamp of the file
    • get

      public String get(String name)
      Retrieves the hash of a specific file.
      Parameters:
      name - The name of the file to retrieve.
      Returns:
      The has of the file or null.
    • remove

      public void remove(String checkedFileName)
      Removed a specific file from the cache.
      Parameters:
      checkedFileName - The name of the file to remove.
    • getHashCodeBasedOnObjectContent

      Calculates the hashcode for the serializable object based on its content.
      Parameters:
      object - serializable object.
      Returns:
      the hashcode for serializable object.
      Throws:
      IllegalStateException - when some unexpected happened.
    • serialize

      private static void serialize(Serializable object, OutputStream outputStream) throws IOException
      Serializes object to output stream.
      Parameters:
      object - object to be serialized
      outputStream - serialization stream
      Throws:
      IOException - if an error occurs
    • putExternalResources

      public void putExternalResources(Set<String> locations)
      Puts external resources in cache. If at least one external resource changed, clears the cache.
      Parameters:
      locations - locations of external resources.
    • loadExternalResources

      Loads a set of PropertyCacheFile.ExternalResource based on their locations.
      Parameters:
      resourceLocations - locations of external configuration resources.
      Returns:
      a set of PropertyCacheFile.ExternalResource.
    • loadExternalResource

      private static byte[] loadExternalResource(String location) throws IOException, CheckstyleException
      Loads the content of external resource.
      Parameters:
      location - external resource location.
      Returns:
      array of bytes which represents the content of external resource in binary form.
      Throws:
      IOException - if error while loading occurs.
      CheckstyleException - if error while loading occurs.
    • toByteArray

      private static byte[] toByteArray(InputStream stream) throws IOException
      Reads all the contents of an input stream and returns it as a byte array.
      Parameters:
      stream - The input stream to read from.
      Returns:
      The resulting byte array of the stream.
      Throws:
      IOException - if there is an error reading the input stream.
    • areExternalResourcesChanged

      Checks whether the contents of external configuration resources were changed.
      Parameters:
      resources - a set of PropertyCacheFile.ExternalResource.
      Returns:
      true if the contents of external configuration resources were changed.
    • isResourceChanged

      Checks whether the resource is changed.
      Parameters:
      resource - resource to check.
      Returns:
      true if resource is changed.
    • fillCacheWithExternalResources

      Fills cache with a set of PropertyCacheFile.ExternalResource. If external resource from the set is already in cache, it will be skipped.
      Parameters:
      externalResources - a set of PropertyCacheFile.ExternalResource.
    • isResourceLocationInCache

      private boolean isResourceLocationInCache(String location)
      Checks whether resource location is in cache.
      Parameters:
      location - resource location.
      Returns:
      true if resource location is in cache.