Merge branch 'stable-3.2' into master

* stable-3.2:
  Upgrade bazlets to latest stable-3.2 to build with 3.2.5.1 API
  Upgrade bazlets to latest stable-3.1 to build with 3.1.10 API

Change-Id: I0c43723f65eec019d75f11e96eb4baa862247fdf
diff --git a/WORKSPACE b/WORKSPACE
index 934bb71..aa36a75 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -12,7 +12,7 @@
     "gerrit_api",
 )
 
-gerrit_api()
+gerrit_api(version = "3.4.0-SNAPSHOT")
 
 load("//:external_plugin_deps.bzl", "external_plugin_deps")
 
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 c52b588..f99df7f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/BlockedKeywordValidator.java
@@ -20,12 +20,21 @@
 import com.google.common.base.Joiner;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableCollection;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.entities.Patch;
+import com.google.gerrit.entities.Project;
+import com.google.gerrit.entities.Project.NameKey;
 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.registration.DynamicSet;
+import com.google.gerrit.extensions.validators.CommentForValidation;
+import com.google.gerrit.extensions.validators.CommentValidationContext;
+import com.google.gerrit.extensions.validators.CommentValidationFailure;
+import com.google.gerrit.extensions.validators.CommentValidator;
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.config.ProjectConfigEntry;
@@ -47,9 +56,12 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -60,8 +72,20 @@
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevWalk;
 
