Add the BuildConfigurationCollection to the AnalysisResult

This is in preparation for interleaving config creation with loading+analysis.

PiperOrigin-RevId: 200695071
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisResult.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisResult.java
index 6239328..4015513 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisResult.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisResult.java
@@ -19,6 +19,7 @@
 import com.google.devtools.build.lib.actions.ActionGraph;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.PackageRoots;
+import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection;
 import com.google.devtools.build.lib.skyframe.AspectValue;
 import java.util.Collection;
 import java.util.List;
@@ -28,6 +29,7 @@
  * Return value for {@link com.google.devtools.build.lib.buildtool.AnalysisPhaseRunner}.
  */
 public final class AnalysisResult {
+  private final BuildConfigurationCollection configurations;
   private final ImmutableSet<ConfiguredTarget> targetsToBuild;
   @Nullable private final ImmutableList<ConfiguredTarget> targetsToTest;
   private final ImmutableSet<ConfiguredTarget> targetsToSkip;
@@ -43,6 +45,7 @@
   private final List<TargetAndConfiguration> topLevelTargetsWithConfigs;
 
   AnalysisResult(
+      BuildConfigurationCollection configurations,
       Collection<ConfiguredTarget> targetsToBuild,
       ImmutableSet<AspectValue> aspects,
       Collection<ConfiguredTarget> targetsToTest,
@@ -56,6 +59,7 @@
       PackageRoots packageRoots,
       String workspaceName,
       List<TargetAndConfiguration> topLevelTargetsWithConfigs) {
+    this.configurations = configurations;
     this.targetsToBuild = ImmutableSet.copyOf(targetsToBuild);
     this.aspects = aspects;
     this.targetsToTest = targetsToTest == null ? null : ImmutableList.copyOf(targetsToTest);
@@ -71,6 +75,10 @@
     this.topLevelTargetsWithConfigs = topLevelTargetsWithConfigs;
   }
 
+  public BuildConfigurationCollection getConfigurationCollection() {
+    return configurations;
+  }
+
   /**
    * Returns configured targets to build.
    */
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index 1b3e291..c223113 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -342,6 +342,7 @@
         createResult(
             eventHandler,
             loadingResult,
+            configurations,
             topLevelOptions,
             viewOptions,
             skyframeAnalysisResult,
@@ -354,6 +355,7 @@
   private AnalysisResult createResult(
       ExtendedEventHandler eventHandler,
       LoadingResult loadingResult,
+      BuildConfigurationCollection configurations,
       TopLevelArtifactContext topLevelOptions,
       AnalysisOptions viewOptions,
       SkyframeAnalysisResult skyframeAnalysisResult,
@@ -438,6 +440,7 @@
           }
         };
     return new AnalysisResult(
+        configurations,
         configuredTargets,
         aspects,
         allTargetsToTest,
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
index 32307e0..b88952a 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
@@ -229,14 +229,13 @@
                   AbortReason.SKIPPED,
                   String.format("Target %s build was skipped.", label), label));
         }
-        postProcessAnalysisResult(request, analysisResult, configurations);
+        postProcessAnalysisResult(request, analysisResult);
         // Execution phase.
         if (needsExecutionPhase(request.getBuildOptions())) {
           executionTool.executeBuild(
               request.getId(),
               analysisResult,
               result,
-              configurations,
               analysisResult.getPackageRoots(),
               request.getTopLevelArtifactContext());
         } else {
@@ -303,10 +302,10 @@
    */
   protected void postProcessAnalysisResult(
       BuildRequest request,
-      AnalysisResult analysisResult,
-      BuildConfigurationCollection configurations)
+      AnalysisResult analysisResult)
       throws InterruptedException, ViewCreationFailedException,
-          PostAnalysisQueryCommandLineException {}
+          PostAnalysisQueryCommandLineException {
+  }
 
   private void reportExceptionError(Exception e) {
     if (e.getMessage() != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
index 8f1e409..58afd6b 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
@@ -47,7 +47,6 @@
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction;
 import com.google.devtools.build.lib.analysis.actions.SymlinkTreeActionContext;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection;
 import com.google.devtools.build.lib.buildtool.buildevent.ExecutionPhaseCompleteEvent;
 import com.google.devtools.build.lib.buildtool.buildevent.ExecutionStartingEvent;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
@@ -213,7 +212,6 @@
       UUID buildId,
       AnalysisResult analysisResult,
       BuildResult buildResult,
-      BuildConfigurationCollection configurations,
       PackageRoots packageRoots,
       TopLevelArtifactContext topLevelArtifactContext)
       throws BuildFailedException, InterruptedException, TestExecException, AbruptExitException {
@@ -253,7 +251,8 @@
                 .distinct()
                 .map((key) -> env.getSkyframeExecutor().getConfiguration(env.getReporter(), key))
                 .collect(toImmutableSet())
-            : ImmutableSet.copyOf(configurations.getTargetConfigurations());
+            : ImmutableSet.copyOf(
+                analysisResult.getConfigurationCollection().getTargetConfigurations());
     String productName = runtime.getProductName();
     String workspaceName = env.getWorkspaceName();
     OutputDirectoryLinksUtils.createOutputDirectoryLinks(
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryBuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryBuildTool.java
index 941f53e..31681b1 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryBuildTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryBuildTool.java
@@ -17,7 +17,6 @@
 import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
 import com.google.devtools.build.lib.analysis.ViewCreationFailedException;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.query2.ConfiguredTargetQueryEnvironment;
 import com.google.devtools.build.lib.query2.CqueryThreadsafeCallback;
@@ -48,8 +47,7 @@
   @Override
   protected void postProcessAnalysisResult(
       BuildRequest request,
-      AnalysisResult analysisResult,
-      BuildConfigurationCollection configurations)
+      AnalysisResult analysisResult)
       throws InterruptedException, ViewCreationFailedException,
           PostAnalysisQueryCommandLineException {
     // TODO: b/71905538 - this query will operate over the graph as constructed by analysis, but
@@ -66,7 +64,7 @@
       try {
         doPostAnalysisQuery(
             request,
-            configurations.getHostConfiguration(),
+            analysisResult.getConfigurationCollection().getHostConfiguration(),
             analysisResult.getTopLevelTargetsWithConfigs(),
             queryExpression);
       } catch (QueryException | IOException e) {