Replace ChangeMessagesUtil calls with AccountTemplateUtil in code-owners

Change-Id: I8b0dc205fe0ea4e0cfdffa5db7b2c575ab0f4569
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java
index d11767a..12d17fa 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java
@@ -41,7 +41,6 @@
 import com.google.gerrit.plugins.codeowners.common.ChangedFile;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.metrics.CodeOwnerMetrics;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.approval.ApprovalsUtil;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.PureRevertCache;
@@ -51,6 +50,7 @@
 import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.permissions.PermissionBackendException;
 import com.google.gerrit.server.permissions.ProjectPermission;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.server.util.LabelVote;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -299,7 +299,7 @@
             changeNotes.getCurrentPatchSet(),
             String.format(
                 "patch set uploader %s is exempted from requiring code owner approvals",
-                ChangeMessagesUtil.getAccountTemplate(patchSetUploader)));
+                AccountTemplateUtil.getAccountTemplate(patchSetUploader)));
       }
 
       boolean arePureRevertsExempted = codeOwnersConfig.arePureRevertsExempted();
@@ -577,7 +577,7 @@
           String.format(
               "override approval %s by %s is present",
               override.get().label() + LabelValue.formatValue(override.get().value()),
-              ChangeMessagesUtil.getAccountTemplate(override.get().accountId())));
+              AccountTemplateUtil.getAccountTemplate(override.get().accountId())));
     }
 
     AtomicReference<CodeOwnerStatus> codeOwnerStatus =
