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(
