aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java
index 2eb22ba2a3..6e0d6811d9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java
@@ -73,14 +73,19 @@ public class SerializationContext {
* Returns a {@link SerializationContext} that will memoize values it encounters (using reference
* equality) in a new memoization table. The returned context should be used instead of the
* original: memoization may only occur when using the returned context. Calls must be in pairs
- * with {@link DeserializationContext#newMemoizingContext} in the corresponding deserialization
- * code. Over-eagerly calling this method will reduce the effectiveness of memoization, since any
- * previous memo state is inaccessible to the new context.
+ * with {@link DeserializationContext#getMemoizingContext} in the corresponding deserialization
+ * code.
+ *
+ * <p>This method is idempotent: calling it on an already memoizing context will return the same
+ * context.
*/
@CheckReturnValue
- public SerializationContext newMemoizingContext() {
+ public SerializationContext getMemoizingContext() {
Preconditions.checkState(
memoizationPermission == MemoizationPermission.ALLOWED, "memoization disabled");
+ if (serializer != null) {
+ return this;
+ }
return new SerializationContext(
this.registry, this.dependencies, memoizationPermission, new Memoizer.Serializer());
}