@@ -745,7 +745,7 @@
           String.format(
               "implicitly approved by the patch set uploader %s who is a %s"
                   + " (all project owners are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(implicitApprover),
+              AccountTemplateUtil.getAccountTemplate(implicitApprover),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return true;
@@ -766,7 +766,7 @@
       reason.set(
           String.format(
               "approved by %s who is a %s (all project owners are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(approver.get()),
+              AccountTemplateUtil.getAccountTemplate(approver.get()),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return true;
@@ -787,7 +787,7 @@
       reason.set(
           String.format(
               "reviewer %s is a %s (all project owners are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(reviewer.get()),
+              AccountTemplateUtil.getAccountTemplate(reviewer.get()),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return true;
@@ -842,7 +842,7 @@
           String.format(
               "implicitly approved by the patch set uploader %s who is a %s"
                   + " (all users are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(implicitApprover),
+              AccountTemplateUtil.getAccountTemplate(implicitApprover),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return CodeOwnerStatus.APPROVED;
@@ -854,7 +854,7 @@
       reason.set(
           String.format(
               "approved by %s who is a %s (all users are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(approver.get()),
+              AccountTemplateUtil.getAccountTemplate(approver.get()),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return CodeOwnerStatus.APPROVED;
@@ -864,7 +864,7 @@
       reason.set(
           String.format(
               "reviewer %s is a %s (all users are %ss)",
-              ChangeMessagesUtil.getAccountTemplate(reviewer.get()),
+              AccountTemplateUtil.getAccountTemplate(reviewer.get()),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName(),
               CodeOwnerKind.FALLBACK_CODE_OWNER.getDisplayName()));
       return CodeOwnerStatus.PENDING;
@@ -899,7 +899,7 @@
         reason.set(
             String.format(
                 "implicitly approved by the patch set uploader %s who is a %s%s",
-                ChangeMessagesUtil.getAccountTemplate(implicitApprover),
+                AccountTemplateUtil.getAccountTemplate(implicitApprover),
                 codeOwnerKind.getDisplayName(),
                 codeOwners.ownedByAllUsers()
                     ? String.format(" (all users are %ss)", codeOwnerKind.getDisplayName())
@@ -921,7 +921,7 @@
       reason.set(
           String.format(
               "approved by %s who is a %s%s",
-              ChangeMessagesUtil.getAccountTemplate(approver.get()),
+              AccountTemplateUtil.getAccountTemplate(approver.get()),
               codeOwnerKind.getDisplayName(),
               codeOwners.ownedByAllUsers()
                   ? String.format(" (all users are %ss)", codeOwnerKind.getDisplayName())
@@ -959,7 +959,7 @@
       reason.set(
           String.format(
               "reviewer %s is a %s%s",
-              ChangeMessagesUtil.getAccountTemplate(reviewer.get()),
+              AccountTemplateUtil.getAccountTemplate(reviewer.get()),
               codeOwnerKind.getDisplayName(),
               codeOwners.ownedByAllUsers()
                   ? String.format(" (all users are %ss)", codeOwnerKind.getDisplayName())
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnersOnAddReviewer.java b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnersOnAddReviewer.java
index 58ad10e..b772b91 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnersOnAddReviewer.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnersOnAddReviewer.java
@@ -36,6 +36,7 @@
 import com.google.gerrit.server.update.BatchUpdateOp;
 import com.google.gerrit.server.update.ChangeContext;
 import com.google.gerrit.server.update.RetryHelper;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.server.util.time.TimeUtil;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -178,7 +179,7 @@
       message.append(
           String.format(
               "%s, who was added as reviewer owns the following files:\n",
-              ChangeMessagesUtil.getAccountTemplate(reviewerAccountId)));
+              AccountTemplateUtil.getAccountTemplate(reviewerAccountId)));
 
       if (ownedPaths.size() <= limit) {
         appendPaths(message, ownedPaths.stream());
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerApproval.java b/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerApproval.java
index 4fbc365..2383de2 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerApproval.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerApproval.java
@@ -26,10 +26,10 @@
 import com.google.gerrit.plugins.codeowners.backend.config.RequiredApproval;
 import com.google.gerrit.plugins.codeowners.metrics.CodeOwnerMetrics;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.restapi.change.OnPostReview;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.server.util.LabelVote;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -167,12 +167,12 @@
         message.append(
             String.format(
                 "By voting %s the following files are now explicitly code-owner approved by %s:\n",
-                newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       } else {
         message.append(
             String.format(
                 "By voting %s the following files are now code-owner approved by %s:\n",
-                newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       }
     } else if (isCodeOwnerApprovalRemoved(requiredApproval, oldApprovals, newVote)) {
       if (newVote.value() == 0) {
@@ -182,13 +182,13 @@
               String.format(
                   "By removing the %s vote the following files are no longer explicitly code-owner"
                       + " approved by %s:\n",
-                  newVote.label(), ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                  newVote.label(), AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
         } else {
           message.append(
               String.format(
                   "By removing the %s vote the following files are no longer code-owner approved"
                       + " by %s:\n",
-                  newVote.label(), ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                  newVote.label(), AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
         }
       } else {
         if (hasImplicitApprovalByUser) {
@@ -197,12 +197,12 @@
               String.format(
                   "By voting %s the following files are no longer explicitly code-owner approved by"
                       + " %s:\n",
-                  newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                  newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
         } else {
           message.append(
               String.format(
                   "By voting %s the following files are no longer code-owner approved by %s:\n",
-                  newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                  newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
         }
       }
     } else if (isCodeOwnerApprovalUpOrDowngraded(requiredApproval, oldApprovals, newVote)) {
@@ -211,12 +211,12 @@
             String.format(
                 "By voting %s the following files are still explicitly code-owner approved by"
                     + " %s:\n",
-                newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       } else {
         message.append(
             String.format(
                 "By voting %s the following files are still code-owner approved by %s:\n",
-                newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       }
     } else {
       // non-approval was downgraded (e.g. -1 to -2)
@@ -234,7 +234,7 @@
       message.append(
           String.format(
               "\nThe listed files are still implicitly approved by %s.\n",
-              ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+              AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
     }
 
     return Optional.of(message.toString());
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerOverride.java b/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerOverride.java
index d936fea..ea9fa59 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerOverride.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/OnCodeOwnerOverride.java
@@ -26,10 +26,10 @@
 import com.google.gerrit.plugins.codeowners.backend.config.CodeOwnersPluginProjectConfigSnapshot;
 import com.google.gerrit.plugins.codeowners.backend.config.RequiredApproval;
 import com.google.gerrit.plugins.codeowners.metrics.CodeOwnerMetrics;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.restapi.change.OnPostReview;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.server.util.LabelVote;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -128,24 +128,24 @@
       return Optional.of(
           String.format(
               "By voting %s the code-owners submit requirement is overridden by %s",
-              newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+              newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
     } else if (isCodeOwnerOverrideRemoved(overrideApproval, oldApprovals, newVote)) {
       if (newVote.value() == 0) {
         return Optional.of(
             String.format(
                 "By removing the %s vote the code-owners submit requirement is no longer overridden"
                     + " by %s",
-                newVote.label(), ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+                newVote.label(), AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
       }
       return Optional.of(
           String.format(
               "By voting %s the code-owners submit requirement is no longer overridden by %s",
-              newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+              newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
     } else if (isCodeOwnerOverrideUpOrDowngraded(overrideApproval, oldApprovals, newVote)) {
       return Optional.of(
           String.format(
               "By voting %s the code-owners submit requirement is still overridden by %s",
-              newVote, ChangeMessagesUtil.getAccountTemplate(user.getAccountId())));
+              newVote, AccountTemplateUtil.getAccountTemplate(user.getAccountId())));
     }
     // non-approval was downgraded (e.g. -1 to -2)
     return Optional.empty();
diff --git a/java/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJson.java b/java/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJson.java
index 1c32869..6872371 100644
--- a/java/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJson.java
+++ b/java/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJson.java
@@ -26,7 +26,6 @@
 import com.google.common.collect.Streams;
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.entities.Account;
-import com.google.gerrit.entities.ChangeMessage;
 import com.google.gerrit.entities.PatchSet;
 import com.google.gerrit.extensions.common.ChangeType;
 import com.google.gerrit.plugins.codeowners.api.CodeOwnerStatusInfo;
@@ -37,6 +36,7 @@
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
 import com.google.gerrit.server.account.AccountLoader;
 import com.google.gerrit.server.permissions.PermissionBackendException;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.util.Comparator;
@@ -136,7 +136,7 @@
                         : Stream.empty()))
         .forEach(
             reason -> {
-              Matcher matcher = ChangeMessage.ACCOUNT_TEMPLATE_PATTERN.matcher(reason);
+              Matcher matcher = AccountTemplateUtil.ACCOUNT_TEMPLATE_PATTERN.matcher(reason);
               while (matcher.find()) {
                 String accountIdString = matcher.group(1);
                 Optional<Account.Id> accountId = Account.Id.tryParse(accountIdString);
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnersOnAddReviewerIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnersOnAddReviewerIT.java
index b0890c1..595001f 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnersOnAddReviewerIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnersOnAddReviewerIT.java
@@ -25,7 +25,7 @@
 import com.google.gerrit.extensions.api.projects.DeleteBranchesInput;
 import com.google.gerrit.extensions.common.ChangeMessageInfo;
 import com.google.gerrit.plugins.codeowners.acceptance.AbstractCodeOwnersIT;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import java.util.Collection;
 import org.junit.Test;
 
@@ -90,7 +90,7 @@
         .isEqualTo(
             String.format(
                 "%s, who was added as reviewer owns the following files:\n* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 
   @Test
@@ -126,7 +126,7 @@
         .isEqualTo(
             String.format(
                 "%s, who was added as reviewer owns the following files:\n* %s\n* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path1, path2));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path1, path2));
   }
 
   @Test
@@ -193,7 +193,7 @@
                     + "* %s\n"
                     + "* %s\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path4, path3, path1, path2));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path4, path3, path1, path2));
   }
 
   @Test
@@ -239,7 +239,7 @@
                     + "* %s\n"
                     + "* %s\n"
                     + "(more files)\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path4, path3, path5));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path4, path3, path5));
   }
 
   @Test
@@ -322,7 +322,7 @@
         .isEqualTo(
             String.format(
                 "%s, who was added as reviewer owns the following files:\n* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 
   @Test
@@ -353,11 +353,11 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
     assertThat(Iterables.getLast(messages).message)
         .isEqualTo(
             String.format(
                 "%s, who was added as reviewer owns the following files:\n* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 }
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/GetCodeOwnerStatusIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/GetCodeOwnerStatusIT.java
index 75192fa..56ba30d 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/GetCodeOwnerStatusIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/GetCodeOwnerStatusIT.java
@@ -31,7 +31,7 @@
 import com.google.gerrit.plugins.codeowners.backend.FileCodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.inject.Inject;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -80,7 +80,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
     assertThat(codeOwnerStatus).hasMoreThat().isNull();
     assertThat(codeOwnerStatus).hasAccounts(user);
   }
@@ -139,13 +139,13 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
 
@@ -164,13 +164,13 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
 
@@ -188,13 +188,13 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
 
@@ -212,7 +212,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
     assertThat(codeOwnerStatus).hasAccounts(user);
 
     codeOwnerStatus =
@@ -306,7 +306,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
     assertThat(codeOwnerStatus).hasMoreThat().isTrue();
@@ -327,13 +327,13 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
     assertThat(codeOwnerStatus).hasMoreThat().isNull();
@@ -380,7 +380,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                   /* reasonNewPath= */ null));
@@ -404,7 +404,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     }
     assertThat(codeOwnerStatus).hasMoreThat().isNull();
     assertThat(codeOwnerStatus).hasAccounts(user);
@@ -468,7 +468,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))))
+                    AccountTemplateUtil.getAccountTemplate(user.id()))))
         .inOrder();
     assertThat(codeOwnerStatus).hasAccounts(user);
     assertThat(codeOwnerStatus).hasMoreThat().isTrue();
@@ -571,7 +571,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                   /* reasonNewPath= */ null));
@@ -585,7 +585,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                      AccountTemplateUtil.getAccountTemplate(user.id()))),
               FileCodeOwnerStatus.addition(newPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS));
     }
     assertThat(codeOwnerStatus).hasAccounts(user);
@@ -604,12 +604,12 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user2.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user2.id()))));
     } else {
       assertThat(codeOwnerStatus)
           .hasFileCodeOwnerStatusesThat()
@@ -620,13 +620,13 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                      AccountTemplateUtil.getAccountTemplate(user.id()))),
               FileCodeOwnerStatus.addition(
                   newPath,
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user2.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user2.id()))));
     }
     assertThat(codeOwnerStatus).hasAccounts(user, user2);
   }
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerApprovalIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerApprovalIT.java
index 48aeafb..efd2166 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerApprovalIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerApprovalIT.java
@@ -31,7 +31,7 @@
 import com.google.gerrit.extensions.common.ChangeMessageInfo;
 import com.google.gerrit.extensions.common.LabelDefinitionInput;
 import com.google.gerrit.plugins.codeowners.acceptance.AbstractCodeOwnersIT;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.FakeEmailSender.Message;
 import com.google.inject.Inject;
 import java.util.Collection;
@@ -87,7 +87,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -121,7 +121,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -163,7 +163,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
 
     // Apply the Code-Review+1 approval again and add an unrelated vote (Code-Review+1 is ignored).
     ReviewInput reviewInput = ReviewInput.recommend();
@@ -213,7 +213,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
 
     // Apply the Code-Review+1 approval again and add a comment (Code-Review +1 is ignored)
     ReviewInput.CommentInput commentInput = new ReviewInput.CommentInput();
@@ -254,7 +254,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
 
     // Apply the Code-Review+1 by another code owner
     requestScopeOperations.setApiUser(user.id());
@@ -268,7 +268,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 
   @Test
@@ -297,7 +297,7 @@
                     + "By voting Code-Review+2 the following files are still code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -329,7 +329,7 @@
                     + "By voting Code-Review+1 the following files are still explicitly code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -361,7 +361,7 @@
                     + "By voting Code-Review+2 the following files are still explicitly code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -390,7 +390,7 @@
                     + "By voting Code-Review+1 the following files are still code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -419,7 +419,7 @@
                     + "By removing the Code-Review vote the following files are no longer"
                     + " code-owner approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -449,7 +449,7 @@
                     + "By voting Code-Review-1 the following files are no longer code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -489,7 +489,7 @@
                     + " %s:\n"
                     + "* %s\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path1, path2));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path1, path2));
   }
 
   @Test
@@ -517,7 +517,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), oldPath));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), oldPath));
   }
 
   @Test
