From c9ce70bde4782ee9b55182fa58732b4bab90c906 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 20 Dec 2018 14:32:12 +0100 Subject: [PATCH] less allocations in SmartFMap.equals (needed for IDEA-204405) --- .../util/src/com/intellij/util/SmartFMap.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/platform/util/src/com/intellij/util/SmartFMap.java b/platform/util/src/com/intellij/util/SmartFMap.java index c943149a9137..0bb6a3d443dc 100644 --- a/platform/util/src/com/intellij/util/SmartFMap.java +++ b/platform/util/src/com/intellij/util/SmartFMap.java @@ -15,6 +15,7 @@ */ package com.intellij.util; +import com.intellij.openapi.util.Comparing; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -128,7 +129,23 @@ public class SmartFMap implements Map { @Override public boolean equals(Object obj) { - return obj instanceof Map && entrySet().equals(((Map)obj).entrySet()); + if (myMap instanceof Map) { + return myMap.equals(obj); + } + + if (!(obj instanceof Map)) return false; + + Map map = (Map)obj; + if (size() != map.size()) return false; + + Object[] array = (Object[])myMap; + for (int i = 0; i < array.length; i += 2) { + if (!Comparing.equal(array[i + 1], map.get(array[i]))) { + return false; + } + } + + return true; } @Override