Adapt to API change in Gerrit core

Change I1c24da1378 in Gerrit core moved the Accounts.byEmail(String)
and Accounts.byEmails(String...) methods into a new Emails class. These
methods are now called Emails.getAccountFor(String) and
Emails.getAccountsFor(String...).

Change-Id: If63202ff7bcefa1f6bd0af4dc07b7303a8e2273d
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/findowners/Action.java b/src/main/java/com/googlesource/gerrit/plugins/findowners/Action.java
index 0eba65b..f4dbca4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/findowners/Action.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/findowners/Action.java
@@ -27,7 +27,7 @@
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountCache;
-import com.google.gerrit.server.account.Accounts;
+import com.google.gerrit.server.account.Emails;
 import com.google.gerrit.server.change.ChangeResource;
 import com.google.gerrit.server.change.RevisionResource;
 import com.google.gerrit.server.config.PluginConfigFactory;
@@ -55,7 +55,7 @@
   private static final Logger log = LoggerFactory.getLogger(Action.class);
 
   private AccountCache accountCache;
-  private Accounts accounts;
+  private Emails emails;
   private ChangeData.Factory changeDataFactory;
   private GitRepositoryManager repoManager;
   private Provider<CurrentUser> userProvider;
@@ -74,13 +74,13 @@
       SchemaFactory<ReviewDb> reviewDbProvider,
       ChangeData.Factory changeDataFactory,
       AccountCache accountCache,
-      Accounts accounts,
+      Emails emails,
       GitRepositoryManager repoManager) {
     this.userProvider = userProvider;
     this.reviewDbProvider = reviewDbProvider;
     this.changeDataFactory = changeDataFactory;
     this.accountCache = accountCache;
-    this.accounts = accounts;
+    this.emails = emails;
     this.repoManager = repoManager;
     Config.setVariables(pluginName, configFactory);
     Cache.getInstance(); // Create a single Cache.
@@ -171,7 +171,7 @@
       Repository repository, Parameters params, ChangeData changeData)
       throws OrmException, BadRequestException {
     int patchset = getValidPatchsetNum(changeData, params.patchset);
-    OwnersDb db = Cache.getInstance().get(accountCache, accounts, repository, changeData, patchset);
+    OwnersDb db = Cache.getInstance().get(accountCache, emails, repository, changeData, patchset);
     Collection<String> changedFiles = changeData.currentFilePaths();
     Map<String, Set<String>> file2Owners = db.findOwners(changedFiles);
 
@@ -216,7 +216,7 @@
       if (needFindOwners && !Config.getAlwaysShowButton()) {
         needFindOwners = false; // Show button only if some owner is found.
         try (Repository repo = repoManager.openRepository(change.getProject())) {
-          OwnersDb db = Cache.getInstance().get(accountCache, accounts, repo, changeData);
+          OwnersDb db = Cache.getInstance().get(accountCache, emails, repo, changeData);
           log.trace("getDescription db key = " + db.key);
           needFindOwners = db.getNumOwners() > 0;
         }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/findowners/Cache.java b/src/main/java/com/googlesource/gerrit/plugins/findowners/Cache.java
index 10fdebf..b9e1f43 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/findowners/Cache.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/findowners/Cache.java
@@ -19,7 +19,7 @@
 import com.google.common.cache.CacheBuilder;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.account.AccountCache;
-import com.google.gerrit.server.account.Accounts;
+import com.google.gerrit.server.account.Emails;
 import com.google.gerrit.server.query.change.ChangeData;
 import com.google.gwtorm.server.OrmException;
 import java.util.Collection;
@@ -87,16 +87,16 @@
   }
 
   /** Returns a cached or new OwnersDb, for the current patchset. */
-  OwnersDb get(AccountCache accountCache, Accounts accounts, Repository repo, ChangeData changeData)
+  OwnersDb get(AccountCache accountCache, Emails emails, Repository repo, ChangeData changeData)
       throws OrmException {
     return get(
-        accountCache, accounts, repo, changeData, changeData.currentPatchSet().getId().get());
+        accountCache, emails, repo, changeData, changeData.currentPatchSet().getId().get());
   }
 
   /** Returns a cached or new OwnersDb, for the specified patchset. */
   OwnersDb get(
       AccountCache accountCache,
-      Accounts accounts,
+      Emails emails,
       Repository repository,
       ChangeData changeData,
       int patchset)
