mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-07 22:09:38 +07:00
PY-73675 Restore non-recursive index access in PyClassNameCompletionContributor
GitOrigin-RevId: 18365f310a0315cd743fb732ffdf65e530528a15
This commit is contained in:
committed by
intellij-monorepo-bot
parent
54f528f334
commit
44aefbe28d
@@ -24,6 +24,7 @@ import com.intellij.psi.stubs.StubIndex;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.TimeoutUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PyNames;
|
||||
@@ -41,6 +42,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.jetbrains.python.psi.PyUtil.as;
|
||||
@@ -53,6 +55,8 @@ public final class PyClassNameCompletionContributor extends PyImportableNameComp
|
||||
private static final boolean TRACING_WITH_SPUTNIK_ENABLED = false;
|
||||
private static final Logger LOG = Logger.getInstance(PyClassNameCompletionContributor.class);
|
||||
private static final int NAME_TOO_SHORT_FOR_BASIC_COMPLETION_THRESHOLD = 5;
|
||||
// See PY-73964, IJPL-265
|
||||
private static final boolean RECURSIVE_INDEX_ACCESS_ALLOWED = false;
|
||||
|
||||
public PyClassNameCompletionContributor() {
|
||||
if (TRACING_WITH_SPUTNIK_ENABLED) {
|
||||
@@ -101,7 +105,7 @@ public final class PyClassNameCompletionContributor extends PyImportableNameComp
|
||||
TimeoutUtil.run(() -> {
|
||||
GlobalSearchScope scope = createScope(originalFile);
|
||||
Set<QualifiedName> alreadySuggested = new HashSet<>();
|
||||
StubIndex.getInstance().processAllKeys(PyExportedModuleAttributeIndex.KEY, elementName -> {
|
||||
forEachPublicNameFromIndex(scope, elementName -> {
|
||||
ProgressManager.checkCanceled();
|
||||
counters.scannedNames++;
|
||||
if (elementName.length() < NAME_TOO_SHORT_FOR_BASIC_COMPLETION_THRESHOLD && !isExtendedCompletion) {
|
||||
@@ -143,7 +147,7 @@ public final class PyClassNameCompletionContributor extends PyImportableNameComp
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}, scope);
|
||||
});
|
||||
}, duration -> {
|
||||
LOG.debug(counters + " computed for prefix '" + result.getPrefixMatcher().getPrefix() + "' in " + duration + " ms");
|
||||
if (TRACING_WITH_SPUTNIK_ENABLED) {
|
||||
@@ -155,6 +159,20 @@ public final class PyClassNameCompletionContributor extends PyImportableNameComp
|
||||
});
|
||||
}
|
||||
|
||||
private static void forEachPublicNameFromIndex(@NotNull GlobalSearchScope scope, @NotNull Processor<String> processor) {
|
||||
StubIndex stubIndex = StubIndex.getInstance();
|
||||
if (!RECURSIVE_INDEX_ACCESS_ALLOWED) {
|
||||
for (String allKey : stubIndex.getAllKeys(PyExportedModuleAttributeIndex.KEY, Objects.requireNonNull(scope.getProject()))) {
|
||||
if (!processor.process(allKey)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
stubIndex.processAllKeys(PyExportedModuleAttributeIndex.KEY, processor, scope);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isApplicableInInsertionContext(@NotNull PyElement definition,
|
||||
@NotNull QualifiedName fqn, @NotNull PsiElement position,
|
||||
@NotNull TypeEvalContext context) {
|
||||
|
||||
Reference in New Issue
Block a user