[^cdr] drop resolve caches only during explicit find usages activity

This commit is contained in:
peter
2013-07-03 21:33:33 +02:00
parent 97baa67f56
commit 5ba30761c1
2 changed files with 23 additions and 1 deletions
@@ -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,