aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2017-08-04 22:44:03 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-08-07 11:22:20 +0200
commit535daee4c40816dcbf51cca1d33363cbc76c9753 (patch)
treec19376392c4b1011a5d644fb8137823868173e95 /src/main/java/com/google/devtools
parent5393a4996d701fa192964a35cbb75e558a0599c0 (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java16
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);
}