aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/packages/SkylarkInfo.java
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-03-03 11:12:36 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-03 11:14:47 -0800
commit76de1ad3af6297cbc7c34054dd4340e02750a712 (patch)
treeb68a171ae3c13de3c92b7a3c7d8b293ce4647a4d /src/main/java/com/google/devtools/build/lib/packages/SkylarkInfo.java
parentd5f374ce5caea11a0a760f121e1e75e68f107dab (diff)
Get rid of almost all Skylark codecs. We need to introduce a wrapper to turn ObjectCodec into a MEMOIZE_AFTER MemoizingCodec. I think that this is safe, because all the codecs that are being wrapped this way weren't memoizing anything internally that I could see.
In order to @AutoCodec the WithValue type, which is generic and can have null elements in lists, add functionality to @AutoCodec to deal with generic type static instantiators, matching generic type arguments (although I'm not sure why that wasn't already working), and null elements in lists. PiperOrigin-RevId: 187740461
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/packages/SkylarkInfo.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkInfo.java14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkInfo.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkInfo.java
index 8f83d75985..22a03336ec 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkInfo.java
@@ -24,6 +24,7 @@ import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.syntax.Concatable;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.EvalUtils;
@@ -161,6 +162,7 @@ public abstract class SkylarkInfo extends Info implements Concatable {
* layout need be present on the instance.
*/
@Immutable
+ @AutoCodec
public static final class Layout {
/**
@@ -176,12 +178,22 @@ public abstract class SkylarkInfo extends Info implements Concatable {
* @throws IllegalArgumentException if any field names are given more than once
*/
public Layout(Iterable<String> fields) {
+ this(makeMap(fields));
+ }
+
+ @AutoCodec.VisibleForSerialization
+ @AutoCodec.Instantiator
+ Layout(ImmutableMap<String, Integer> map) {
+ this.map = map;
+ }
+
+ private static ImmutableMap<String, Integer> makeMap(Iterable<String> fields) {
ImmutableMap.Builder<String, Integer> layoutBuilder = ImmutableMap.builder();
int i = 0;
for (String field : fields) {
layoutBuilder.put(field, i++);
}
- this.map = layoutBuilder.build();
+ return layoutBuilder.build();
}
@Override