diff options
author | John Cater <jcater@google.com> | 2017-09-25 10:58:41 -0400 |
---|---|---|
committer | John Cater <jcater@google.com> | 2017-09-25 12:02:51 -0400 |
commit | 77112c6ee7cc98e3e2732e54bee3f45efc5179bf (patch) | |
tree | a94b8810f4dd79357dac70bcbb11ad96dba64ad5 /src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java | |
parent | 66ab13fad654881ed3caccde7c9e0422b222e32e (diff) |
Update RegisteredToolchainsFunction and ToolchainUtil to check values for errors even if not all values are present.
Fixes #3751.
Change-Id: I92fd7527384800beca80b9daac58f3a7760268b2
PiperOrigin-RevId: 169907526
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java index 8bb828c9b6..b7d64927bb 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java @@ -93,17 +93,21 @@ public class RegisteredToolchainsFunction implements SkyFunction { Map<SkyKey, ValueOrException<ConfiguredValueCreationException>> values = env.getValuesOrThrow(keys, ConfiguredValueCreationException.class); - if (env.valuesMissing()) { - return null; - } ImmutableList.Builder<DeclaredToolchainInfo> toolchains = new ImmutableList.Builder<>(); + boolean valuesMissing = false; for (SkyKey key : keys) { ConfiguredTargetKey configuredTargetKey = (ConfiguredTargetKey) key.argument(); Label toolchainLabel = configuredTargetKey.getLabel(); try { + ValueOrException<ConfiguredValueCreationException> valueOrException = values.get(key); + if (valueOrException.get() == null) { + valuesMissing = true; + continue; + } ConfiguredTarget target = - ((ConfiguredTargetValue) values.get(key).get()).getConfiguredTarget(); + ((ConfiguredTargetValue) valueOrException.get()).getConfiguredTarget(); DeclaredToolchainInfo toolchainInfo = target.getProvider(DeclaredToolchainInfo.class); + if (toolchainInfo == null) { throw new RegisteredToolchainsFunctionException( new InvalidToolchainLabelException(toolchainLabel), Transience.PERSISTENT); @@ -114,6 +118,10 @@ public class RegisteredToolchainsFunction implements SkyFunction { new InvalidToolchainLabelException(toolchainLabel, e), Transience.PERSISTENT); } } + + if (valuesMissing) { + return null; + } return toolchains.build(); } |