diff options
author | Janak Ramakrishnan <janakr@google.com> | 2015-06-04 19:50:15 +0000 |
---|---|---|
committer | Florian Weikert <fwe@google.com> | 2015-06-05 09:38:58 +0000 |
commit | f27f43885662d047c9cf3c4227ae8642b87a08b6 (patch) | |
tree | 6b397d49521ed6c596a0ef53073f8edaa040d049 /src/main/java/com/google/devtools/build/lib/analysis | |
parent | a206b76f76e4620ae33c4f19fa4eb67046d65a63 (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.java | 29 |
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(); } |