MergeOp: Use factories of the subscription components

After this, submoduleOp is not the instantiator of all this classes and
can focus on what it does: updating superprojects.

Change-Id: Ie5d1b547fc3815356591c4ccefa9944ec0867559
diff --git a/java/com/google/gerrit/server/submit/MergeOp.java b/java/com/google/gerrit/server/submit/MergeOp.java
index 354bd49..b304dd0 100644
--- a/java/com/google/gerrit/server/submit/MergeOp.java
+++ b/java/com/google/gerrit/server/submit/MergeOp.java
@@ -226,7 +226,9 @@
   private final MergeValidators.Factory mergeValidatorsFactory;
   private final Provider<InternalChangeQuery> queryProvider;
   private final SubmitStrategyFactory submitStrategyFactory;
+  private final SubscriptionGraph.Factory subscriptionGraphFactory;
   private final SubmoduleOp.Factory subOpFactory;
+  private final SubmoduleCommits.Factory submoduleCommitsFactory;
   private final Provider<MergeOpRepoManager> ormProvider;
   private final NotifyResolver notifyResolver;
   private final RetryHelper retryHelper;
@@ -256,6 +258,8 @@
       MergeValidators.Factory mergeValidatorsFactory,
       Provider<InternalChangeQuery> queryProvider,
       SubmitStrategyFactory submitStrategyFactory,
+      SubmoduleCommits.Factory submoduleCommitsFactory,
+      SubscriptionGraph.Factory subscriptionGraphFactory,
       SubmoduleOp.Factory subOpFactory,
       Provider<MergeOpRepoManager> ormProvider,
       NotifyResolver notifyResolver,
@@ -269,6 +273,8 @@
     this.mergeValidatorsFactory = mergeValidatorsFactory;
     this.queryProvider = queryProvider;
     this.submitStrategyFactory = submitStrategyFactory;
+    this.submoduleCommitsFactory = submoduleCommitsFactory;
+    this.subscriptionGraphFactory = subscriptionGraphFactory;
     this.subOpFactory = subOpFactory;
     this.ormProvider = ormProvider;
     this.notifyResolver = notifyResolver;
@@ -605,10 +611,9 @@
     commitStatus.maybeFailVerbose();
 
     try {
-      SubmoduleOp submoduleOp = subOpFactory.create(branches, orm);
-      UpdateOrderCalculator updateOrderCalculator = submoduleOp.getUpdateOrderCalculator();
-      SubscriptionGraph subscriptionGraph = submoduleOp.getSubscriptionGraph();
-      SubmoduleCommits submoduleCommits = submoduleOp.getSubmoduleCommits();
+      SubscriptionGraph subscriptionGraph = subscriptionGraphFactory.compute(branches, orm);
+      SubmoduleCommits submoduleCommits = submoduleCommitsFactory.create(orm);
+      UpdateOrderCalculator updateOrderCalculator = new UpdateOrderCalculator(subscriptionGraph);
       List<SubmitStrategy> strategies =
           getSubmitStrategies(
               toSubmit, updateOrderCalculator, submoduleCommits, subscriptionGraph, dryrun);
diff --git a/java/com/google/gerrit/server/submit/SubmoduleOp.java b/java/com/google/gerrit/server/submit/SubmoduleOp.java
index 94a432a..8bfcd51 100644
--- a/java/com/google/gerrit/server/submit/SubmoduleOp.java
+++ b/java/com/google/gerrit/server/submit/SubmoduleOp.java
@@ -70,20 +70,6 @@
     this.updateOrderCalculator = new UpdateOrderCalculator(subscriptionGraph);
   }
 
-  // TODO(ifrade): subscription graph should be instantiated somewhere else and passed to
-  // SubmoduleOp
-  SubscriptionGraph getSubscriptionGraph() {
-    return subscriptionGraph;
-  }
-
-  SubmoduleCommits getSubmoduleCommits() {
-    return submoduleCommits;
-  }
-
-  UpdateOrderCalculator getUpdateOrderCalculator() {
-    return updateOrderCalculator;
-  }
-
   @UsedAt(UsedAt.Project.PLUGIN_DELETE_PROJECT)
   public boolean hasSuperproject(BranchNameKey branch) {
     return subscriptionGraph.hasSuperproject(branch);