CodeOwnerApprovalCheck: Do not read config params per file

Reading config params is not for free as we need to parse configs and
iterate over the configs from parent projects. Hence we should read
config params only once to have O(1) instead of once per file which
would be O(n).

Change-Id: Id70060a4ae39bc851caa0c638affcfac518f5421
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java
index 0021d89..a582589 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java
@@ -282,6 +282,9 @@
           getApproverAccountIds(requiredApproval, changeNotes, patchSetUploader);
       logger.atFine().log("reviewers = %s, approvers = %s", reviewerAccountIds, approverAccountIds);
 
+      FallbackCodeOwners fallbackCodeOwners =
+          codeOwnersPluginConfiguration.getFallbackCodeOwners(branch.project());
+
       return changedFiles
           .compute(changeNotes.getProjectName(), changeNotes.getCurrentPatchSet().commitId())
           .stream()
@@ -295,6 +298,7 @@
                       patchSetUploader,
                       reviewerAccountIds,
                       approverAccountIds,
+                      fallbackCodeOwners,
                       hasOverride,
                       changedFile));
     }
@@ -362,6 +366,7 @@
                       /* reviewerAccountIds= */ ImmutableSet.of(),
                       // Assume an explicit approval of the given account.
                       /* approverAccountIds= */ ImmutableSet.of(accountId),
+                      fallbackCodeOwners,
                       /* hasOverride= */ false,
                       changedFile));
     }
@@ -408,6 +413,7 @@
       @Nullable Account.Id patchSetUploader,
       ImmutableSet<Account.Id> reviewerAccountIds,
       ImmutableSet<Account.Id> approverAccountIds,
+      FallbackCodeOwners fallbackCodeOwners,
       boolean hasOverride,
       ChangedFile changedFile) {
     try (Timer0.Context ctx = codeOwnerMetrics.computeFileStatus.start()) {
@@ -427,6 +433,7 @@
                           patchSetUploader,
                           reviewerAccountIds,
                           approverAccountIds,
+                          fallbackCodeOwners,
                           hasOverride,
                           newPath));
 
@@ -448,6 +455,7 @@
                     patchSetUploader,
                     reviewerAccountIds,
                     approverAccountIds,
+                    fallbackCodeOwners,
                     hasOverride,
                     changedFile.oldPath().get()));
       }
@@ -467,6 +475,7 @@
       @Nullable Account.Id patchSetUploader,
       ImmutableSet<Account.Id> reviewerAccountIds,
       ImmutableSet<Account.Id> approverAccountIds,
+      FallbackCodeOwners fallbackCodeOwners,
       boolean hasOverride,
       Path absolutePath) {
     logger.atFine().log("computing path status for %s", absolutePath);
@@ -558,6 +567,7 @@
                 patchSetUploader,
                 reviewerAccountIds,
                 approverAccountIds,
+                fallbackCodeOwners,
                 absolutePath));
       }
     }
@@ -700,9 +710,8 @@
       @Nullable Account.Id patchSetUploader,
       ImmutableSet<Account.Id> reviewerAccountIds,
       ImmutableSet<Account.Id> approverAccountIds,
+      FallbackCodeOwners fallbackCodeOwners,
       Path absolutePath) {
-    FallbackCodeOwners fallbackCodeOwners =
-        codeOwnersPluginConfiguration.getFallbackCodeOwners(branch.project());
     logger.atFine().log(
         "getting code owner status for fallback code owners (fallback code owners = %s)",
         fallbackCodeOwners);