Rephrase the ActionGraph in terms of the WalkableGraph. This should be more efficient if we need to do many ActionGraph looups.

--
MOS_MIGRATED_REVID=100060090
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 d150986..42fe145 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
@@ -32,6 +32,7 @@
 import com.google.devtools.build.lib.actions.ActionGraph;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.ArtifactFactory;
+import com.google.devtools.build.lib.actions.ArtifactOwner;
 import com.google.devtools.build.lib.actions.PackageRootResolver;
 import com.google.devtools.build.lib.actions.Root;
 import com.google.devtools.build.lib.analysis.DependencyResolver.Dependency;
@@ -63,15 +64,18 @@
 import com.google.devtools.build.lib.pkgcache.PackageManager;
 import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory;
 import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory.CoverageReportActionsWrapper;
+import com.google.devtools.build.lib.skyframe.ActionLookupValue;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.skyframe.CoverageReportValue;
 import com.google.devtools.build.lib.skyframe.SkyframeBuildView;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Label;
+import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.util.RegexFilter;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.skyframe.SkyKey;
+import com.google.devtools.build.skyframe.WalkableGraph;
 import com.google.devtools.common.options.Option;
 import com.google.devtools.common.options.OptionsBase;
 
@@ -600,9 +604,12 @@
     prepareToBuild(new SkyframePackageRootResolver(skyframeExecutor));
     skyframeExecutor.injectWorkspaceStatusData();
     Collection<ConfiguredTarget> configuredTargets;
+    WalkableGraph graph;
     try {
-      configuredTargets = skyframeBuildView.configureTargets(
-          targetSpecs, eventBus, viewOptions.keepGoing);
+      Pair<Collection<ConfiguredTarget>, WalkableGraph> configuredTargetsResult =
+          skyframeBuildView.configureTargets(targetSpecs, eventBus, viewOptions.keepGoing);
+      configuredTargets = configuredTargetsResult.getFirst();
+      graph = configuredTargetsResult.getSecond();
     } finally {
       skyframeBuildView.clearInvalidatedConfiguredTargets();
     }
@@ -618,14 +625,15 @@
     }
 
     AnalysisResult result = createResult(loadingResult, topLevelOptions,
-        viewOptions, configuredTargets, analysisSuccessful);
+        viewOptions, configuredTargets, analysisSuccessful, graph);
     LOG.info("Finished analysis");
     return result;
   }
 
   private AnalysisResult createResult(LoadingResult loadingResult,
       TopLevelArtifactContext topLevelOptions, BuildView.Options viewOptions,
-      Collection<ConfiguredTarget> configuredTargets, boolean analysisSuccessful)
+      Collection<ConfiguredTarget> configuredTargets, boolean analysisSuccessful,
+      final WalkableGraph graph)
           throws InterruptedException {
     Collection<Target> testsToRun = loadingResult.getTestsToRun();
     Collection<ConfiguredTarget> allTargetsToTest = null;
@@ -666,7 +674,21 @@
             ? null
             : "execution phase succeeded, but not all targets were analyzed")
           : "execution phase succeeded, but there were loading phase errors";
-    return new AnalysisResult(configuredTargets, allTargetsToTest, error, getActionGraph(),
+
+    final ActionGraph actionGraph = new ActionGraph() {
+      @Nullable
+      @Override
+      public Action getGeneratingAction(Artifact artifact) {
+        ArtifactOwner artifactOwner = artifact.getArtifactOwner();
+        if (artifactOwner instanceof ActionLookupValue.ActionLookupKey) {
+          SkyKey key = ActionLookupValue.key((ActionLookupValue.ActionLookupKey) artifactOwner);
+          ActionLookupValue val = (ActionLookupValue) graph.getValue(key);
+          return val == null ? null : val.getGeneratingAction(artifact);
+        }
+        return null;
+      }
+    };
+    return new AnalysisResult(configuredTargets, allTargetsToTest, error, actionGraph,
         artifactsToBuild, parallelTests, exclusiveTests, topLevelOptions);
   }