diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java index f0fe3c0e1a..4d34175926 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java @@ -110,6 +110,9 @@ public class AutoCodecProcessor extends AbstractProcessor { case POLYMORPHIC: codecClassBuilder = buildClassWithPolymorphicStrategy(encodedType, dependencyType); break; + case SINGLETON: + codecClassBuilder = buildClassWithSingletonStrategy(encodedType, dependencyType); + break; default: throw new IllegalArgumentException("Unknown strategy: " + annotation.strategy()); } @@ -607,6 +610,24 @@ public class AutoCodecProcessor extends AbstractProcessor { return builder.build(); } + private static TypeSpec.Builder buildClassWithSingletonStrategy( + TypeElement encodedType, @Nullable TypeElement dependency) { + if (dependency != null) { + throw new IllegalArgumentException( + encodedType + " specifies a dependency, but SINGLETON is selected as the strategy."); + } + TypeSpec.Builder codecClassBuilder = + AutoCodecUtil.initializeCodecClassBuilder(encodedType, dependency); + // Serialization is a no-op. + codecClassBuilder.addMethod( + AutoCodecUtil.initializeSerializeMethodBuilder(encodedType, dependency).build()); + MethodSpec.Builder deserializeMethodBuilder = + AutoCodecUtil.initializeDeserializeMethodBuilder(encodedType, dependency); + deserializeMethodBuilder.addStatement("return $T.INSTANCE", TypeName.get(encodedType.asType())); + codecClassBuilder.addMethod(deserializeMethodBuilder.build()); + return codecClassBuilder; + } + /** True when {@code type} has the same type as {@code clazz}. */ private boolean matchesType(TypeMirror type, Class<?> clazz) { return env.getTypeUtils() |