aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec/AutoCodecProcessor.java
diff options
context:
space:
mode:
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.java21
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()