code: protected Set<String> getChangedDotFiles() {
  		Set<String> generatedFiles = getGeneratedFiles();
  
  		// If there is no status file to compare against or no files are
  		// generated then skip image generation
  		if (generatedFiles == null || generatedFiles.isEmpty()) {
  			return null;
  		}
  
  		// Check if images for generated dot files are missing or outdated
  		Set<String> changedDotFiles = new HashSet<String>();
  		for (String generatedFile : generatedFiles) {
  			if (generatedFile.endsWith(".dot")) {
  				File dotFile = new File(getProject().getBasedir(),
  						generatedFile);
  				File imageFile = new File(getProject().getBasedir(),
  						generatedFile + ".png");
  				if (!imageFile.exists()
  						|| imageFile.lastModified() < dotFile.lastModified()) {
  					changedDotFiles.add(generatedFile);
  				}
  			}
  		}
  
  		// Print info of result
  		if (changedDotFiles.size() == 1) {
  			String fileName = changedDotFiles.iterator().next();
  			if (fileName.startsWith(project.getBasedir().getAbsolutePath())) {
  				fileName = fileName.substring(project.getBasedir()
  						.getAbsolutePath().length() + 1);
  			}
  			final String message = MessageFormat.format(
  					"\"{0}\" has been changed", fileName);
  			getLog().info(message);
  		} else if (changedDotFiles.size() > 1) {
  			final String message = MessageFormat.format(
  					"{0} dot files have been changed", changedDotFiles.size());
  			getLog().info(message);
  		} else {
  			getLog().info(
  					"Everything is up to date - no image generation is needed");
  		}
  		return changedDotFiles;
  	}
docs: Returns a list with file names of dot files that have been changed since
  previous image generation run. Empty if no files changed or
  <code>null</code> if there is no status file to compare against.