diff options
author | 2017-08-04 22:44:03 +0200 | |
---|---|---|
committer | 2017-08-07 11:22:20 +0200 | |
commit | 535daee4c40816dcbf51cca1d33363cbc76c9753 (patch) | |
tree | c19376392c4b1011a5d644fb8137823868173e95 /src/main/java/com/google/devtools | |
parent | 5393a4996d701fa192964a35cbb75e558a0599c0 (diff) |
Adding further error messages for cases where invalid labels are used with register_toolchains.
Fixes #3429.
Change-Id: Iae5632c4b866994a849032bbc2757a6a5151cc6a
PiperOrigin-RevId: 164304020
Diffstat (limited to 'src/main/java/com/google/devtools')
5 files changed, 45 insertions, 40 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java index 292ce4d635..69e2ff2ffa 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java +++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java @@ -420,7 +420,9 @@ public class WorkspaceFactory { } catch (LabelSyntaxException e) { throw new EvalException( ast.getLocation(), - String.format("Unable to parse toolchain %s: %s", rawLabel, e.getMessage()), + String.format( + "In register_toolchains: unable to parse toolchain label %s: %s", + rawLabel, e.getMessage()), e); } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java index d650fdbc13..92c6e4440a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java @@ -71,7 +71,6 @@ import com.google.devtools.build.lib.skyframe.AspectFunction.AspectCreationExcep import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey; import com.google.devtools.build.lib.skyframe.SkyframeExecutor.BuildViewProvider; import com.google.devtools.build.lib.skyframe.ToolchainUtil.ToolchainContextException; -import com.google.devtools.build.lib.skyframe.ToolchainUtil.UnresolvedToolchainsException; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.util.OrderedSetMultimap; import com.google.devtools.build.lib.util.Preconditions; @@ -300,20 +299,21 @@ public final class ConfiguredTargetFunction implements SkyFunction { throw new ConfiguredTargetFunctionException( new ConfiguredValueCreationException(e.getMessage(), analysisRootCause)); } catch (ToolchainContextException e) { - if (e.getCause() instanceof UnresolvedToolchainsException) { - UnresolvedToolchainsException ute = (UnresolvedToolchainsException) e.getCause(); - env.getListener() - .handle(Event.error(ute.getMessage() + " for target " + target.getLabel())); - throw new ConfiguredTargetFunctionException( - new ConfiguredValueCreationException(ute.getMessage(), target.getLabel())); - } else if (e.getCause() instanceof ConfiguredValueCreationException) { - ConfiguredValueCreationException cvce = (ConfiguredValueCreationException) e.getCause(); - throw new ConfiguredTargetFunctionException(cvce); + // We need to throw a ConfiguredValueCreationException, so either find one or make one. + ConfiguredValueCreationException cvce; + if (e.getCause() instanceof ConfiguredValueCreationException) { + cvce = (ConfiguredValueCreationException) e.getCause(); } else { - // TODO(katre): better error handling - throw new ConfiguredTargetFunctionException( - new ConfiguredValueCreationException(e.getMessage())); + cvce = new ConfiguredValueCreationException(e.getCause().getMessage(), target.getLabel()); } + + env.getListener() + .handle( + Event.error( + String.format( + "While resolving toolchains for target %s: %s", + target.getLabel(), e.getCause().getMessage()))); + throw new ConfiguredTargetFunctionException(cvce); } finally { cpuBoundSemaphore.release(); } 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 666da966c1..8bb828c9b6 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 @@ -106,11 +106,12 @@ public class RegisteredToolchainsFunction implements SkyFunction { DeclaredToolchainInfo toolchainInfo = target.getProvider(DeclaredToolchainInfo.class); if (toolchainInfo == null) { throw new RegisteredToolchainsFunctionException( - new InvalidTargetException(toolchainLabel), Transience.PERSISTENT); + new InvalidToolchainLabelException(toolchainLabel), Transience.PERSISTENT); } toolchains.add(toolchainInfo); } catch (ConfiguredValueCreationException e) { - throw new RegisteredToolchainsFunctionException(e, Transience.PERSISTENT); + throw new RegisteredToolchainsFunctionException( + new InvalidToolchainLabelException(toolchainLabel, e), Transience.PERSISTENT); } } return toolchains.build(); @@ -126,12 +127,22 @@ public class RegisteredToolchainsFunction implements SkyFunction { * Used to indicate that the given {@link Label} represents a {@link ConfiguredTarget} which is * not a valid {@link DeclaredToolchainInfo} provider. */ - public static final class InvalidTargetException extends Exception { + public static final class InvalidToolchainLabelException extends Exception { private final Label invalidLabel; - public InvalidTargetException(Label invalidLabel) { - super(String.format("target '%s' does not provide a toolchain", invalidLabel)); + public InvalidToolchainLabelException(Label invalidLabel) { + super( + String.format( + "invalid registered toolchain '%s': " + + "target does not provide the DeclaredToolchainInfo provider", + invalidLabel)); + this.invalidLabel = invalidLabel; + } + + public InvalidToolchainLabelException(Label invalidLabel, ConfiguredValueCreationException e) { + super( + String.format("invalid registered toolchain '%s': %s", invalidLabel, e.getMessage()), e); this.invalidLabel = invalidLabel; } @@ -147,13 +158,8 @@ public class RegisteredToolchainsFunction implements SkyFunction { public static class RegisteredToolchainsFunctionException extends SkyFunctionException { public RegisteredToolchainsFunctionException( - InvalidTargetException cause, Transience transience) { + InvalidToolchainLabelException cause, Transience transience) { super(cause, transience); } - - public RegisteredToolchainsFunctionException( - ConfiguredValueCreationException cause, Transience persistent) { - super(cause, persistent); - } } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java index 410578f497..f222b3855a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java @@ -27,7 +27,7 @@ import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.NoSuchThingException; import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.ConfiguredValueCreationException; -import com.google.devtools.build.lib.skyframe.RegisteredToolchainsFunction.InvalidTargetException; +import com.google.devtools.build.lib.skyframe.RegisteredToolchainsFunction.InvalidToolchainLabelException; import com.google.devtools.build.lib.skyframe.ToolchainResolutionValue.ToolchainResolutionKey; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.skyframe.SkyFunction; @@ -62,15 +62,12 @@ public class ToolchainResolutionFunction implements SkyFunction { (RegisteredToolchainsValue) env.getValueOrThrow( RegisteredToolchainsValue.key(key.configuration()), - ConfiguredValueCreationException.class, - InvalidTargetException.class, + InvalidToolchainLabelException.class, EvalException.class); if (toolchains == null) { return null; } - } catch (ConfiguredValueCreationException e) { - throw new ToolchainResolutionFunctionException(e); - } catch (InvalidTargetException e) { + } catch (InvalidToolchainLabelException e) { throw new ToolchainResolutionFunctionException(e); } catch (EvalException e) { throw new ToolchainResolutionFunctionException(e); @@ -203,7 +200,7 @@ public class ToolchainResolutionFunction implements SkyFunction { super(e, Transience.PERSISTENT); } - public ToolchainResolutionFunctionException(InvalidTargetException e) { + public ToolchainResolutionFunctionException(InvalidToolchainLabelException e) { super(e, Transience.PERSISTENT); } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java index 4b1840ac1b..925c854c67 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java @@ -26,7 +26,7 @@ import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.analysis.platform.PlatformProviderUtils; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.ConfiguredValueCreationException; -import com.google.devtools.build.lib.skyframe.RegisteredToolchainsFunction.InvalidTargetException; +import com.google.devtools.build.lib.skyframe.RegisteredToolchainsFunction.InvalidToolchainLabelException; import com.google.devtools.build.lib.skyframe.ToolchainResolutionFunction.NoToolchainFoundException; import com.google.devtools.build.lib.skyframe.ToolchainResolutionValue.ToolchainResolutionKey; import com.google.devtools.build.lib.syntax.EvalException; @@ -140,14 +140,14 @@ public class ToolchainUtil { Map< SkyKey, ValueOrException4< - NoToolchainFoundException, ConfiguredValueCreationException, InvalidTargetException, - EvalException>> + NoToolchainFoundException, ConfiguredValueCreationException, + InvalidToolchainLabelException, EvalException>> results = env.getValuesOrThrow( registeredToolchainKeys, NoToolchainFoundException.class, ConfiguredValueCreationException.class, - InvalidTargetException.class, + InvalidToolchainLabelException.class, EvalException.class); if (env.valuesMissing()) { return null; @@ -159,8 +159,8 @@ public class ToolchainUtil { for (Map.Entry< SkyKey, ValueOrException4< - NoToolchainFoundException, ConfiguredValueCreationException, InvalidTargetException, - EvalException>> + NoToolchainFoundException, ConfiguredValueCreationException, + InvalidToolchainLabelException, EvalException>> entry : results.entrySet()) { try { Label requiredToolchainType = @@ -172,7 +172,7 @@ public class ToolchainUtil { missingToolchains.add(e.missingToolchainType()); } catch (ConfiguredValueCreationException e) { throw new ToolchainContextException(e); - } catch (InvalidTargetException e) { + } catch (InvalidToolchainLabelException e) { throw new ToolchainContextException(e); } catch (EvalException e) { throw new ToolchainContextException(e); @@ -213,7 +213,7 @@ public class ToolchainUtil { super(e); } - public ToolchainContextException(InvalidTargetException e) { + public ToolchainContextException(InvalidToolchainLabelException e) { super(e); } |