bazel syntax: enforce that ClassObject.getValue returns legal Starlark values
EvalUtils.getAttr now enforces that the value returned by
ClassObject.getValue is a legal value.
Previously, only the ternary SkylarkClassObject.getValue method
offered this postcondition, and it wasn't enforced.
This turned up BuildConfiguration.Fragment,
which was used as a value (e.g. in ctx.fragments.android)
but had forgotten to declare its relationship to StarlarkValue.
Also:
- remove obsolete 'instanceof Class' check.
- remove try/catch of IllegalArgumentException.
Instead do this check with narrower scope in the fragment code.
We will fix other cases as they appear.
PiperOrigin-RevId: 284644428
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 2513b33..56b1ca8 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -1531,7 +1531,7 @@
assertThat(e)
.hasMessageThat()
.contains(
- "cannot expose internal type to Starlark: class"
+ "invalid Starlark value: class"
+ " com.google.devtools.build.lib.collect.nestedset.NestedSet");
}