diff options
author | shahan <shahan@google.com> | 2018-04-04 09:49:03 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-04 09:50:47 -0700 |
commit | 00b72a1590713e7650285d84ae2a1e5c2041defe (patch) | |
tree | 8a0c76d86b7dcb3e1f0eb9966c8e42ab44afc722 /src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java | |
parent | 77777d1a769e938839b82c65ff320e09b1e7a715 (diff) |
Replaces JavaSerializableCodec with DynamicCodec as the default
* Skylark serialization was previously dropping location in error, which this fixes.
* Deletes a lot of codecs with fidelity issues (DynamicCodec has full fidelity).
* Deletes EnumRuntimeCodec which can now be replaced with the superior EnumCodec.
* This should eventually allow us to delete Serializable from all Blaze. The remaining blocker is NoSuchPackageExceptionCodec.
PiperOrigin-RevId: 191603929
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java index bf11b86e69..4af9f532f0 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/AutoRegistry.java @@ -14,8 +14,10 @@ package com.google.devtools.build.lib.skyframe.serialization; +import com.google.common.base.Predicates; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; +import com.google.common.collect.ImmutableList; import java.io.IOException; /** @@ -29,15 +31,35 @@ public class AutoRegistry { private static final Supplier<ObjectCodecRegistry> SUPPLIER = Suppliers.memoize(AutoRegistry::create); + /* Common ancestor of common.google.devtools.build and com.google.devtools.common.options, + * where Tristate lives. */ + private static final String PACKAGE_PREFIX = "com.google.devtools"; + + /** Classes outside {@link AutoRegistry#PACKAGE_PREFIX} that need to be serialized. */ + private static final ImmutableList<String> EXTERNAL_CLASS_NAMES_TO_REGISTER = + ImmutableList.of("java.io.FileNotFoundException", "java.io.IOException"); + + private static final ImmutableList<Object> CONSTANTS_TO_REGISTER = + ImmutableList.of( + Predicates.alwaysTrue(), + Predicates.alwaysFalse(), + Predicates.isNull(), + Predicates.notNull()); + public static ObjectCodecRegistry get() { return SUPPLIER.get(); } private static ObjectCodecRegistry create() { try { - return CodecScanner.initializeCodecRegistry("com.google.devtools.build") - .setAllowDefaultCodec(false) - .build(); + ObjectCodecRegistry.Builder registry = CodecScanner.initializeCodecRegistry(PACKAGE_PREFIX); + for (String className : EXTERNAL_CLASS_NAMES_TO_REGISTER) { + registry.addClassName(className); + } + for (Object constant : CONSTANTS_TO_REGISTER) { + registry.addConstant(constant); + } + return registry.build(); } catch (IOException | ReflectiveOperationException e) { throw new IllegalStateException(e); } |