From b7f2777d528bfbf6219147ae0c698217afeff78f Mon Sep 17 00:00:00 2001 From: Peter Gromov Date: Tue, 16 Jun 2020 19:44:51 +0200 Subject: [PATCH] IdIndexEntry: fix always true != on different objects, avoid allocation if possible GitOrigin-RevId: 29ca05230623c996c0b909fba285c279fea8571e --- .../intellij/psi/impl/cache/impl/id/IdDataConsumer.java | 7 ++++--- .../com/intellij/psi/impl/cache/impl/id/IdIndexEntry.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdDataConsumer.java b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdDataConsumer.java index 7d7b1adda037..a5c95ad91e9b 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdDataConsumer.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdDataConsumer.java @@ -21,9 +21,10 @@ public class IdDataConsumer { if (end == start) return; final IdIndexEntry entry = new IdIndexEntry(charSequence, start, end, true); addOccurrence(entry, occurrenceMask); - final IdIndexEntry entryNoCase = new IdIndexEntry(charSequence, start, end, false); - if (entryNoCase != entry) { - addOccurrence(entryNoCase, occurrenceMask); + + int hashNoCase = IdIndexEntry.getWordHash(charSequence, start, end, false); + if (hashNoCase != entry.getWordHashCode()) { + addOccurrence(new IdIndexEntry(hashNoCase), occurrenceMask); } } diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexEntry.java b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexEntry.java index 72dc086f6f9a..9e5e23aa1deb 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexEntry.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexEntry.java @@ -62,7 +62,7 @@ public final class IdIndexEntry { return "IdIndexEntry[hash: " + myWordHashCode +"]"; } - private static int getWordHash(@NotNull CharSequence line, int start, int end, boolean caseSensitive) { + static int getWordHash(@NotNull CharSequence line, int start, int end, boolean caseSensitive) { if (start == end) return 0; char firstChar = line.charAt(start); char lastChar = line.charAt(end - 1);