aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar Janak Ramakrishnan <janakr@google.com>2015-06-04 19:50:15 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-06-05 09:38:58 +0000
commitf27f43885662d047c9cf3c4227ae8642b87a08b6 (patch)
tree6b397d49521ed6c596a0ef53073f8edaa040d049 /src/main/java/com/google/devtools/build/lib/analysis
parenta206b76f76e4620ae33c4f19fa4eb67046d65a63 (diff)
Add debugging for mysterious crash.
-- MOS_MIGRATED_REVID=95227410
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/CachingAnalysisEnvironment.java29
1 files changed, 25 insertions, 4 deletions
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 cc076e00b8..913ea2bfb9 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.ArtifactOwner;
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 @@ public class CachingAnalysisEnvironment implements AnalysisEnvironment {
.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();
}