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 b872620..005da44 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailValidator.java
@@ -116,7 +116,7 @@
               receiveEvent.getRefName(),
               KEY_ALLOWED_AUTHOR_EMAIL_PATTERN,
               receiveEvent.pushOptions)) {
-        if (!performValidation(
+        if (!match(
             receiveEvent.commit.getAuthorIdent().getEmailAddress(),
             getAllowedAuthorEmailPatterns(cfg))) {
           throw new CommitValidationException(
@@ -132,7 +132,7 @@
               receiveEvent.getRefName(),
               KEY_ALLOWED_COMMITTER_EMAIL_PATTERN,
               receiveEvent.pushOptions)) {
-        if (!performValidation(
+        if (!match(
             receiveEvent.commit.getCommitterIdent().getEmailAddress(),
             getAllowedCommitterEmailPatterns(cfg))) {
           throw new CommitValidationException(
@@ -148,8 +148,8 @@
   }
 
   @VisibleForTesting
-  static boolean performValidation(String email, String[] allowedEmailPatterns) {
-    return Arrays.stream(allowedEmailPatterns)
+  static boolean match(String email, String[] emailPatterns) {
+    return Arrays.stream(emailPatterns)
         .anyMatch(s -> Pattern.matches(s, Strings.nullToEmpty(email)));
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailTest.java b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailTest.java
index 0b208f2..d54658c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/uploadvalidator/ChangeEmailTest.java
@@ -20,7 +20,7 @@
 import org.junit.Test;
 
 public class ChangeEmailTest {
-  private static final String[] allowedEmailPatterns = {
+  private static final String[] emailPatterns = {
     ".*@example\\.com.*",
     "testing\\.com",
     "tester@testing\\.com",
@@ -29,41 +29,29 @@
   };
 
   @Test
-  public void testEmailValid() throws Exception {
-    assertThat(
-            ChangeEmailValidator.performValidation("tester@example.com.net", allowedEmailPatterns))
-        .isTrue();
-    assertThat(ChangeEmailValidator.performValidation("tester@testing.com", allowedEmailPatterns))
-        .isTrue();
-    assertThat(ChangeEmailValidator.performValidation("tester@google.com", allowedEmailPatterns))
-        .isTrue();
-    assertThat(ChangeEmailValidator.performValidation("tester@gerrit.net", allowedEmailPatterns))
-        .isTrue();
+  public void testEmailMatches() throws Exception {
+    assertThat(ChangeEmailValidator.match("tester@example.com.net", emailPatterns)).isTrue();
+    assertThat(ChangeEmailValidator.match("tester@testing.com", emailPatterns)).isTrue();
+    assertThat(ChangeEmailValidator.match("tester@google.com", emailPatterns)).isTrue();
+    assertThat(ChangeEmailValidator.match("tester@gerrit.net", emailPatterns)).isTrue();
   }
 
   @Test
-  public void testEmailInvalid() throws Exception {
-    assertThat(ChangeEmailValidator.performValidation("tester@example.org", allowedEmailPatterns))
-        .isFalse();
-    assertThat(ChangeEmailValidator.performValidation("test@testing.com", allowedEmailPatterns))
-        .isFalse();
-    assertThat(
-            ChangeEmailValidator.performValidation("tester@google.com.net", allowedEmailPatterns))
-        .isFalse();
-    assertThat(
-            ChangeEmailValidator.performValidation(
-                "emailtester@gerritnet.com", allowedEmailPatterns))
-        .isFalse();
+  public void testEmailDoesNotMatch() throws Exception {
+    assertThat(ChangeEmailValidator.match("tester@example.org", emailPatterns)).isFalse();
+    assertThat(ChangeEmailValidator.match("test@testing.com", emailPatterns)).isFalse();
+    assertThat(ChangeEmailValidator.match("tester@google.com.net", emailPatterns)).isFalse();
+    assertThat(ChangeEmailValidator.match("emailtester@gerritnet.com", emailPatterns)).isFalse();
   }
 
   @Test
-  public void testEmailNull() throws Exception {
-    assertThat(ChangeEmailValidator.performValidation(null, allowedEmailPatterns)).isFalse();
+  public void testEmailNullDoesNotMatch() throws Exception {
+    assertThat(ChangeEmailValidator.match(null, emailPatterns)).isFalse();
   }
 
   @Test
-  public void testEmailEmpty() throws Exception {
-    assertThat(ChangeEmailValidator.performValidation("", allowedEmailPatterns)).isFalse();
+  public void testEmailEmptyDoesNotMatch() throws Exception {
+    assertThat(ChangeEmailValidator.match("", emailPatterns)).isFalse();
   }
 
   @Test
