aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Kristina Chodorow <kchodorow@google.com>2015-03-06 20:20:18 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-03-10 13:57:49 +0000
commitc8988c8fe6f7ad5d243116df70070c8116208cce (patch)
tree1a377cc700e511f18f734a5403458906d65a4e75 /src/main/java/com/google/devtools/build/lib
parentc04c88f9768c35e74faf4c0375373160acdf960e (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.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java3
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);
}