aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/packages
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-06-20 10:41:48 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-20 10:43:27 -0700
commit07460fc320b774cbd6def67dad983932f7cad1a7 (patch)
treeaec96c5453ecb2903ca1e011097653af82d51cdb /src/main/java/com/google/devtools/build/lib/packages
parente06e9d4700c4b7af8f5bcec941981857334af9b1 (diff)
Allow structField callables to specify useSkylarkSemantics, useLocation, and useEnvironment
Unfortunately this doesn't work for all callers, namely NativeInfo objects, as they may have structField callables invoked from contexts that have no environment available. RELNOTES[INC]: Skylark structs (using struct()) may no longer have to_json and to_proto overridden. PiperOrigin-RevId: 201376969
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/packages')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/StructProvider.java10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java b/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
index 21f847528b..4396b43a15 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
@@ -38,8 +38,14 @@ public final class StructProvider extends BuiltinProvider<Info>
@Override
public Info createStruct(SkylarkDict<?, ?> kwargs, Location loc) throws EvalException {
- return SkylarkInfo.createSchemaless(
- this, kwargs.getContents(String.class, Object.class, "kwargs"), loc);
+ Map<String, Object> kwargsMap = kwargs.getContents(String.class, Object.class, "kwargs");
+ if (kwargsMap.containsKey("to_json")) {
+ throw new EvalException(loc, "cannot override built-in struct function 'to_json'");
+ }
+ if (kwargsMap.containsKey("to_proto")) {
+ throw new EvalException(loc, "cannot override built-in struct function 'to_proto'");
+ }
+ return SkylarkInfo.createSchemaless(this, kwargsMap, loc);
}
/**