mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
limit max size of files to be scanned when calculating symbol's unusedness
This commit is contained in:
@@ -33,6 +33,7 @@ import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.FileIndexFacade;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
@@ -61,6 +62,7 @@ import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
public class PsiSearchHelperImpl implements PsiSearchHelper {
|
||||
private static final ExtensionPointName<ScopeOptimizer> USE_SCOPE_OPTIMIZER_EP_NAME = ExtensionPointName.create("com.intellij.useScopeOptimizer");
|
||||
@@ -924,18 +926,22 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
|
||||
return SearchCostResult.TOO_MANY_OCCURRENCES;
|
||||
}
|
||||
|
||||
final AtomicInteger count = new AtomicInteger();
|
||||
final ProgressIndicator indicator = progress == null ? new EmptyProgressIndicator() : progress;
|
||||
final AtomicInteger filesCount = new AtomicInteger();
|
||||
final AtomicLong filesSizeToProcess = new AtomicLong();
|
||||
|
||||
final Processor<VirtualFile> processor = new Processor<VirtualFile>() {
|
||||
private final VirtualFile virtualFileToIgnoreOccurrencesIn =
|
||||
fileToIgnoreOccurrencesIn == null ? null : fileToIgnoreOccurrencesIn.getVirtualFile();
|
||||
private final int maxFilesToProcess = Registry.intValue("ide.unused.symbol.calculation.maxFilesToSearchUsagesIn", 10);
|
||||
private final int maxFilesSizeToProcess = Registry.intValue("ide.unused.symbol.calculation.maxFilesSizeToSearchUsagesIn", 524288);
|
||||
|
||||
@Override
|
||||
public boolean process(VirtualFile file) {
|
||||
ProgressManager.checkCanceled();
|
||||
if (Comparing.equal(file, virtualFileToIgnoreOccurrencesIn)) return true;
|
||||
final int value = count.incrementAndGet();
|
||||
return value < 10;
|
||||
int currentFilesCount = filesCount.incrementAndGet();
|
||||
long accumulatedFileSizeToProcess = filesSizeToProcess.addAndGet(file.getLength());
|
||||
return currentFilesCount < maxFilesToProcess && accumulatedFileSizeToProcess < maxFilesSizeToProcess;
|
||||
}
|
||||
};
|
||||
List<IdIndexEntry> keys = getWordEntries(name, true);
|
||||
@@ -945,7 +951,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
|
||||
return SearchCostResult.TOO_MANY_OCCURRENCES;
|
||||
}
|
||||
|
||||
return count.get() == 0 ? SearchCostResult.ZERO_OCCURRENCES : SearchCostResult.FEW_OCCURRENCES;
|
||||
return filesCount.get() == 0 ? SearchCostResult.ZERO_OCCURRENCES : SearchCostResult.FEW_OCCURRENCES;
|
||||
}
|
||||
|
||||
private static boolean processFilesContainingAllKeys(@NotNull Project project,
|
||||
|
||||
@@ -196,6 +196,11 @@ ide.dumb.mode.minFilesToStart.description=How many files should be changed for I
|
||||
ide.dumb.mode.minFilesSizeToStart=1048576
|
||||
ide.dumb.mode.minFilesSizeToStart.description=How large should be updated files's size to start dumb mode in case there are a few of them
|
||||
|
||||
ide.unused.symbol.calculation.maxFilesToSearchUsagesIn=10
|
||||
ide.unused.symbol.calculation.maxFilesToSearchUsagesIn.description=Max number of scanned files to find usages of symbol
|
||||
ide.unused.symbol.calculation.maxFilesSizeToSearchUsagesIn=524288
|
||||
ide.unused.symbol.calculation.maxFilesSizeToSearchUsagesIn.description=Max files size to find usages of symbol in case there are a few files
|
||||
|
||||
ide.tabbedPane.bufferedPaint=true
|
||||
ide.tabbedPane.dragOutMultiplier=1.2
|
||||
|
||||
|
||||
Reference in New Issue
Block a user