# frozen_string_literal: true module Gitlab module Diff module FileCollection class MergeRequestDiffBase < Base extend ::Gitlab::Utils::Override def initialize(merge_request_diff, diff_options:) @merge_request_diff = merge_request_diff super(merge_request_diff, project: merge_request_diff.project, diff_options: diff_options, diff_refs: merge_request_diff.diff_refs, fallback_diff_refs: merge_request_diff.fallback_diff_refs) end def diff_files strong_memoize(:diff_files) do diff_files = super diff_files.each { |diff_file| highlight_cache.decorate(diff_file) } diff_files end end override :write_cache def write_cache highlight_cache.write_if_empty diff_stats_cache.write_if_empty(diff_stats_collection) end override :clear_cache def clear_cache highlight_cache.clear diff_stats_cache.clear end def real_size @merge_request_diff.real_size end private def highlight_cache strong_memoize(:highlight_cache) do Gitlab::Diff::HighlightCache.new(self) end end def diff_stats_cache strong_memoize(:diff_stats_cache) do Gitlab::Diff::StatsCache.new(cachable_key: @merge_request_diff.cache_key) end end override :diff_stats_collection def diff_stats_collection strong_memoize(:diff_stats) do next unless fetch_diff_stats? diff_stats_cache.read || super end end end end end end