Split AnalysisResult into a top-level class

PiperOrigin-RevId: 200363345
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
new file mode 100644
index 0000000..6239328
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisResult.java
@@ -0,0 +1,156 @@
+// Copyright 2018 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.analysis;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+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.skyframe.AspectValue;
+import java.util.Collection;
+import java.util.List;
+import javax.annotation.Nullable;
+
+/**
+ * Return value for {@link com.google.devtools.build.lib.buildtool.AnalysisPhaseRunner}.
+ */
+public final class AnalysisResult {
+  private final ImmutableSet<ConfiguredTarget> targetsToBuild;
+  @Nullable private final ImmutableList<ConfiguredTarget> targetsToTest;
+  private final ImmutableSet<ConfiguredTarget> targetsToSkip;
+  @Nullable private final String error;
+  private final ActionGraph actionGraph;
+  private final ImmutableSet<Artifact> artifactsToBuild;
+  private final ImmutableSet<ConfiguredTarget> parallelTests;
+  private final ImmutableSet<ConfiguredTarget> exclusiveTests;
+  @Nullable private final TopLevelArtifactContext topLevelContext;
+  private final ImmutableSet<AspectValue> aspects;
+  private final PackageRoots packageRoots;
+  private final String workspaceName;
+  private final List<TargetAndConfiguration> topLevelTargetsWithConfigs;
+
+  AnalysisResult(
+      Collection<ConfiguredTarget> targetsToBuild,
+      ImmutableSet<AspectValue> aspects,
+      Collection<ConfiguredTarget> targetsToTest,
+      Collection<ConfiguredTarget> targetsToSkip,
+      @Nullable String error,
+      ActionGraph actionGraph,
+      Collection<Artifact> artifactsToBuild,
+      Collection<ConfiguredTarget> parallelTests,
+      Collection<ConfiguredTarget> exclusiveTests,
+      TopLevelArtifactContext topLevelContext,
+      PackageRoots packageRoots,
+      String workspaceName,
+      List<TargetAndConfiguration> topLevelTargetsWithConfigs) {
+    this.targetsToBuild = ImmutableSet.copyOf(targetsToBuild);
+    this.aspects = aspects;
+    this.targetsToTest = targetsToTest == null ? null : ImmutableList.copyOf(targetsToTest);
+    this.targetsToSkip = ImmutableSet.copyOf(targetsToSkip);
+    this.error = error;
+    this.actionGraph = actionGraph;
+    this.artifactsToBuild = ImmutableSet.copyOf(artifactsToBuild);
+    this.parallelTests = ImmutableSet.copyOf(parallelTests);
+    this.exclusiveTests = ImmutableSet.copyOf(exclusiveTests);
+    this.topLevelContext = topLevelContext;
+    this.packageRoots = packageRoots;
+    this.workspaceName = workspaceName;
+    this.topLevelTargetsWithConfigs = topLevelTargetsWithConfigs;
+  }
+
+  /**
+   * Returns configured targets to build.
+   */
+  public ImmutableSet<ConfiguredTarget> getTargetsToBuild() {
+    return targetsToBuild;
+  }
+
+  /** @see PackageRoots */
+  public PackageRoots getPackageRoots() {
+    return packageRoots;
+  }
+
+  /**
+   * Returns aspects of configured targets to build.
+   *
+   * <p>If this list is empty, build the targets returned by {@code getTargetsToBuild()}.
+   * Otherwise, only build these aspects of the targets returned by {@code getTargetsToBuild()}.
+   */
+  public ImmutableSet<AspectValue> getAspects() {
+    return aspects;
+  }
+
+  /**
+   * Returns the configured targets to run as tests, or {@code null} if testing was not
+   * requested (e.g. "build" command rather than "test" command).
+   */
+  @Nullable
+  public Collection<ConfiguredTarget> getTargetsToTest() {
+    return targetsToTest;
+  }
+
+  /**
+   * Returns the configured targets that should not be executed because they're not
+   * platform-compatible with the current build.
+   *
+   * <p>For example: tests that aren't intended for the designated CPU.
+   */
+  public ImmutableSet<ConfiguredTarget> getTargetsToSkip() {
+    return targetsToSkip;
+  }
+
+  public ImmutableSet<Artifact> getAdditionalArtifactsToBuild() {
+    return artifactsToBuild;
+  }
+
+  public ImmutableSet<ConfiguredTarget> getExclusiveTests() {
+    return exclusiveTests;
+  }
+
+  public ImmutableSet<ConfiguredTarget> getParallelTests() {
+    return parallelTests;
+  }
+
+  /**
+   * Returns an error description (if any).
+   */
+  @Nullable public String getError() {
+    return error;
+  }
+
+  public boolean hasError() {
+    return error != null;
+  }
+
+  /**
+   * Returns the action graph.
+   */
+  public ActionGraph getActionGraph() {
+    return actionGraph;
+  }
+
+  public TopLevelArtifactContext getTopLevelContext() {
+    return topLevelContext;
+  }
+
+  public String getWorkspaceName() {
+    return workspaceName;
+  }
+
+  public List<TargetAndConfiguration> getTopLevelTargetsWithConfigs() {
+    return topLevelTargetsWithConfigs;
+  }
+}