Support adding reviewers in batch mode

Bug: Issue 10336
Change-Id: I7da2be74f8c2f00e27c4381fca8bb73b9504e1b8
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
index 0866648..ba55862 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
@@ -17,25 +17,24 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Ordering;
 import com.google.common.collect.Sets;
+import com.google.gerrit.extensions.api.GerritApi;
 import com.google.gerrit.extensions.api.changes.AddReviewerInput;
+import com.google.gerrit.extensions.api.changes.ReviewInput;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Patch.ChangeType;
 import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gerrit.server.account.AccountCache;
 import com.google.gerrit.server.account.Emails;
-import com.google.gerrit.server.change.ChangeResource;
-import com.google.gerrit.server.change.ChangesCollection;
-import com.google.gerrit.server.change.PostReviewers;
 import com.google.gerrit.server.patch.PatchList;
 import com.google.gerrit.server.patch.PatchListCache;
 import com.google.gerrit.server.patch.PatchListEntry;
 import com.google.gerrit.server.patch.PatchListNotAvailableException;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 import com.google.inject.assistedinject.Assisted;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
@@ -64,8 +63,7 @@
   private final Emails emails;
   private final AccountCache accountCache;
   private final PatchListCache patchListCache;
-  private final Provider<PostReviewers> reviewersProvider;
-  private final ChangesCollection changes;
+  private final GerritApi gApi;
 
   public interface Factory {
     ReviewersByBlame create(
@@ -81,9 +79,8 @@
   public ReviewersByBlame(
       final Emails emails,
       final AccountCache accountCache,
-      final ChangesCollection changes,
-      final Provider<PostReviewers> reviewersProvider,
       final PatchListCache patchListCache,
+      GerritApi gApi,
       @Assisted final RevCommit commit,
       @Assisted final Change change,
       @Assisted final PatchSet ps,
@@ -92,9 +89,8 @@
       @Assisted final String ignoreFileRegEx) {
     this.emails = emails;
     this.accountCache = accountCache;
-    this.changes = changes;
-    this.reviewersProvider = reviewersProvider;
     this.patchListCache = patchListCache;
+    this.gApi = gApi;
     this.commit = commit;
     this.change = change;
     this.ps = ps;
@@ -139,13 +135,14 @@
    */
   private void addReviewers(Set<Account.Id> topReviewers, Change change) {
     try {
-      ChangeResource changeResource = changes.parse(change.getId());
-      PostReviewers post = reviewersProvider.get();
-      for (Account.Id accountId : topReviewers) {
-        AddReviewerInput input = new AddReviewerInput();
-        input.reviewer = accountId.toString();
-        post.apply(changeResource, input);
+      ReviewInput in = new ReviewInput();
+      in.reviewers = new ArrayList<>(topReviewers.size());
+      for (Account.Id account : topReviewers) {
+        AddReviewerInput addReviewerInput = new AddReviewerInput();
+        addReviewerInput.reviewer = account.toString();
+        in.reviewers.add(addReviewerInput);
       }
+      gApi.changes().id(change.getChangeId()).current().review(in);
     } catch (Exception ex) {
       log.error("Couldn't add reviewers to the change", ex);
     }