ChangeEditApiImpl: Access non-Singleton change edit classes via Provider

Change-Id: I9a9259ee4c02f0e6f2dbff0287d1c5abd83d2a2d
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ChangeEditApiImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ChangeEditApiImpl.java
index d1b57e6..45b7540 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ChangeEditApiImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ChangeEditApiImpl.java
@@ -34,6 +34,7 @@
 import com.google.gerrit.server.change.RebaseChangeEdit;
 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.Optional;
@@ -43,42 +44,42 @@
     ChangeEditApiImpl create(ChangeResource changeResource);
   }
 
-  private final ChangeEdits.Detail editDetail;
+  private final Provider<ChangeEdits.Detail> editDetailProvider;
   private final ChangeEdits.Post changeEditsPost;
   private final DeleteChangeEdit deleteChangeEdit;
   private final RebaseChangeEdit.Rebase rebaseChangeEdit;
   private final PublishChangeEdit.Publish publishChangeEdit;
-  private final ChangeEdits.Get changeEditsGet;
+  private final Provider<ChangeEdits.Get> changeEditsGetProvider;
   private final ChangeEdits.Put changeEditsPut;
   private final ChangeEdits.DeleteContent changeEditDeleteContent;
-  private final ChangeEdits.GetMessage getChangeEditCommitMessage;
+  private final Provider<ChangeEdits.GetMessage> getChangeEditCommitMessageProvider;
   private final ChangeEdits.EditMessage modifyChangeEditCommitMessage;
   private final ChangeEdits changeEdits;
   private final ChangeResource changeResource;
 
   @Inject
   public ChangeEditApiImpl(
-      ChangeEdits.Detail editDetail,
+      Provider<ChangeEdits.Detail> editDetailProvider,
       ChangeEdits.Post changeEditsPost,
       DeleteChangeEdit deleteChangeEdit,
       RebaseChangeEdit.Rebase rebaseChangeEdit,
       PublishChangeEdit.Publish publishChangeEdit,
-      ChangeEdits.Get changeEditsGet,
+      Provider<ChangeEdits.Get> changeEditsGetProvider,
       ChangeEdits.Put changeEditsPut,
       ChangeEdits.DeleteContent changeEditDeleteContent,
-      ChangeEdits.GetMessage getChangeEditCommitMessage,
+      Provider<ChangeEdits.GetMessage> getChangeEditCommitMessageProvider,
       ChangeEdits.EditMessage modifyChangeEditCommitMessage,
       ChangeEdits changeEdits,
       @Assisted ChangeResource changeResource) {
-    this.editDetail = editDetail;
+    this.editDetailProvider = editDetailProvider;
     this.changeEditsPost = changeEditsPost;
     this.deleteChangeEdit = deleteChangeEdit;
     this.rebaseChangeEdit = rebaseChangeEdit;
     this.publishChangeEdit = publishChangeEdit;
-    this.changeEditsGet = changeEditsGet;
+    this.changeEditsGetProvider = changeEditsGetProvider;
     this.changeEditsPut = changeEditsPut;
     this.changeEditDeleteContent = changeEditDeleteContent;
-    this.getChangeEditCommitMessage = getChangeEditCommitMessage;
+    this.getChangeEditCommitMessageProvider = getChangeEditCommitMessageProvider;
     this.modifyChangeEditCommitMessage = modifyChangeEditCommitMessage;
     this.changeEdits = changeEdits;
     this.changeResource = changeResource;
@@ -87,7 +88,7 @@
   @Override
   public Optional<EditInfo> get() throws RestApiException {
     try {
-      Response<EditInfo> edit = editDetail.apply(changeResource);
+      Response<EditInfo> edit = editDetailProvider.get().apply(changeResource);
       return edit.isNone() ? Optional.empty() : Optional.of(edit.value());
     } catch (Exception e) {
       throw asRestApiException("Cannot retrieve change edit", e);
@@ -139,7 +140,7 @@
   public Optional<BinaryResult> getFile(String filePath) throws RestApiException {
     try {
       ChangeEditResource changeEditResource = getChangeEditResource(filePath);
-      Response<BinaryResult> fileResponse = changeEditsGet.apply(changeEditResource);
+      Response<BinaryResult> fileResponse = changeEditsGetProvider.get().apply(changeEditResource);
       return fileResponse.isNone() ? Optional.empty() : Optional.of(fileResponse.value());
     } catch (Exception e) {
       throw asRestApiException("Cannot retrieve file of change edit", e);
@@ -190,7 +191,8 @@
   @Override
   public String getCommitMessage() throws RestApiException {
     try {
-      try (BinaryResult binaryResult = getChangeEditCommitMessage.apply(changeResource)) {
+      try (BinaryResult binaryResult =
+          getChangeEditCommitMessageProvider.get().apply(changeResource)) {
         return binaryResult.asString();
       }
     } catch (Exception e) {