aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-04-11 10:34:25 +0000
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-04-11 13:50:39 +0200
commit1dadb878a59b180bf950c72ee3b4bdb8d7ea7d67 (patch)
treef5d982f173e2a37e104105e66b12a28a623e5081 /src/main
parent039b9eefc26a5816ec305f86d442affe0d8e45ba (diff)
Better error messages for non-exported values.
RELNOTES: None. PiperOrigin-RevId: 152793682
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
index 3f2b066575..2bbfc00681 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
@@ -160,7 +160,7 @@ public final class SkylarkAttr {
private static Attribute.Builder<?> createAttribute(
Type<?> type, SkylarkDict<String, Object> arguments, FuncallExpression ast, Environment env)
- throws EvalException, ConversionException {
+ throws EvalException {
// We use an empty name now so that we can set it later.
// This trick makes sense only in the context of Skylark (builtin rules should not use it).
Attribute.Builder<?> builder = Attribute.attr("", type);
@@ -283,6 +283,11 @@ public final class SkylarkAttr {
List<SkylarkAspect> aspects =
((SkylarkList<?>) obj).getContents(SkylarkAspect.class, "aspects");
for (SkylarkAspect aspect : aspects) {
+ if (!aspect.isExported()) {
+ throw new EvalException(
+ ast.getLocation(),
+ "Aspects should be top-level values in extension files that define them.");
+ }
builder.aspect(aspect, ast.getLocation());
}
}
@@ -339,7 +344,7 @@ public final class SkylarkAttr {
ClassObjectConstructor constructor = (ClassObjectConstructor) obj;
if (!constructor.isExported()) {
throw new EvalException(location,
- "Providers should be assigned to top-level values in modules");
+ "Providers should be top-level values in extension files that define them.");
}
result.add(SkylarkProviderIdentifier.forKey(constructor.getKey()));
}