-public class BlockedKeywordValidator implements CommitValidationListener {
+/**
+ * A validator for checking for use of blocked keywords in commit content and comments.
+ *
+ * <p>This class implements both {@link CommitValidationListener} and {@link CommentValidator}
+ * validator classes to run its list of blocked keywords against commit content and comments.
+ */
+public class BlockedKeywordValidator implements CommitValidationListener, CommentValidator {
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+
+  // These keys are used for turning on specific validation elements.
+  // i.e. enableSkipValidation = blockedKeyword will enabled skipRef and skipGroup checks
+  // i.e. disabledValidation = blockedKeywordComments will disable the comment blocked keyword check
   private static final String KEY_CHECK_BLOCKED_KEYWORD = "blockedKeyword";
+  private static final String KEY_CHECK_COMMENT_BLOCKED_KEYWORD = "blockedKeywordComments";
   private static final String KEY_CHECK_BLOCKED_KEYWORD_PATTERN =
       KEY_CHECK_BLOCKED_KEYWORD + "Pattern";
 
@@ -70,6 +94,7 @@
       @Override
       protected void configure() {
         DynamicSet.bind(binder(), CommitValidationListener.class).to(BlockedKeywordValidator.class);
+        DynamicSet.bind(binder(), CommentValidator.class).to(BlockedKeywordValidator.class);
         bind(ProjectConfigEntry.class)
             .annotatedWith(Exports.named(KEY_CHECK_BLOCKED_KEYWORD_PATTERN))
             .toInstance(
@@ -120,7 +145,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
@@ -148,16 +173,40 @@
     return Collections.emptyList();
   }
 
+  @Override
+  public ImmutableList<CommentValidationFailure> validateComments(
+      CommentValidationContext ctx, ImmutableList<CommentForValidation> comments) {
+    try {
+      NameKey projectNameKey = Project.nameKey(ctx.getProject());
+      PluginConfig cfg = cfgFactory.getFromProjectConfigWithInheritance(projectNameKey, pluginName);
+      if (isActive(cfg)
+          && validatorConfig.isEnabled(
+              null, projectNameKey, "", KEY_CHECK_COMMENT_BLOCKED_KEYWORD)) {
+        ImmutableMap<String, Pattern> blockedKeywordPatterns =
+            patternCache.getAll(
+                Arrays.asList(cfg.getStringList(KEY_CHECK_BLOCKED_KEYWORD_PATTERN)));
+        return comments.stream()
+            .map(comment -> validateComment(blockedKeywordPatterns, comment))
+            .filter(Optional::isPresent)
+            .map(Optional::get)
+            .collect(ImmutableList.toImmutableList());
+      }
+    } catch (NoSuchProjectException | ExecutionException e) {
+      throw new IllegalStateException("Exception validating comments in uploadvalidator", e);
+    }
+    return ImmutableList.of();
+  }
+
   @VisibleForTesting
   List<CommitValidationMessage> performValidation(
       Repository repo,
       RevCommit c,
       RevWalk revWalk,
-      ImmutableCollection<Pattern> blockedKeywordPartterns,
+      ImmutableCollection<Pattern> blockedKeywordPatterns,
       PluginConfig cfg)
       throws IOException, ExecutionException {
     List<CommitValidationMessage> messages = new LinkedList<>();
-    checkCommitMessageForBlockedKeywords(blockedKeywordPartterns, messages, c.getFullMessage());
+    checkCommitMessageForBlockedKeywords(blockedKeywordPatterns, messages, c.getFullMessage());
     Map<String, ObjectId> content = CommitUtils.getChangedContent(repo, c, revWalk);
     for (String path : content.keySet()) {
       ObjectLoader ol = revWalk.getObjectReader().open(content.get(path));
@@ -166,11 +215,23 @@
           continue;
         }
       }
-      checkFileForBlockedKeywords(blockedKeywordPartterns, messages, path, ol);
+      checkFileForBlockedKeywords(blockedKeywordPatterns, messages, path, ol);
     }
     return messages;
   }
 
+  private static Optional<CommentValidationFailure> validateComment(
+      ImmutableMap blockedKeywordPatterns, CommentForValidation comment) {
+    // Uses HashSet data structure for de-duping found blocked keywords.
+    Set<String> findings = new LinkedHashSet<String>(
+        findBlockedKeywordsInString(blockedKeywordPatterns.values(), comment.getText()));
+    if (findings.isEmpty()) {
+      return Optional.empty();
+    }
+    return Optional.of(comment.failValidation(
+        String.format("banned words found in your comment (%s)", Iterables.toString(findings))));
+  }
+
   private static void checkCommitMessageForBlockedKeywords(
       ImmutableCollection<Pattern> blockedKeywordPatterns,
       List<CommitValidationMessage> messages,
@@ -183,7 +244,7 @@
   }
 
   private static void checkFileForBlockedKeywords(
-      ImmutableCollection<Pattern> blockedKeywordPartterns,
+      ImmutableCollection<Pattern> blockedKeywordPatterns,
       List<CommitValidationMessage> messages,
       String path,
       ObjectLoader ol)
@@ -193,24 +254,30 @@
       int line = 0;
       for (String l = br.readLine(); l != null; l = br.readLine()) {
         line++;
-        checkLineForBlockedKeywords(blockedKeywordPartterns, messages, path, line, l);
+        checkLineForBlockedKeywords(blockedKeywordPatterns, messages, path, line, l);
       }
     }
   }
 