@@ -106,13 +106,13 @@
     String dbKey = Cache.makeKey(changeData.getId().get(), patchset, branch);
     // TODO: get changed files of the given patchset?
     return get(
-        accountCache, accounts, dbKey, repository, project, branch, changeData.currentFilePaths());
+        accountCache, emails, dbKey, repository, project, branch, changeData.currentFilePaths());
   }
 
   /** Returns a cached or new OwnersDb, for the specified branch and changed files. */
   OwnersDb get(
       AccountCache accountCache,
-      Accounts accounts,
+      Emails emails,
       String key,
       Repository repository,
       Project.NameKey project,
@@ -120,7 +120,7 @@
       Collection<String> files) {
     if (dbCache == null) { // Do not cache OwnersDb
       log.trace("Create new OwnersDb, key=" + key);
-      return new OwnersDb(accountCache, accounts, key, repository, project, branch, files);
+      return new OwnersDb(accountCache, emails, key, repository, project, branch, files);
     }
     try {
       log.trace("Get from cash " + dbCache + ", key=" + key + ", cache size=" + dbCache.size());
@@ -130,12 +130,12 @@
             @Override
             public OwnersDb call() {
               log.trace("Create new OwnersDb, key=" + key);
-              return new OwnersDb(accountCache, accounts, key, repository, project, branch, files);
+              return new OwnersDb(accountCache, emails, key, repository, project, branch, files);
             }
           });
     } catch (ExecutionException e) {
       log.error("Cache.get has exception: " + e);
-      return new OwnersDb(accountCache, accounts, key, repository, project, branch, files);
+      return new OwnersDb(accountCache, emails, key, repository, project, branch, files);
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/findowners/Checker.java b/src/main/java/com/googlesource/gerrit/plugins/findowners/Checker.java
index 6b9897d..8ecca66 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/findowners/Checker.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/findowners/Checker.java
@@ -18,7 +18,7 @@
 import com.google.gerrit.reviewdb.client.PatchSetApproval;
 import com.google.gerrit.rules.StoredValues;
 import com.google.gerrit.server.account.AccountCache;
-import com.google.gerrit.server.account.Accounts;
+import com.google.gerrit.server.account.Emails;
 import com.google.gerrit.server.query.change.ChangeData;
 import com.google.gwtorm.server.OrmException;
 import com.googlecode.prolog_cafe.lang.Prolog;
@@ -103,10 +103,10 @@
   public static int findApproval(Prolog engine, int minVoteLevel) {
     try {
       AccountCache accountCache = StoredValues.ACCOUNT_CACHE.get(engine);
-      Accounts accounts = StoredValues.ACCOUNTS.get(engine);
+      Emails emails = StoredValues.EMAILS.get(engine);
       ChangeData changeData = StoredValues.CHANGE_DATA.get(engine);
       Repository repository = StoredValues.REPOSITORY.get(engine);
-      return new Checker(repository, changeData, minVoteLevel).findApproval(accountCache, accounts);
+      return new Checker(repository, changeData, minVoteLevel).findApproval(accountCache, emails);
     } catch (OrmException e) {
       log.error("Exception", e);
       return 0; // owner approval may or may not be required.
@@ -129,13 +129,13 @@
     return (status == Status.ABANDONED || status == Status.MERGED);
   }
 
-  int findApproval(AccountCache accountCache, Accounts accounts) throws OrmException {
+  int findApproval(AccountCache accountCache, Emails emails) throws OrmException {
     if (isExemptFromOwnerApproval(changeData)) {
       return 0;
     }
     // One update to a Gerrit change can call submit_rule or submit_filter
     // many times. So this function should use cached values.
-    OwnersDb db = Cache.getInstance().get(accountCache, accounts, repository, changeData);
+    OwnersDb db = Cache.getInstance().get(accountCache, emails, repository, changeData);
     if (db.getNumOwners() <= 0) {
       return 0;
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/findowners/GetOwners.java b/src/main/java/com/googlesource/gerrit/plugins/findowners/GetOwners.java
index e918be7..fd60850 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/findowners/GetOwners.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/findowners/GetOwners.java
@@ -21,7 +21,7 @@
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.account.AccountCache;
-import com.google.gerrit.server.account.Accounts;
+import com.google.gerrit.server.account.Emails;
 import com.google.gerrit.server.change.ChangeResource;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.git.GitRepositoryManager;
@@ -57,7 +57,7 @@
       SchemaFactory<ReviewDb> reviewDbProvider,
       ChangeData.Factory dataFactory,
       AccountCache accountCache,
-      Accounts accounts,
+      Emails emails,
       GitRepositoryManager repoManager) {
     this.action =
         new Action(
@@ -67,7 +67,7 @@
             reviewDbProvider,
             dataFactory,
             accountCache,
-            accounts,
+            emails,
             repoManager);
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/findowners/OwnersDb.java b/src/main/java/com/googlesource/gerrit/plugins/findowners/OwnersDb.java
index 381430d..3d4eb82 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/findowners/OwnersDb.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/findowners/OwnersDb.java
@@ -20,7 +20,7 @@
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.account.AccountCache;
-import com.google.gerrit.server.account.Accounts;
+import com.google.gerrit.server.account.Emails;
 import java.nio.file.FileSystem;
 import java.nio.file.FileSystems;
 import java.nio.file.PathMatcher;
@@ -46,7 +46,7 @@
   private static final Logger log = LoggerFactory.getLogger(OwnersDb.class);
 
   private AccountCache accountCache;
-  private Accounts accounts;
+  private Emails emails;
   private int numOwners = -1; // # of owners of all given files.
 
   String key = ""; // key to find this OwnersDb in a cache.
@@ -63,14 +63,14 @@
 
   OwnersDb(
       AccountCache accountCache,
-      Accounts accounts,
+      Emails emails,
       String key,
       Repository repository,
       Project.NameKey project,
       String branch,
       Collection<String> files) {
     this.accountCache = accountCache;
-    this.accounts = accounts;
+    this.emails = emails;
     this.key = key;
     preferredEmails.put("*", "*");
     String ownersFileName = Config.getOwnersFileName(project);
@@ -132,15 +132,15 @@
     List<String> owners = new ArrayList<>(ownerEmails);
     owners.removeIf(o -> preferredEmails.get(o) != null);
     if (!owners.isEmpty()) {
-      String[] emails = new String[owners.size()];
-      owners.toArray(emails);
+      String[] ownerEmailsAsArray = new String[owners.size()];
+      owners.toArray(ownerEmailsAsArray);
       Multimap<String, Account.Id> email2ids = null;
       try {
-        email2ids = accounts.byEmails(emails);
+        email2ids = emails.getAccountsFor(ownerEmailsAsArray);
       } catch (Exception e) {
         log.error("accounts.byEmails failed with exception: ", e);
       }
-      for (String owner : emails) {
+      for (String owner : ownerEmailsAsArray) {
         String email = owner;
         try {
           if (email2ids == null) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/findowners/FindOwnersIT.java b/src/test/java/com/googlesource/gerrit/plugins/findowners/FindOwnersIT.java
index b72c860..cc7d73a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/findowners/FindOwnersIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/findowners/FindOwnersIT.java
@@ -32,6 +32,7 @@
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.client.RefNames;
+import com.google.gerrit.server.account.Emails;
 import com.google.gerrit.server.change.ChangeResource;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.inject.Inject;
@@ -48,6 +49,7 @@
 @TestPlugin(name = "find-owners", sysModule = "com.googlesource.gerrit.plugins.findowners.Module")
 public class FindOwnersIT extends LightweightPluginDaemonTest {
 
+  @Inject private Emails emails;
   @Inject private PluginConfigFactory configFactory;
 
   @Test
@@ -186,12 +188,12 @@
       gApi.accounts().id(users[i]).addEmail(input);
     }
     // Find accounts with given first and second email addresses.
-    // OwnersDb uses either accounts.byEmail or byEmails to get preferred email addresses.
-    Multimap<String, Account.Id> map1 = accounts.byEmails(emails1);
-    Multimap<String, Account.Id> map2 = accounts.byEmails(emails2);
+    // OwnersDb uses either emails.getAccountFor or getAccountsFor to get preferred email addresses.
+    Multimap<String, Account.Id> map1 = emails.getAccountsFor(emails1);
+    Multimap<String, Account.Id> map2 = emails.getAccountsFor(emails2);
     for (int i = 0; i < users.length; i++) {
-      Collection<Account.Id> ids1 = accounts.byEmail(emails1[i]);
-      Collection<Account.Id> ids2 = accounts.byEmail(emails2[i]);
+      Collection<Account.Id> ids1 = emails.getAccountFor(emails1[i]);
+      Collection<Account.Id> ids2 = emails.getAccountFor(emails2[i]);
       Collection<Account.Id> ids3 = map1.get(emails1[i]);
       Collection<Account.Id> ids4 = map2.get(emails2[i]);
       assertThat(ids1).hasSize(1);
@@ -210,9 +212,9 @@
     }
     // Wrong or non-existing email address.
     String[] wrongEmails = {"nobody", "@g.com", "nobody@g.com", "*"};
-    Multimap<String, Account.Id> email2ids = accounts.byEmails(wrongEmails);
+    Multimap<String, Account.Id> email2ids = emails.getAccountsFor(wrongEmails);
     for (String email : wrongEmails) {
-      assertThat(accounts.byEmail(email)).isEmpty();
+      assertThat(emails.getAccountFor(email)).isEmpty();
       assertThat(email2ids.get(email)).isEmpty();
     }
   }
@@ -331,7 +333,7 @@
             null,
             changeDataFactory,
             accountCache,
-            accounts,
+            emails,
             repoManager);
     Response<RestResult> response = action.apply(db, cr, param);
     RestResult result = response.value();
@@ -443,7 +445,7 @@
   private int checkApproval(PushOneCommit.Result r) throws Exception {
     Repository repo = repoManager.openRepository(r.getChange().project());
     Cache cache = Cache.getInstance().init(0, 0);
-    OwnersDb db = cache.get(accountCache, accounts, repo, r.getChange(), 1);
+    OwnersDb db = cache.get(accountCache, emails, repo, r.getChange(), 1);
     Checker c = new Checker(repo, r.getChange(), 1);
     return c.findApproval(accountCache, db);
   }