mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Prevent PyUnresolvedReferenceInspection from scanning all __init__ files when generating quickfix
fixes according to review
This commit is contained in:
committed by
Andrey Vlasovskikh
parent
8e7fb07fb7
commit
49dcf80e43
@@ -23,11 +23,14 @@ import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.FilenameIndex;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.codeInsight.PyCodeInsightSettings;
|
||||
import com.jetbrains.python.codeInsight.controlflow.ControlFlowCache;
|
||||
@@ -234,20 +237,28 @@ public final class PythonImportUtils {
|
||||
|
||||
private static Collection<PsiElement> findImportableModules(PsiFile targetFile, String reftext, Project project, GlobalSearchScope scope) {
|
||||
List<PsiElement> result = new ArrayList<>();
|
||||
PsiFile[] files = FilenameIndex.getFilesByName(project, reftext + ".py", scope);
|
||||
for (PsiFile file : files) {
|
||||
if (isImportableModule(targetFile, file)) {
|
||||
result.add(file);
|
||||
//add packages
|
||||
FilenameIndex.processFilesByName(reftext, true, file -> {
|
||||
ProgressManager.checkCanceled();
|
||||
if (!file.isDirectory() ){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// perhaps the module is a directory, not a file
|
||||
PsiFile[] initFiles = FilenameIndex.getFilesByName(project, PyNames.INIT_DOT_PY, scope);
|
||||
for (PsiFile initFile : initFiles) {
|
||||
PsiDirectory parent = initFile.getParent();
|
||||
if (parent != null && parent.getName().equals(reftext)) {
|
||||
result.add(parent);
|
||||
PsiDirectory candidatePackageDir = (PsiDirectory) file;
|
||||
if (candidatePackageDir.findFile(PyNames.INIT_DOT_PY) == null){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
result.add(candidatePackageDir);
|
||||
return true;
|
||||
}, scope, project, null);
|
||||
//Add modules
|
||||
FilenameIndex.processFilesByName(reftext + ".py", false, true, item -> {
|
||||
ProgressManager.checkCanceled();
|
||||
if (isImportableModule(targetFile, item)){
|
||||
result.add(item);
|
||||
}
|
||||
return true;
|
||||
}, scope, project, null);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user