From 6bd9283987bcb1b5119cee49eb35279d089f941b Mon Sep 17 00:00:00 2001
From: Dmitry Batkovich <dmitry.batkovich@jetbrains.com>
Date: Mon, 14 Oct 2019 12:14:51 +0300
Subject: [PATCH] use FileBasedIndex.getFileData when
 SingleEntryFileBasedIndexExtension accessing

GitOrigin-RevId: 876666b4ef1397fc905cb258a613c67a2891b41b
---
 .../intellij/images/index/ImageInfoIndex.java |  7 +++-
 .../groovy/lang/psi/util/GrTraitUtil.java     | 10 ++---
 .../resolve/GroovyTraitMethodsFileIndex.java  | 38 ++++++++-----------
 3 files changed, 26 insertions(+), 29 deletions(-)

diff --git a/images/src/org/intellij/images/index/ImageInfoIndex.java b/images/src/org/intellij/images/index/ImageInfoIndex.java
index 3cca85e27748..57077b3237a2 100644
--- a/images/src/org/intellij/images/index/ImageInfoIndex.java
+++ b/images/src/org/intellij/images/index/ImageInfoIndex.java
@@ -17,6 +17,7 @@ import org.jetbrains.annotations.NotNull;
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
+import java.util.Map;
 
 public final class ImageInfoIndex extends SingleEntryFileBasedIndexExtension<ImageInfo> {
   private static final long ourMaxImageSize = (long)(Registry.get("ide.index.image.max.size").asDouble() * 1024 * 1024);
@@ -58,8 +59,10 @@ public final class ImageInfoIndex extends SingleEntryFileBasedIndexExtension<Ima
   }
 
   public static void processValues(VirtualFile virtualFile, FileBasedIndex.ValueProcessor<? super ImageInfo> processor, Project project) {
-    FileBasedIndex.getInstance().processValues(INDEX_ID, getFileKey(virtualFile), virtualFile, processor, GlobalSearchScope
-        .fileScope(project, virtualFile));
+    Map<Integer, ImageInfo> data = FileBasedIndex.getInstance().getFileData(INDEX_ID, virtualFile, project);
+    if (!data.isEmpty()) {
+      processor.process(virtualFile, data.values().iterator().next());
+    }
   }
 
   @NotNull
diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GrTraitUtil.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GrTraitUtil.java
index 122c032c7bcd..a70a3e1d77ff 100644
--- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GrTraitUtil.java
+++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GrTraitUtil.java
@@ -217,11 +217,11 @@ public class GrTraitUtil {
     if (traitFile == null) return;
     VirtualFile helperFile = traitFile.getParent().findChild(trait.getName() + GroovyTraitFieldsFileIndex.HELPER_SUFFIX);
     if (helperFile == null) return;
-    int key = SingleEntryFileBasedIndexExtension.getFileKey(helperFile);
-    final List<Collection<TraitFieldDescriptor>> values = FileBasedIndex.getInstance().getValues(
-      GroovyTraitFieldsFileIndex.INDEX_ID, key, trait.getResolveScope()
-    );
-    values.forEach(descriptors -> descriptors.forEach(descriptor -> result.add(createTraitField(descriptor, trait))));
+
+    Map<Integer, Collection<TraitFieldDescriptor>> data =
+      FileBasedIndex.getInstance().getFileData(GroovyTraitFieldsFileIndex.INDEX_ID, helperFile, trait.getProject());
+    Collection<TraitFieldDescriptor> values = ContainerUtil.getFirstItem(data.values(), Collections.emptyList());
+    values.forEach(descriptor -> result.add(createTraitField(descriptor, trait)));
   }
 
   private static GrLightField createTraitField(TraitFieldDescriptor descriptor, PsiClass trait) {
diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GroovyTraitMethodsFileIndex.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GroovyTraitMethodsFileIndex.java
index 42e3cedff355..a80bc3c82c04 100644
--- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GroovyTraitMethodsFileIndex.java
+++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/GroovyTraitMethodsFileIndex.java
@@ -22,6 +22,7 @@ import com.intellij.psi.impl.java.stubs.PsiJavaFileStub;
 import com.intellij.psi.impl.java.stubs.PsiMethodStub;
 import com.intellij.psi.impl.java.stubs.impl.PsiJavaFileStubImpl;
 import com.intellij.psi.stubs.*;
+import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.indexing.*;
 import com.intellij.util.indexing.FileBasedIndex.InputFilter;
 import com.intellij.util.io.DataExternalizer;
@@ -32,10 +33,7 @@ import org.jetbrains.org.objectweb.asm.*;
 import org.jetbrains.plugins.groovy.lang.psi.stubs.index.ByteArraySequenceExternalizer;
 
 import java.io.ByteArrayInputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
 
 import static com.intellij.psi.impl.compiled.ClsFileImpl.EMPTY_ATTRIBUTES;
 import static org.jetbrains.org.objectweb.asm.Opcodes.ACC_STATIC;
@@ -176,27 +174,23 @@ public class GroovyTraitMethodsFileIndex extends SingleEntryFileBasedIndexExtens
     VirtualFile helperFile = traitFile.getParent().findChild(trait.getName() + HELPER_SUFFIX);
     if (helperFile == null) return Collections.emptyList();
 
-    int key = getFileKey(helperFile);
-
-    List<ByteArraySequence> byteSequences = FileBasedIndex.getInstance().getValues(INDEX_ID, key, trait.getResolveScope());
-    if (byteSequences.isEmpty()) return Collections.emptyList();
+    Map<Integer, ByteArraySequence> data = FileBasedIndex.getInstance().getFileData(INDEX_ID, helperFile, trait.getProject());
+    ByteArraySequence byteSequence = ContainerUtil.getFirstItem(data.values());
 
     SerializationManagerEx manager = SerializationManagerEx.getInstanceEx();
     List<PsiMethod> result = new ArrayList<>();
-    for (ByteArraySequence byteSequence : byteSequences) {
-      Stub root;
-      try {
-        root = manager.deserialize(new ByteArrayInputStream(byteSequence.getBytes()));
-        ((PsiJavaFileStubImpl)root).setPsi((PsiJavaFile)psiFile);
-      }
-      catch (SerializerNotFoundException e) {
-        LOG.warn(e);
-        continue;
-      }
-      for (Object childStub : root.getChildrenStubs().get(0).getChildrenStubs()) {
-        if (childStub instanceof PsiMethodStub) {
-          result.add(((PsiMethodStub)childStub).getPsi());
-        }
+    Stub root;
+    try {
+      root = manager.deserialize(new ByteArrayInputStream(byteSequence.getBytes()));
+      ((PsiJavaFileStubImpl)root).setPsi((PsiJavaFile)psiFile);
+    }
+    catch (SerializerNotFoundException e) {
+      LOG.warn(e);
+      return result;
+    }
+    for (Object childStub : root.getChildrenStubs().get(0).getChildrenStubs()) {
+      if (childStub instanceof PsiMethodStub) {
+        result.add(((PsiMethodStub)childStub).getPsi());
       }
     }
     return result;
-- 
GitLab