aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
diff options
context:
space:
mode:
authorGravatar brandjon <brandjon@google.com>2018-03-20 10:47:31 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-20 10:48:43 -0700
commit7ba9d764dfdea96da470f612d360824269fda132 (patch)
tree76dae3fc33f32c2e1c9bbe396a37dcf4bab39c09 /src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
parentadb27dc3783509768f8a2ba5f2913185ccd90eec (diff)
Add ability to shallow-freeze individual objects
Clarify that the IMMUTABLE Mutability should only be used for deeply immutable things, not tuples. Created a new SHALLOW_IMMUTABLE Mutability for them. Note that the new shallow-freezing functionality marks things as deeply IMMUTABLE without traversing its contents. I.e., it lies, and it is up to the caller to ensure this doesn't cause problems. RELNOTES: NONE PiperOrigin-RevId: 189767422
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
index 8c951cbb44..db656328fd 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
@@ -62,7 +62,8 @@ public final class SkylarkDict<K, V> extends MutableMap<K, V>
private final LinkedHashMap<K, V> contents = new LinkedHashMap<>();
- private final Mutability mutability;
+ /** Final except for {@link #unsafeShallowFreeze}; must not be modified any other way. */
+ private Mutability mutability;
private SkylarkDict(@Nullable Mutability mutability) {
this.mutability = mutability == null ? Mutability.IMMUTABLE : mutability;
@@ -154,6 +155,12 @@ public final class SkylarkDict<K, V> extends MutableMap<K, V>
}
@Override
+ public void unsafeShallowFreeze() {
+ Mutability.Freezable.checkUnsafeShallowFreezePrecondition(this);
+ this.mutability = Mutability.IMMUTABLE;
+ }
+
+ @Override
protected Map<K, V> getContentsUnsafe() {
return contents;
}