-  private static void checkLineForBlockedKeywords(
-      ImmutableCollection<Pattern> blockedKeywordPartterns,
-      List<CommitValidationMessage> messages,
-      String path,
-      int lineNumber,
-      String line) {
+  private static List<String> findBlockedKeywordsInString(
+      ImmutableCollection<Pattern> blockedKeywordPatterns, String text) {
     List<String> found = new ArrayList<>();
-    for (Pattern p : blockedKeywordPartterns) {
-      Matcher matcher = p.matcher(line);
+    for (Pattern p : blockedKeywordPatterns) {
+      Matcher matcher = p.matcher(text);
       while (matcher.find()) {
         found.add(matcher.group());
       }
     }
+    return found;
+  }
+
+  private static void checkLineForBlockedKeywords(
+      ImmutableCollection<Pattern> blockedKeywordPatterns,
+      List<CommitValidationMessage> messages,
+      String path,
+      int lineNumber,
+      String line) {
+    List<String> found = findBlockedKeywordsInString(blockedKeywordPatterns, line);
     if (!found.isEmpty()) {
       messages.add(
           new CommitValidationMessage(
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java
index 7ee8f95..04525ec 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java
@@ -108,7 +108,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isAuthorActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
@@ -123,7 +123,7 @@
         }
       }
       if (isCommitterActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ContentTypeValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ContentTypeValidator.java
index 0d8f2e4..698d358 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ContentTypeValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ContentTypeValidator.java
@@ -123,7 +123,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/DuplicatePathnameValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/DuplicatePathnameValidator.java
index 0b93e6d..8a9ea2b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/DuplicatePathnameValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/DuplicatePathnameValidator.java
@@ -181,7 +181,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/FileExtensionValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/FileExtensionValidator.java
index 716f32e..4b29b1f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/FileExtensionValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/FileExtensionValidator.java
@@ -100,7 +100,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/FooterValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/FooterValidator.java
index 51d6a8e..b5b92c2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/FooterValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/FooterValidator.java
@@ -85,7 +85,7 @@
               receiveEvent.project.getNameKey(), pluginName);
       String[] requiredFooters = cfg.getStringList(KEY_REQUIRED_FOOTER);
       if (requiredFooters.length > 0
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/InvalidFilenameValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/InvalidFilenameValidator.java
index 846288f..c6371df 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/InvalidFilenameValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/InvalidFilenameValidator.java
@@ -95,7 +95,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/InvalidLineEndingValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/InvalidLineEndingValidator.java
index 2f602b0..8b708ef 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/InvalidLineEndingValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/InvalidLineEndingValidator.java
@@ -105,7 +105,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/MaxPathLengthValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/MaxPathLengthValidator.java
index 2216451..a3db8f4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/MaxPathLengthValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/MaxPathLengthValidator.java
@@ -89,7 +89,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/SubmoduleValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/SubmoduleValidator.java
index 08d4d3f..f96d325 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/SubmoduleValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/SubmoduleValidator.java
@@ -92,7 +92,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/SymlinkValidator.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/SymlinkValidator.java
index 7b7d893..85a8151 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/SymlinkValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/SymlinkValidator.java
@@ -93,7 +93,7 @@
           cfgFactory.getFromProjectConfigWithInheritance(
               receiveEvent.project.getNameKey(), pluginName);
       if (isActive(cfg)
-          && validatorConfig.isEnabledForRef(
+          && validatorConfig.isEnabled(
               receiveEvent.user,
               receiveEvent.getProjectNameKey(),
               receiveEvent.getRefName(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ValidatorConfig.java b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ValidatorConfig.java
index 15b64fe..d1c5f7e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ValidatorConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ValidatorConfig.java
@@ -14,9 +14,13 @@
 
 package com.googlesource.gerrit.plugins.uploadvalidator;
 
+import static com.google.common.collect.ImmutableList.toImmutableList;
+
+import com.google.common.collect.ImmutableList;
 import com.google.gerrit.common.Nullable;
-import com.google.gerrit.common.data.AccessSection;
+import com.google.gerrit.entities.AccessSection;
 import com.google.gerrit.entities.AccountGroup;
+import com.google.gerrit.entities.AccountGroup.UUID;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.annotations.Exports;
@@ -33,7 +37,6 @@
 import java.util.Arrays;
 import java.util.Optional;
 import java.util.regex.Pattern;
-import java.util.stream.Stream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -79,15 +82,29 @@
     this.groupByNameFinder = groupByNameFinder;
   }
 
-  public boolean isEnabledForRef(
-      IdentifiedUser user, Project.NameKey projectName, String refName, String validatorOp) {
+  /**
+   * Checks whether the provided params match with the plugin configuration to verify it is enabled.
+   *
+   * @param user A Nullable field identifying the user defined on the ref. Passing null will ignore
+   *     user checks.
+   * @param projectName Identifier for the project name on the ref.
+   * @param refName Identifier for the ref name.
+   * @param validatorOp The name of the validator operation. Can be used in skip validation config.
+   * @return boolean indicating if the ref is enabled for validation.
+   */
+  public boolean isEnabled(
+      @Nullable IdentifiedUser user,
+      Project.NameKey projectName,
+      String refName,
+      String validatorOp) {
     PluginConfig conf = configFactory.get(projectName);
 
     return conf != null
         && isValidConfig(conf, projectName)
         && (activeForRef(conf, refName))
-        && (activeForEmail(conf, user.getAccount().preferredEmail()))
+        && (user == null || activeForEmail(conf, user.getAccount().preferredEmail()))
         && (activeForProject(conf, projectName.get()))
+        && (!isDisabledValidatorOp(conf, validatorOp))
         && (!hasCriteria(conf, "skipGroup")
             || !canSkipValidation(conf, validatorOp)
             || !canSkipRef(conf, refName)
@@ -119,6 +136,11 @@
     return config.getStringList(criteria).length > 0;
   }
 
+  private boolean isDisabledValidatorOp(PluginConfig config, String validatorOp) {
+    String[] c = config.getStringList("disabledValidation");
+    return Arrays.asList(c).contains(validatorOp);
+  }
+
   private boolean activeForProject(PluginConfig config, String project) {
     return matchCriteria(config, "project", project, true, false);
   }
@@ -165,14 +187,16 @@
     return Pattern.matches(pattern, value);
   }
 
-  private boolean canSkipGroup(PluginConfig conf, IdentifiedUser user) {
-    if (!user.isIdentifiedUser()) {
+  private boolean canSkipGroup(PluginConfig conf, @Nullable IdentifiedUser user) {
+    if (user == null || !user.isIdentifiedUser()) {
       return false;
     }
 
-    Stream<AccountGroup.UUID> skipGroups =
-        Arrays.stream(conf.getStringList("skipGroup")).map(this::groupUUID);
-    return user.asIdentifiedUser().getEffectiveGroups().containsAnyOf(skipGroups::iterator);
+    ImmutableList<UUID> skipGroups =
+        Arrays.stream(conf.getStringList("skipGroup"))
+            .map(this::groupUUID)
+            .collect(toImmutableList());
+    return user.asIdentifiedUser().getEffectiveGroups().containsAnyOf(skipGroups);
   }
 
   private AccountGroup.UUID groupUUID(String groupNameOrUUID) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/EmailAwareValidatorConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/EmailAwareValidatorConfigTest.java
index 64184cc..8c00744 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/EmailAwareValidatorConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/EmailAwareValidatorConfigTest.java
@@ -30,7 +30,7 @@
     ValidatorConfig config =
         getConfig("[plugin \"uploadvalidator\"]\n" + "blockedFileExtension = jar");
 
-    assertThat(config.isEnabledForRef(anyUser, projectName, "anyRef", "blockedFileExtension"))
+    assertThat(config.isEnabled(anyUser, projectName, "anyRef", "blockedFileExtension"))
         .isTrue();
   }
 
@@ -40,7 +40,7 @@
     ValidatorConfig config =
         getConfig("[plugin \"uploadvalidator\"]\n" + "blockedFileExtension = jar");
 
-    assertThat(config.isEnabledForRef(missingEmail, projectName, "anyRef", "blockedFileExtension"))
+    assertThat(config.isEnabled(missingEmail, projectName, "anyRef", "blockedFileExtension"))
         .isTrue();
   }
 
@@ -55,7 +55,7 @@
                 + "   blockedFileExtension = jar");
 
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isTrue();
   }
@@ -69,7 +69,7 @@
                 + "   blockedFileExtension = jar");
 
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isFalse();
   }
@@ -84,11 +84,11 @@
                 + "   blockedFileExtension = jar");
 
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isFalse();
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 exampleOrgUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isTrue();
   }
@@ -103,7 +103,7 @@
                 + "   blockedFileExtension = jar");
 
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 missingEmail, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isFalse();
   }
@@ -120,14 +120,14 @@
                 + "   blockedFileExtension = jar");
 
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 exampleOrgUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isTrue();
     assertThat(
-            config.isEnabledForRef(xUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
+            config.isEnabled(xUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isTrue();
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isFalse();
   }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/FakeConfigFactory.java b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/FakeConfigFactory.java
index 79f4cc5..0aaae0f 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/FakeConfigFactory.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/FakeConfigFactory.java
@@ -34,9 +34,9 @@
   @Override
   public PluginConfig get(NameKey projectName) {
     if (this.projectName.equals(projectName)) {
-      return new PluginConfig("uploadvalidator", config);
+      return PluginConfig.create("uploadvalidator", config, null);
     }
 
-    return new PluginConfig("uploadvalidator", new Config());
+    return PluginConfig.create("uploadvalidator", new Config(), null);
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ProjectAwareValidatorConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ProjectAwareValidatorConfigTest.java
index 4c5df11..c968ec5 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ProjectAwareValidatorConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ProjectAwareValidatorConfigTest.java
@@ -30,7 +30,7 @@
     ValidatorConfig config =
         getConfig("[plugin \"uploadvalidator\"]\n" + "blockedFileExtension = jar", projectName);
 
-    assertThat(config.isEnabledForRef(anyUser, projectName, "anyRef", "blockedFileExtension"))
+    assertThat(config.isEnabled(anyUser, projectName, "anyRef", "blockedFileExtension"))
         .isTrue();
   }
 
@@ -43,7 +43,7 @@
                 + "   blockedFileExtension = jar",
             projectName);
 
-    assertThat(config.isEnabledForRef(anyUser, projectName, "anyRef", "blockedFileExtension"))
+    assertThat(config.isEnabled(anyUser, projectName, "anyRef", "blockedFileExtension"))
         .isTrue();
   }
 