@@ -590,7 +590,7 @@
                     + "By voting Code-Review+1 the following files are now explicitly code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -623,9 +623,9 @@
                     + "* %s\n"
                     + "\n"
                     + "The listed files are still implicitly approved by %s.\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()),
+                AccountTemplateUtil.getAccountTemplate(admin.id()),
                 path,
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -658,9 +658,9 @@
                     + "* %s\n"
                     + "\n"
                     + "The listed files are still implicitly approved by %s.\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()),
+                AccountTemplateUtil.getAccountTemplate(admin.id()),
                 path,
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -688,7 +688,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -720,7 +720,7 @@
                     + "By removing the Code-Review vote the following files are no longer"
                     + " code-owner approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -752,7 +752,7 @@
                     + "By voting Code-Review-1 the following files are no longer code-owner"
                     + " approved by %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -797,7 +797,7 @@
                     + "* %s\n"
                     + "* %s\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path4, path3, path1, path2));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path4, path3, path1, path2));
   }
 
   @Test
@@ -845,7 +845,7 @@
                     + "* %s\n"
                     + "* %s\n"
                     + "(more files)\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path4, path3, path5));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path4, path3, path5));
   }
 
   @Test
@@ -911,7 +911,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -1070,7 +1070,7 @@
                     + "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id()), path));
