Add debugging for mysterious crash.

--
MOS_MIGRATED_REVID=95227410
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
index cc076e0..913ea2b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java
@@ -25,12 +25,15 @@
 import com.google.devtools.build.lib.actions.MiddlemanFactory;
 import com.google.devtools.build.lib.actions.Root;
 import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoCollection;
+import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
 import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoKey;
 import com.google.devtools.build.lib.analysis.config.BinTools;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.StoredEventHandler;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.skyframe.BuildInfoCollectionValue;
+import com.google.devtools.build.lib.skyframe.PrecomputedValue;
 import com.google.devtools.build.lib.skyframe.WorkspaceStatusValue;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -284,13 +287,31 @@
             .getVolatileArtifact();
   }
 
+  // See SkyframeBuildView#getWorkspaceStatusValues for the code that this method is attempting to
+  // verify.
+  private NullPointerException collectDebugInfoAndCrash(
+      BuildInfoKey key, BuildConfiguration config) {
+    String debugInfo = key + " " + config;
+    Preconditions.checkState(skyframeEnv.valuesMissing(), debugInfo);
+    Map<BuildInfoKey, BuildInfoFactory> buildInfoFactories = Preconditions.checkNotNull(
+        PrecomputedValue.BUILD_INFO_FACTORIES.get(skyframeEnv), debugInfo);
+    BuildInfoFactory buildInfoFactory =
+        Preconditions.checkNotNull(buildInfoFactories.get(key), debugInfo);
+    Preconditions.checkState(buildInfoFactory.isEnabled(config), debugInfo);
+    throw new NullPointerException("BuildInfoCollectionValue shouldn't have been null");
+  }
+
   @Override
   public ImmutableList<Artifact> getBuildInfo(RuleContext ruleContext, BuildInfoKey key) {
     boolean stamp = AnalysisUtils.isStampingEnabled(ruleContext);
-    BuildInfoCollection collection =
-        ((BuildInfoCollectionValue) skyframeEnv.getValue(BuildInfoCollectionValue.key(
-        new BuildInfoCollectionValue.BuildInfoKeyAndConfig(key, ruleContext.getConfiguration()))))
-        .getCollection();
+    BuildInfoCollectionValue collectionValue =
+        (BuildInfoCollectionValue) skyframeEnv.getValue(BuildInfoCollectionValue.key(
+            new BuildInfoCollectionValue.BuildInfoKeyAndConfig(
+                key, ruleContext.getConfiguration())));
+    if (collectionValue == null) {
+      throw collectDebugInfoAndCrash(key, ruleContext.getConfiguration());
+    }
+    BuildInfoCollection collection = collectionValue.getCollection();
    return stamp ? collection.getStampedBuildInfo() : collection.getRedactedBuildInfo();
   }