# File lib/rgen/util/file_change_detector.rb, line 36
  def check_files(files)
    files_before = @file_info.keys
    used_files = {} 
    files.each do |file|
      begin
        if @file_info[file]
          if @file_info[file].timestamp != File.mtime(file)
            @file_info[file].timestamp = File.mtime(file)
            digest = calc_digest(file)
            if @file_info[file].digest != digest
              @file_info[file].digest = digest 
              @file_changed && @file_changed.call(file)
            end
          end
        else
          @file_info[file] = FileInfo.new
          @file_info[file].timestamp = File.mtime(file)
          @file_info[file].digest = calc_digest(file)
          @file_added && @file_added.call(file)
        end
        used_files[file] = true
      # protect against missing files

      rescue Errno::ENOENT
        # used_files is not set and @file_info will be removed below

        # notification hook hasn't been called yet since it comes after file accesses

      end
    end
    files_before.each do |file|
      if !used_files[file]
        @file_info.delete(file)
        @file_removed && @file_removed.call(file)
      end
    end
  end