+                AccountTemplateUtil.getAccountTemplate(user.id()), path));
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerOverrrideIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerOverrrideIT.java
index b03ef96..eaf507e 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerOverrrideIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/OnCodeOwnerOverrrideIT.java
@@ -31,7 +31,7 @@
 import com.google.gerrit.extensions.common.ChangeMessageInfo;
 import com.google.gerrit.extensions.common.LabelDefinitionInput;
 import com.google.gerrit.plugins.codeowners.acceptance.AbstractCodeOwnersIT;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.FakeEmailSender.Message;
 import com.google.inject.Inject;
 import java.util.Collection;
@@ -74,7 +74,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -111,7 +111,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
 
     // Apply the Owners-Override+1 approval by another user
     requestScopeOperations.setApiUser(user.id());
@@ -123,7 +123,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id())));
+                AccountTemplateUtil.getAccountTemplate(user.id())));
   }
 
   @Test
@@ -159,7 +159,7 @@
                 "Patch Set 1: Owners-Override+2\n\n"
                     + "By voting Owners-Override+2 the code-owners submit requirement is still"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -195,7 +195,7 @@
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is still"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -217,7 +217,7 @@
                 "Patch Set 1: -Owners-Override\n\n"
                     + "By removing the Owners-Override vote the code-owners submit requirement is"
                     + " no longer overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -253,7 +253,7 @@
                 "Patch Set 1: Owners-Override-1\n\n"
                     + "By voting Owners-Override-1 the code-owners submit requirement is no longer"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -311,7 +311,7 @@
                     + "(1 comment)\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -354,7 +354,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
   }
 
   @Test
