From bb3afa21a41281aa2813e58e2779b1b2727d550c Mon Sep 17 00:00:00 2001 From: Luck Date: Wed, 4 Mar 2020 12:44:47 +0000 Subject: [PATCH] Always store node metadata keys in a HashMap, not IdentityHashMap, and ensure immutability when built --- .../lucko/luckperms/common/node/AbstractNode.java | 3 ++- .../luckperms/common/node/AbstractNodeBuilder.java | 13 +++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/node/AbstractNode.java b/common/src/main/java/me/lucko/luckperms/common/node/AbstractNode.java index dd667e305..76aa5c494 100644 --- a/common/src/main/java/me/lucko/luckperms/common/node/AbstractNode.java +++ b/common/src/main/java/me/lucko/luckperms/common/node/AbstractNode.java @@ -26,6 +26,7 @@ package me.lucko.luckperms.common.node; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import me.lucko.luckperms.common.node.utils.ShorthandParser; @@ -74,7 +75,7 @@ public abstract class AbstractNode, B extends NodeBui this.value = value; this.expireAt = expireAt; this.contexts = contexts; - this.metadata = metadata; + this.metadata = ImmutableMap.copyOf(metadata); this.resolvedShorthand = this instanceof PermissionNode ? ImmutableList.copyOf(ShorthandParser.expandShorthand(this.key)) : ImmutableList.of(); diff --git a/common/src/main/java/me/lucko/luckperms/common/node/AbstractNodeBuilder.java b/common/src/main/java/me/lucko/luckperms/common/node/AbstractNodeBuilder.java index fa3d0d151..004c5310f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/node/AbstractNodeBuilder.java +++ b/common/src/main/java/me/lucko/luckperms/common/node/AbstractNodeBuilder.java @@ -42,8 +42,8 @@ import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalAmount; +import java.util.Collections; import java.util.HashMap; -import java.util.IdentityHashMap; import java.util.Map; import java.util.Objects; @@ -54,13 +54,6 @@ public abstract class AbstractNodeBuilder, B extends protected ImmutableContextSet.Builder context; protected final Map, Object> metadata; - protected AbstractNodeBuilder() { - this.value = true; - this.expireAt = 0L; - this.context = new ImmutableContextSetImpl.BuilderImpl(); - this.metadata = new IdentityHashMap<>(); - } - protected AbstractNodeBuilder(boolean value, long expireAt, ImmutableContextSet context, Map, Object> metadata) { this.value = value; this.expireAt = expireAt; @@ -68,6 +61,10 @@ public abstract class AbstractNodeBuilder, B extends this.metadata = new HashMap<>(metadata); } + protected AbstractNodeBuilder() { + this(true, 0L, ImmutableContextSet.empty(), Collections.emptyMap()); + } + @Override public @NonNull B value(boolean value) { this.value = value;