From 45446d263dbff5600616ffe686c425de01c5f349 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Thu, 5 Nov 2015 00:30:49 +0100 Subject: [PATCH] [performance] for getValues() invokation with Iterable scope of single file do call processValueImpl with restrictToFile parameter set, thus bypassing possible costly projectIndexableFilter() invokation later --- .../util/indexing/FileBasedIndexImpl.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java index f82778573863..e781efb48fbd 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -875,7 +875,21 @@ public class FileBasedIndexImpl extends FileBasedIndex { @NotNull public List getValues(@NotNull final ID indexId, @NotNull K dataKey, @NotNull final GlobalSearchScope filter) { final List values = new SmartList(); - processValuesImpl(indexId, dataKey, true, null, new ValueProcessor() { + VirtualFile restrictToFile = null; + + if (filter instanceof Iterable) { + final Iterator virtualFileIterator = ((Iterable)filter).iterator(); + + if (virtualFileIterator.hasNext()) { + VirtualFile restrictToFileCandidate = virtualFileIterator.next(); + + if (!virtualFileIterator.hasNext()) { + restrictToFile = restrictToFileCandidate; + } + } + } + + processValuesImpl(indexId, dataKey, true, restrictToFile, new ValueProcessor() { @Override public boolean process(final VirtualFile file, final V value) { values.add(value);