diff options
author | Kristina Chodorow <kchodorow@google.com> | 2015-03-06 20:20:18 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2015-03-10 13:57:49 +0000 |
commit | c8988c8fe6f7ad5d243116df70070c8116208cce (patch) | |
tree | 1a377cc700e511f18f734a5403458906d65a4e75 /src/main/java/com/google/devtools/build/lib | |
parent | c04c88f9768c35e74faf4c0375373160acdf960e (diff) |
Convert binding exception to something that's actually caught in PackageFunction
--
MOS_MIGRATED_REVID=87967267
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java | 33 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java | 3 |
2 files changed, 23 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java b/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java index 6f7b243295..345c28a811 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java +++ b/src/main/java/com/google/devtools/build/lib/packages/ExternalPackage.java @@ -138,14 +138,16 @@ public class ExternalPackage extends Package { boolean moveTortoise = true; while (Binding.isBoundLabel(actual)) { if (tortoise == hare) { - throw new NoSuchBindingException("cycle detected resolving " + virtual + " binding"); + throw new NoSuchBindingException("cycle detected resolving " + virtual + " binding", + binding.getLocation()); } Label previous = actual; // For the exception. + Binding oldBinding = binding; binding = bindMap.get(actual); if (binding == null) { throw new NoSuchBindingException("no binding found for target " + previous + " (via " - + virtual + ")"); + + virtual + ")", oldBinding.getLocation()); } actual = binding.getActual(); hare = actual; @@ -174,16 +176,6 @@ public class ExternalPackage extends Package { } /** - * This is used when a binding is invalid, either because one of the targets is malformed, - * refers to a package that does not exist, or creates a circular dependency. - */ - public class NoSuchBindingException extends NoSuchThingException { - public NoSuchBindingException(String message) { - super(message); - } - } - - /** * Creates an external repository rule. * @throws SyntaxException if the repository name is invalid. */ @@ -198,5 +190,22 @@ public class ExternalPackage extends Package { repositoryMap.put(RepositoryName.create("@" + rule.getName()), rule); return this; } + + /** + * This is used when a binding is invalid, either because one of the targets is malformed, + * refers to a package that does not exist, or creates a circular dependency. + */ + public class NoSuchBindingException extends NoSuchThingException { + private Location location; + + public NoSuchBindingException(String message, Location location) { + super(message); + this.location = location; + } + + public Location getLocation() { + return location; + } + } } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java index a5bbbef020..0e58d3f5da 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java @@ -89,7 +89,8 @@ public class WorkspaceFileFunction implements SkyFunction { try { builder.resolveBindTargets(packageFactory.getRuleClass(BIND)); } catch (NoSuchBindingException e) { - throw new WorkspaceFileFunctionException(e); + throw new WorkspaceFileFunctionException( + new EvalException(e.getLocation(), e.getMessage())); } catch (EvalException e) { throw new WorkspaceFileFunctionException(e); } |