@@ -389,8 +389,8 @@
                             + " overridden by %s\n\n"
                             + "By voting Owners-Override+1 the code-owners submit requirement is"
                             + " overridden by %s\n",
-                        ChangeMessagesUtil.getAccountTemplate(admin.id()),
-                        ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                        AccountTemplateUtil.getAccountTemplate(admin.id()),
+                        AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -424,14 +424,14 @@
             String.format(
                 "By voting Owners-Override+1 the code-owners submit requirement is"
                     + " overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id())));
+                AccountTemplateUtil.getAccountTemplate(admin.id())));
     assertThat(Iterables.getLast(messages).message)
         .contains(
             String.format(
                 "By voting Code-Review+1 the following files are now code-owner approved by"
                     + " %s:\n"
                     + "* %s\n",
-                ChangeMessagesUtil.getAccountTemplate(admin.id()), path));
+                AccountTemplateUtil.getAccountTemplate(admin.id()), path));
   }
 
   @Test
@@ -601,7 +601,7 @@
             String.format(
                 "Patch Set 1: Owners-Override+1\n\n"
                     + "By voting Owners-Override+1 the code-owners submit requirement is overridden by %s\n",
-                ChangeMessagesUtil.getAccountTemplate(user.id())));
+                AccountTemplateUtil.getAccountTemplate(user.id())));
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java
index 41bbc77..786f737 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java
@@ -47,8 +47,8 @@
 import com.google.gerrit.plugins.codeowners.acceptance.testsuite.CodeOwnerConfigOperations;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.notedb.ChangeNotes;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.inject.Inject;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -224,7 +224,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -254,7 +254,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -281,7 +281,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -322,7 +322,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                   /* reasonNewPath= */ null));