@@ -56,7 +56,7 @@
                 + "   blockedFileExtension = jar",
             projectName);
 
-    assertThat(config.isEnabledForRef(anyUser, projectName, "anyRef", "blockedFileExtension"))
+    assertThat(config.isEnabled(anyUser, projectName, "anyRef", "blockedFileExtension"))
         .isFalse();
   }
 
@@ -70,9 +70,9 @@
     ValidatorConfig config = getConfig(configString, projectName);
     ValidatorConfig config2 = getConfig(configString, otherNameKey);
 
-    assertThat(config.isEnabledForRef(anyUser, projectName, "anyRef", "blockedFileExtension"))
+    assertThat(config.isEnabled(anyUser, projectName, "anyRef", "blockedFileExtension"))
         .isTrue();
-    assertThat(config2.isEnabledForRef(anyUser, otherNameKey, "anyRef", "blockedFileExtension"))
+    assertThat(config2.isEnabled(anyUser, otherNameKey, "anyRef", "blockedFileExtension"))
         .isFalse();
   }
 
@@ -89,11 +89,11 @@
     ValidatorConfig config2 = getConfig(configString, anotherNameKey);
     ValidatorConfig config3 = getConfig(configString, someOtherNameKey);
 
-    assertThat(config.isEnabledForRef(anyUser, projectName, "anyRef", "blockedFileExtension"))
+    assertThat(config.isEnabled(anyUser, projectName, "anyRef", "blockedFileExtension"))
         .isTrue();
