diff options
author | 2018-03-20 10:47:31 -0700 | |
---|---|---|
committer | 2018-03-20 10:48:43 -0700 | |
commit | 7ba9d764dfdea96da470f612d360824269fda132 (patch) | |
tree | 76dae3fc33f32c2e1c9bbe396a37dcf4bab39c09 /src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java | |
parent | adb27dc3783509768f8a2ba5f2913185ccd90eec (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.java | 9 |
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; } |