mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[^cdr] drop resolve caches only during explicit find usages activity
This commit is contained in:
@@ -269,7 +269,6 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
|
||||
break;
|
||||
}
|
||||
}
|
||||
myManager.dropResolveCaches();
|
||||
}
|
||||
catch (ProcessCanceledException e) {
|
||||
canceled.set(true);
|
||||
|
||||
@@ -46,6 +46,7 @@ import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.wm.StatusBar;
|
||||
import com.intellij.openapi.wm.ex.ProgressIndicatorEx;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.*;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
@@ -334,6 +335,7 @@ public class FindUsagesManager implements JDOMExternalizable {
|
||||
final UsageSearcher usageSearcher = createUsageSearcher(descriptor, handler, findUsagesOptions, null);
|
||||
|
||||
final ProgressIndicatorBase indicator = new ProgressIndicatorBase();
|
||||
dropResolveCacheRegularly(indicator, handler.getProject());
|
||||
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -482,12 +484,33 @@ public class FindUsagesManager implements JDOMExternalizable {
|
||||
myAnotherManager.searchAndShowUsages(targets, new Factory<UsageSearcher>() {
|
||||
@Override
|
||||
public UsageSearcher create() {
|
||||
dropResolveCacheRegularly(ProgressManager.getInstance().getProgressIndicator(), myProject);
|
||||
return createUsageSearcher(descriptor, handler, findUsagesOptions, null);
|
||||
}
|
||||
}, !toSkipUsagePanelWhenOneUsage, true, createPresentation(elements.get(0), findUsagesOptions, toOpenInNewTab), null);
|
||||
addToHistory(elements, findUsagesOptions);
|
||||
}
|
||||
|
||||
private static void dropResolveCacheRegularly(ProgressIndicator indicator, final Project project) {
|
||||
if (indicator instanceof ProgressIndicatorEx) {
|
||||
((ProgressIndicatorEx)indicator).addStateDelegate(new ProgressIndicatorBase() {
|
||||
volatile long lastCleared = System.currentTimeMillis();
|
||||
|
||||
@Override
|
||||
public void setFraction(double fraction) {
|
||||
super.setFraction(fraction);
|
||||
long current = System.currentTimeMillis();
|
||||
if (current - lastCleared >= 500) {
|
||||
lastCleared = current;
|
||||
// fraction is changed when each file is processed =>
|
||||
// resolve caches used when searching in that file are likely to be not needed anymore
|
||||
PsiManager.getInstance(project).dropResolveCaches();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static UsageViewPresentation createPresentation(@NotNull PsiElement psiElement,
|
||||
@NotNull FindUsagesOptions findUsagesOptions,
|
||||
|
||||
Reference in New Issue
Block a user