diff --git a/api/src/main/java/me/lucko/luckperms/api/context/AbstractContextSet.java b/api/src/main/java/me/lucko/luckperms/api/context/AbstractContextSet.java index e941e1cf5..b4ee598a0 100644 --- a/api/src/main/java/me/lucko/luckperms/api/context/AbstractContextSet.java +++ b/api/src/main/java/me/lucko/luckperms/api/context/AbstractContextSet.java @@ -26,7 +26,6 @@ package me.lucko.luckperms.api.context; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Multimap; import com.google.common.collect.SetMultimap; import org.checkerframework.checker.nullness.qual.NonNull; @@ -67,23 +66,6 @@ abstract class AbstractContextSet implements ContextSet { return backing().size(); } - @Override - public boolean equals(Object o) { - if (o == this) return true; - if (!(o instanceof ContextSet)) return false; - final ContextSet that = (ContextSet) o; - - final Multimap otherContexts; - - if (that instanceof AbstractContextSet) { - otherContexts = ((AbstractContextSet) that).backing(); - } else { - otherContexts = that.toMultimap(); - } - - return backing().equals(otherContexts); - } - @Override public int hashCode() { return backing().hashCode(); diff --git a/api/src/main/java/me/lucko/luckperms/api/context/ImmutableContextSet.java b/api/src/main/java/me/lucko/luckperms/api/context/ImmutableContextSet.java index da073c3b3..f1ee27967 100644 --- a/api/src/main/java/me/lucko/luckperms/api/context/ImmutableContextSet.java +++ b/api/src/main/java/me/lucko/luckperms/api/context/ImmutableContextSet.java @@ -213,6 +213,28 @@ public final class ImmutableContextSet extends AbstractContextSet implements Con return this.map.entries().spliterator(); } + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (!(o instanceof ContextSet)) return false; + final ContextSet that = (ContextSet) o; + + // fast(er) path for ImmutableContextSet comparisons + if (that instanceof ImmutableContextSet) { + ImmutableContextSet immutableThat = (ImmutableContextSet) that; + if (this.hashCode != immutableThat.hashCode) return false; + } + + final Multimap thatBacking; + if (that instanceof AbstractContextSet) { + thatBacking = ((AbstractContextSet) that).backing(); + } else { + thatBacking = that.toMultimap(); + } + + return backing().equals(thatBacking); + } + @Override public int hashCode() { return this.hashCode; diff --git a/api/src/main/java/me/lucko/luckperms/api/context/MutableContextSet.java b/api/src/main/java/me/lucko/luckperms/api/context/MutableContextSet.java index 7263db4f0..6ec0f415f 100644 --- a/api/src/main/java/me/lucko/luckperms/api/context/MutableContextSet.java +++ b/api/src/main/java/me/lucko/luckperms/api/context/MutableContextSet.java @@ -345,6 +345,22 @@ public final class MutableContextSet extends AbstractContextSet implements Conte this.map.clear(); } + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (!(o instanceof ContextSet)) return false; + final ContextSet that = (ContextSet) o; + + final Multimap thatBacking; + if (that instanceof AbstractContextSet) { + thatBacking = ((AbstractContextSet) that).backing(); + } else { + thatBacking = that.toMultimap(); + } + + return backing().equals(thatBacking); + } + @Override public String toString() { return "MutableContextSet(contexts=" + this.map + ")";