CompilerReferenceServiceImpl: cache search results
authorDmitry Batkovich <dmitry.batkovich@jetbrains.com>
Sun, 9 Oct 2016 15:55:17 +0000 (18:55 +0300)
committerDmitry Batkovich <dmitry.batkovich@jetbrains.com>
Mon, 10 Oct 2016 17:30:08 +0000 (20:30 +0300)
java/compiler/impl/src/com/intellij/compiler/CompilerReferenceServiceImpl.java

index 7f3680723a11b49e13a340674c5c24ea3bdb496d..2a00c59b6dd1c3fe6da5d78e4ab478eeef7b0da7 100644 (file)
@@ -195,7 +195,7 @@ public class CompilerReferenceServiceImpl extends CompilerReferenceService imple
                                                     return calculateScopeWithoutReferences(element, key);
                                                   }
                                               },
-                                              PsiModificationTracker.MODIFICATION_COUNT)).get(adapter);
+                                              PsiModificationTracker.MODIFICATION_COUNT, this)).get(adapter);
   }
 
   @Nullable
@@ -216,14 +216,17 @@ public class CompilerReferenceServiceImpl extends CompilerReferenceService imple
     if (compilerElement == null) return null;
 
     final GlobalSearchScope dirtyScope = myDirtyModulesHolder.getDirtyScope();
-    final Couple<Map<VirtualFile, T[]>> directInheritorsAndCandidates = myReader.getDirectInheritors(compilerElement,
-                                                                                                     aClass,
-                                                                                                     inheritorSearchAdapter,
-                                                                                                     useScope,
-                                                                                                     dirtyScope,
-                                                                                                     myProject,
-                                                                                                     searchFileTypes);
 
+    Couple<Map<VirtualFile, T[]>> directInheritorsAndCandidates =
+      CachedValuesManager.getCachedValue(aClass, () -> CachedValueProvider.Result.create(myReader.getDirectInheritors(compilerElement,
+                                                                                                                      aClass,
+                                                                                                                      inheritorSearchAdapter,
+                                                                                                                      useScope,
+                                                                                                                      dirtyScope,
+                                                                                                                      myProject,
+                                                                                                                      searchFileTypes),
+                                                                                         PsiModificationTracker.MODIFICATION_COUNT,
+                                                                                         this));
 
     return new CompilerDirectInheritorInfo<>(selectClassesInScope(directInheritorsAndCandidates.getFirst(), searchScope),
                                              selectClassesInScope(directInheritorsAndCandidates.getSecond(), searchScope),