diff options
author | 2018-03-03 11:12:36 -0800 | |
---|---|---|
committer | 2018-03-03 11:14:47 -0800 | |
commit | 76de1ad3af6297cbc7c34054dd4340e02750a712 (patch) | |
tree | b68a171ae3c13de3c92b7a3c7d8b293ce4647a4d /src/main/java/com/google/devtools/build/lib/packages/SkylarkInfo.java | |
parent | d5f374ce5caea11a0a760f121e1e75e68f107dab (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.java | 14 |
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 |