-    assertThat(config2.isEnabledForRef(anyUser, anotherNameKey, "anyRef", "blockedFileExtension"))
+    assertThat(config2.isEnabled(anyUser, anotherNameKey, "anyRef", "blockedFileExtension"))
         .isTrue();
-    assertThat(config3.isEnabledForRef(anyUser, someOtherNameKey, "anyRef", "blockedFileExtension"))
+    assertThat(config3.isEnabled(anyUser, someOtherNameKey, "anyRef", "blockedFileExtension"))
         .isFalse();
   }
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/RefAwareValidatorConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/RefAwareValidatorConfigTest.java
index 0ef4f4b..f74d346 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/RefAwareValidatorConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/RefAwareValidatorConfigTest.java
@@ -30,7 +30,7 @@
     ValidatorConfig config =
         getConfig("[plugin \"uploadvalidator\"]\n" + "blockedFileExtension = jar");
 
-    assertThat(config.isEnabledForRef(anyUser, projectName, "anyRef", "blockedFileExtension"))
+    assertThat(config.isEnabled(anyUser, projectName, "anyRef", "blockedFileExtension"))
         .isTrue();
   }
 
@@ -43,7 +43,7 @@
                 + "   blockedFileExtension = jar");
 
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isTrue();
   }
@@ -57,7 +57,7 @@
                 + "   blockedFileExtension = jar");
 
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/anyref", "blockedFileExtension"))
         .isFalse();
   }
