Migrate upload validator to use new diff cache

Bug: Google b/200147261
Change-Id: I4081375e033f3cb438f667685e8bf9dc12391755
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidator.java
index 1e805e9..a229ee6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidator.java
@@ -31,7 +31,6 @@
 import com.google.gerrit.extensions.annotations.Exports;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.api.projects.ProjectConfigEntryType;
-import com.google.gerrit.extensions.client.DiffPreferencesInfo;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.validators.CommentForValidation;
 import com.google.gerrit.extensions.validators.CommentValidationContext;
@@ -45,10 +44,10 @@
 import com.google.gerrit.server.git.validators.CommitValidationException;
 import com.google.gerrit.server.git.validators.CommitValidationListener;
 import com.google.gerrit.server.git.validators.CommitValidationMessage;
-import com.google.gerrit.server.patch.PatchList;
-import com.google.gerrit.server.patch.PatchListCache;
-import com.google.gerrit.server.patch.PatchListKey;
-import com.google.gerrit.server.patch.PatchListNotAvailableException;
+import com.google.gerrit.server.patch.DiffNotAvailableException;
+import com.google.gerrit.server.patch.DiffOperations;
+import com.google.gerrit.server.patch.filediff.FileDiffOutput;
+import com.google.gerrit.server.patch.filediff.TaggedEdit;
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
@@ -71,6 +70,7 @@
 import java.util.concurrent.ExecutionException;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 import org.eclipse.jgit.diff.Edit;
 import org.eclipse.jgit.diff.RawText;
 import org.eclipse.jgit.lib.ObjectId;
@@ -122,8 +122,8 @@
   private final GitRepositoryManager repoManager;
   private final LoadingCache<String, Pattern> patternCache;
   private final ContentTypeUtil contentTypeUtil;
-  private final PatchListCache patchListCache;
   private final ValidatorConfig validatorConfig;
+  private final DiffOperations diffOperations;
 
   @Inject
   BlockedKeywordValidator(
@@ -132,14 +132,14 @@
       @Named(CACHE_NAME) LoadingCache<String, Pattern> patternCache,
       PluginConfigFactory cfgFactory,
       GitRepositoryManager repoManager,
-      PatchListCache patchListCache,
+      DiffOperations diffOperations,
       ValidatorConfig validatorConfig) {
     this.pluginName = pluginName;
     this.patternCache = patternCache;
     this.cfgFactory = cfgFactory;
     this.repoManager = repoManager;
     this.contentTypeUtil = contentTypeUtil;
-    this.patchListCache = patchListCache;
+    this.diffOperations = diffOperations;
     this.validatorConfig = validatorConfig;
   }
 
@@ -182,7 +182,7 @@
     } catch (NoSuchProjectException
         | IOException
         | ExecutionException
-        | PatchListNotAvailableException e) {
+        | DiffNotAvailableException e) {
       throw new CommitValidationException("failed to check on blocked keywords", e);
     }
     return Collections.emptyList();
@@ -224,14 +224,12 @@
       RevWalk revWalk,
       ImmutableCollection<Pattern> blockedKeywordPatterns,
       PluginConfig cfg)
-      throws IOException, ExecutionException, PatchListNotAvailableException {
+      throws IOException, ExecutionException, DiffNotAvailableException {
     List<CommitValidationMessage> messages = new LinkedList<>();
     checkCommitMessageForBlockedKeywords(blockedKeywordPatterns, messages, c.getFullMessage());
     Map<String, ObjectId> content = CommitUtils.getChangedContent(repo, c, revWalk);
-    PatchList patchList =
-        patchListCache.get(
-            PatchListKey.againstDefaultBase(c, DiffPreferencesInfo.Whitespace.IGNORE_NONE),
-            project);
+    Map<String, FileDiffOutput> fileDiffs =
+        diffOperations.listModifiedFilesAgainstParent(project, c, /* parentNum = */ 0);
 
     for (String path : content.keySet()) {
       ObjectLoader ol = revWalk.getObjectReader().open(content.get(path));
@@ -241,7 +239,13 @@
         }
       }
       checkLineDiffForBlockedKeywords(
-          patchList.get(path).getEdits(), blockedKeywordPatterns, messages, path, ol);
+          fileDiffs.get(path).edits().stream()
+              .map(TaggedEdit::jgitEdit)
+              .collect(Collectors.toList()),
+          blockedKeywordPatterns,
+          messages,
+          path,
+          ol);
     }
     return messages;
   }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidatorTest.java b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidatorTest.java
index 245f2dc..c4d0ac4 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidatorTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidatorTest.java
@@ -18,6 +18,7 @@
 import static com.googlesource.gerrit.plugins.uploadvalidator.TestUtils.EMPTY_PLUGIN_CONFIG;
 import static com.googlesource.gerrit.plugins.uploadvalidator.TestUtils.PATTERN_CACHE;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -27,9 +28,10 @@
 import com.google.gerrit.entities.Patch;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.server.git.validators.CommitValidationMessage;
-import com.google.gerrit.server.patch.PatchList;
-import com.google.gerrit.server.patch.PatchListCache;
-import com.google.gerrit.server.patch.PatchListEntry;
+import com.google.gerrit.server.patch.DiffOperations;
+import com.google.gerrit.server.patch.filediff.Edit;
+import com.google.gerrit.server.patch.filediff.FileDiffOutput;
+import com.google.gerrit.server.patch.filediff.TaggedEdit;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
@@ -39,7 +41,6 @@
 import java.util.Set;
 import java.util.regex.Pattern;
 import org.eclipse.jgit.api.errors.GitAPIException;
-import org.eclipse.jgit.diff.Edit;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.junit.Test;
@@ -79,16 +80,21 @@
 
   @Test
   public void keywords() throws Exception {
-    // Mock the PatchListCache to return a diff for each file in our new commit
-    PatchListCache patchListCacheMock = mock(PatchListCache.class);
-    PatchList mockPatchList = mock(PatchList.class);
-    when(patchListCacheMock.get(any(), any(Project.NameKey.class))).thenReturn(mockPatchList);
+    // Mock DiffOperations to return a diff for each file in our new commit
+    DiffOperations diffOperationsMock = mock(DiffOperations.class);
+    Map<String, FileDiffOutput> mockDiffs = mock(Map.class);
+    when(diffOperationsMock.listModifiedFilesAgainstParent(
+            any(Project.NameKey.class), any(), anyInt()))
+        .thenReturn(mockDiffs);
     for (Map.Entry<String, String> fileContent : FILE_CONTENTS.entrySet()) {
-      PatchListEntry file = mock(PatchListEntry.class);
-      when(file.getEdits())
+      FileDiffOutput file = mock(FileDiffOutput.class);
+      when(file.edits())
           .thenReturn(
-              ImmutableList.of(new Edit(0, 0, 0, numberOfLinesInString(fileContent.getValue()))));
-      when(mockPatchList.get(fileContent.getKey())).thenReturn(file);
+              ImmutableList.of(
+                  TaggedEdit.create(
+                      Edit.create(0, 0, 0, numberOfLinesInString(fileContent.getValue())),
+                      /* dueToRebase = */ false)));
+      when(mockDiffs.get(fileContent.getKey())).thenReturn(file);
     }
 
     try (RevWalk rw = new RevWalk(repo)) {
@@ -100,7 +106,7 @@
               PATTERN_CACHE,
               null,
               null,
-              patchListCacheMock,
+              diffOperationsMock,
               null);
       List<CommitValidationMessage> m =
           validator.performValidation(