@@ -334,7 +334,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                      AccountTemplateUtil.getAccountTemplate(user.id()))),
               FileCodeOwnerStatus.addition(newPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS));
     }
   }
@@ -380,7 +380,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     } else {
       assertThatCollection(fileCodeOwnerStatuses)
           .containsExactly(
@@ -390,7 +390,7 @@
                   CodeOwnerStatus.PENDING,
                   String.format(
                       "reviewer %s is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     }
   }
 
@@ -414,7 +414,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -439,7 +439,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -461,7 +461,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -498,7 +498,7 @@
                   CodeOwnerStatus.APPROVED,
                   String.format(
                       "approved by %s who is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id())),
+                      AccountTemplateUtil.getAccountTemplate(user.id())),
                   newPath,
                   CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                   /* reasonNewPath= */ null));
@@ -510,7 +510,7 @@
                   CodeOwnerStatus.APPROVED,
                   String.format(
                       "approved by %s who is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                      AccountTemplateUtil.getAccountTemplate(user.id()))),
               FileCodeOwnerStatus.addition(newPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS));
     }
   }
@@ -552,7 +552,7 @@
                   CodeOwnerStatus.APPROVED,
                   String.format(
                       "approved by %s who is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     } else {
       assertThatCollection(fileCodeOwnerStatuses)
           .containsExactly(
@@ -562,7 +562,7 @@
                   CodeOwnerStatus.APPROVED,
                   String.format(
                       "approved by %s who is a code owner",
-                      ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                      AccountTemplateUtil.getAccountTemplate(user.id()))));
     }
   }
 
@@ -614,7 +614,7 @@
               CodeOwnerStatus.APPROVED,
               String.format(
                   "implicitly approved by the patch set uploader %s who is a code owner",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -674,7 +674,7 @@
               CodeOwnerStatus.APPROVED,
               String.format(
                   "implicitly approved by the patch set uploader %s who is a code owner",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.modification(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -731,7 +731,7 @@
               CodeOwnerStatus.APPROVED,
               String.format(
                   "implicitly approved by the patch set uploader %s who is a code owner",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.deletion(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -835,7 +835,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id())),
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id())),
                 newPath,
                 CodeOwnerStatus.INSUFFICIENT_REVIEWERS,
                 /* reasonNewPath= */ null);
@@ -858,7 +858,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
       } else {
         expectedFileDeletionCodeOwnerStatus =
             FileCodeOwnerStatus.deletion(oldPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -969,7 +969,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
       } else {
         expectedFileCodeOwnerStatus =
             FileCodeOwnerStatus.rename(
@@ -989,7 +989,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
       } else {
         expectedAddtitionFileCodeOwnerStatus =
             FileCodeOwnerStatus.addition(newPath, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -1057,7 +1057,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner (all users are code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1115,7 +1115,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a code owner"
                       + " (all users are code owners)",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -1160,7 +1160,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a code owner (all users are code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1201,7 +1201,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
   }
 
   @Test
@@ -1261,7 +1261,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a global code"
                       + " owner",
-                  ChangeMessagesUtil.getAccountTemplate(bot.id())));
+                  AccountTemplateUtil.getAccountTemplate(bot.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -1303,7 +1303,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
 
     // Let the bot approve the change.
     projectOperations
@@ -1324,7 +1324,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
   }
 
   @Test
@@ -1357,7 +1357,7 @@
                 String.format(
                     "approved by %s who is a global code owner"
                         + " (all users are global code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1408,7 +1408,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a global code owner"
                       + " (all users are global code owners)",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -1445,7 +1445,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a global code owner (all users are global code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1480,7 +1480,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1523,13 +1523,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))),
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1575,13 +1575,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))),
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
 
     // Delete the override approval.
     gApi.changes().id(changeId).current().review(new ReviewInput().label("Owners-Override", 0));