@@ -71,11 +71,11 @@
                 + "   blockedFileExtension = jar");
 
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/anotherref", "blockedFileExtension"))
         .isFalse();
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/mybranch123", "blockedFileExtension"))
         .isTrue();
   }
@@ -90,15 +90,15 @@
                 + "   blockedFileExtension = jar");
 
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/branch1", "blockedFileExtension"))
         .isTrue();
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/branch2", "blockedFileExtension"))
         .isTrue();
     assertThat(
-            config.isEnabledForRef(
+            config.isEnabled(
                 anyUser, projectName, "refs/heads/branch3", "blockedFileExtension"))
         .isFalse();
   }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/SkipValidationTest.java b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/SkipValidationTest.java
index e928b34..b46ac86 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/SkipValidationTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/SkipValidationTest.java
@@ -31,7 +31,7 @@
     ValidatorConfig validatorConfig =
         new ValidatorConfig(new FakeConfigFactory(projectName, ""), new FakeGroupByNameFinder());
 
-    assertThat(validatorConfig.isEnabledForRef(anyUser, projectName, "anyRef", "anyOp")).isTrue();
+    assertThat(validatorConfig.isEnabled(anyUser, projectName, "anyRef", "anyOp")).isTrue();
   }
 
   @Test
@@ -47,7 +47,7 @@
             new FakeConfigFactory(projectName, config), new FakeGroupByNameFinder());
 
     assertThat(
-            validatorConfig.isEnabledForRef(
+            validatorConfig.isEnabled(
                 new FakeUserProvider("testGroup", "yetAnotherGroup").get(),
                 projectName,
                 "anyRef",
@@ -70,7 +70,7 @@
                 TimeUtil.nowTs()));
 
     assertThat(
-            validatorConfig.isEnabledForRef(
+            validatorConfig.isEnabled(
                 new FakeUserProvider("testGroupId").get(), projectName, "anyRef", "testOp"))
         .isFalse();
   }
@@ -88,7 +88,7 @@
             new FakeConfigFactory(projectName, config), new FakeGroupByNameFinder());
 
     assertThat(
-            validatorConfig.isEnabledForRef(
+            validatorConfig.isEnabled(
                 new FakeUserProvider("yetAnotherGroup").get(), projectName, "anyRef", "testOp"))
         .isTrue();
   }
@@ -105,7 +105,7 @@
         new ValidatorConfig(
             new FakeConfigFactory(projectName, config), new FakeGroupByNameFinder());
 
-    assertThat(validatorConfig.isEnabledForRef(anyUser, projectName, "anyRef", "anotherOp"))
+    assertThat(validatorConfig.isEnabled(anyUser, projectName, "anyRef", "anotherOp"))
         .isTrue();
   }
 
@@ -122,7 +122,7 @@
             new FakeConfigFactory(projectName, config), new FakeGroupByNameFinder());
 
     assertThat(
-            validatorConfig.isEnabledForRef(
+            validatorConfig.isEnabled(
                 new FakeUserProvider("testGroup").get(), projectName, "refs/heads/myref", "testOp"))
         .isFalse();
   }
@@ -140,7 +140,7 @@
             new FakeConfigFactory(projectName, config), new FakeGroupByNameFinder());
 
     assertThat(
-            validatorConfig.isEnabledForRef(
+            validatorConfig.isEnabled(
                 anyUser, projectName, "refs/heads/anotherRef", "testOp"))
         .isTrue();
   }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/TestUtils.java b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/TestUtils.java
index 22f95f0..f18295e 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/TestUtils.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/TestUtils.java
@@ -43,7 +43,8 @@
 import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
 
 public class TestUtils {
-  public static final PluginConfig EMPTY_PLUGIN_CONFIG = new PluginConfig("", new Config());
+  public static final PluginConfig EMPTY_PLUGIN_CONFIG =
+      PluginConfig.create("", new Config(), null);
 
   protected static final byte[] EMPTY_CONTENT = "".getBytes(Charsets.UTF_8);