@@ -1605,13 +1605,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Another-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))),
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Another-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1782,7 +1782,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
 
     // Change some other file ('user' who uploads the change is a code owner and hence owner
     // approvals are implicit for this change)
@@ -1808,7 +1808,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1846,7 +1846,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
 
     // Change some other file and submit the change with an override.
     String changeId2 =
@@ -1871,7 +1871,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -1912,7 +1912,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -1964,7 +1964,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+2 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user2.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user2.id()))));
   }
 
   @Test
@@ -2004,7 +2004,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a default code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -2055,7 +2055,7 @@
               CodeOwnerStatus.APPROVED,
               String.format(
                   "implicitly approved by the patch set uploader %s who is a default code owner",
-                  ChangeMessagesUtil.getAccountTemplate(changeOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(changeOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -2096,7 +2096,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a default code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
 
     // Let the default code owner approve the change.
     projectOperations
@@ -2117,7 +2117,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a default code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -2225,7 +2225,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "patch set uploader %s is exempted from requiring code owner approvals",
-                    ChangeMessagesUtil.getAccountTemplate(exemptedUser.id()))));
+                    AccountTemplateUtil.getAccountTemplate(exemptedUser.id()))));
 
     // Amend the change by another user, so that the other non-exempted user becomes the last
     // uploader.
@@ -2259,7 +2259,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id()))));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id()))));
 
     // Allow all users to approve and submit changes.
     projectOperations
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithAllUsersAsFallbackCodeOwnersTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithAllUsersAsFallbackCodeOwnersTest.java
index b2340db..c91d897 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithAllUsersAsFallbackCodeOwnersTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithAllUsersAsFallbackCodeOwnersTest.java
@@ -26,8 +26,8 @@
 import com.google.gerrit.plugins.codeowners.backend.config.GeneralConfig;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.notedb.ChangeNotes;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.ConfigSuite;
 import com.google.inject.Inject;
 import java.nio.file.Path;
@@ -212,7 +212,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a fallback code owner (all users are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
 
     // Add a Code-Review+1 (= code owner approval) from a fallback code owner.
     requestScopeOperations.setApiUser(user.id());
@@ -228,7 +228,7 @@
                 String.format(
                     "approved by %s who is a fallback code owner"
                         + " (all users are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -249,7 +249,7 @@
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a fallback code"
                         + " owner (all users are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java
index ef3f830..dfb0144 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java
@@ -30,8 +30,8 @@
 import com.google.gerrit.plugins.codeowners.backend.config.GeneralConfig;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.notedb.ChangeNotes;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.ConfigSuite;
 import com.google.inject.Inject;
 import java.nio.file.Path;
@@ -106,7 +106,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
   }
 
   @Test
@@ -158,7 +158,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a global code"
                       + " owner",
-                  ChangeMessagesUtil.getAccountTemplate(bot.id())));
+                  AccountTemplateUtil.getAccountTemplate(bot.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -200,7 +200,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
 
     // Let the bot approve the change.
     projectOperations
@@ -221,7 +221,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a global code owner",
-                    ChangeMessagesUtil.getAccountTemplate(bot.id()))));
+                    AccountTemplateUtil.getAccountTemplate(bot.id()))));
   }
 
   @Test
@@ -254,7 +254,7 @@
                 String.format(
                     "approved by %s who is a global code owner"
                         + " (all users are global code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -306,7 +306,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a global code owner"
                       + " (all users are global code owners)",
-                  ChangeMessagesUtil.getAccountTemplate(projectOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(projectOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -343,7 +343,7 @@
                 CodeOwnerStatus.PENDING,
                 String.format(
                     "reviewer %s is a global code owner (all users are global code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -397,7 +397,7 @@
                 String.format(
                     "reviewer %s is a fallback code owner"
                         + " (all project owners are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -421,7 +421,7 @@
                 String.format(
                     "approved by %s who is a fallback code owner"
                         + " (all project owners are fallback code owners)",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -468,7 +468,7 @@
               String.format(
                   "implicitly approved by the patch set uploader %s who is a fallback code"
                       + " owner (all project owners are fallback code owners)",
-                  ChangeMessagesUtil.getAccountTemplate(projectOwner.id())));
+                  AccountTemplateUtil.getAccountTemplate(projectOwner.id())));
     } else {
       expectedFileCodeOwnerStatus =
           FileCodeOwnerStatus.addition(path, CodeOwnerStatus.INSUFFICIENT_REVIEWERS);
@@ -538,13 +538,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))),
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(admin.id()))));
+                    AccountTemplateUtil.getAccountTemplate(admin.id()))));
   }
 
   @Test
@@ -591,13 +591,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
 
     // Delete the override approval.
     gApi.changes().id(changeId).current().review(new ReviewInput().label("Owners-Override", 0));
@@ -621,13 +621,13 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Another-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))),
+                    AccountTemplateUtil.getAccountTemplate(user.id()))),
             FileCodeOwnerStatus.addition(
                 path2,
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Another-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   @Test
@@ -677,7 +677,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a default code owner",
-                    ChangeMessagesUtil.getAccountTemplate(user.id()))));
+                    AccountTemplateUtil.getAccountTemplate(user.id()))));
   }
 
   private ImmutableSet<FileCodeOwnerStatus> getFileCodeOwnerStatuses(String changeId)
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java
index 1dd01d2..a665ad4 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java
@@ -27,8 +27,8 @@
 import com.google.gerrit.plugins.codeowners.backend.config.OverrideApprovalConfig;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.util.JgitPath;
-import com.google.gerrit.server.ChangeMessagesUtil;
 import com.google.gerrit.server.notedb.ChangeNotes;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.testing.ConfigSuite;
 import com.google.inject.Inject;
 import java.nio.file.Path;
@@ -134,7 +134,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "approved by %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id()))));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id()))));
   }
 
   @Test
@@ -253,7 +253,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "implicitly approved by the patch set uploader %s who is a code owner",
-                    ChangeMessagesUtil.getAccountTemplate(codeOwner.id()))));
+                    AccountTemplateUtil.getAccountTemplate(codeOwner.id()))));
   }
 
   @Test
@@ -346,7 +346,7 @@
                 CodeOwnerStatus.APPROVED,
                 String.format(
                     "override approval Owners-Override+1 by %s is present",
-                    ChangeMessagesUtil.getAccountTemplate(changeOwner.id()))));
+                    AccountTemplateUtil.getAccountTemplate(changeOwner.id()))));
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJsonTest.java b/javatests/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJsonTest.java
index db40070..17fbdb1 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJsonTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/restapi/CodeOwnerStatusInfoJsonTest.java
@@ -36,7 +36,7 @@
 import com.google.gerrit.plugins.codeowners.common.ChangedFile;
 import com.google.gerrit.plugins.codeowners.common.CodeOwnerStatus;
 import com.google.gerrit.plugins.codeowners.testing.FileCodeOwnerStatusInfoSubject;
-import com.google.gerrit.server.ChangeMessagesUtil;
+import com.google.gerrit.server.util.AccountTemplateUtil;
 import com.google.gerrit.truth.ListSubject;
 import java.nio.file.Paths;
 import java.util.Optional;
@@ -301,13 +301,14 @@
   public void formatCodeOwnerStatusInfoWithReasonsThatReferenceAccounts() throws Exception {
     TestAccount user2 = accountCreator.user2();
     String reason1 =
-        String.format("because %s did something", ChangeMessagesUtil.getAccountTemplate(user.id()));
+        String.format(
+            "because %s did something", AccountTemplateUtil.getAccountTemplate(user.id()));
     String reason2 =
         String.format(
             "because %s, %s and %s did something else",
-            ChangeMessagesUtil.getAccountTemplate(admin.id()),
-            ChangeMessagesUtil.getAccountTemplate(user.id()),
-            ChangeMessagesUtil.getAccountTemplate(user2.id()));
+            AccountTemplateUtil.getAccountTemplate(admin.id()),
+            AccountTemplateUtil.getAccountTemplate(user.id()),
+            AccountTemplateUtil.getAccountTemplate(user2.id()));
     ChangedFile changedFile = mock(ChangedFile.class);
     when(changedFile.changeType()).thenReturn(DiffEntry.ChangeType.ADD);
     PathCodeOwnerStatus pathCodeOwnerStatus =