mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-18 12:31:26 +07:00
[java-completion] Permits list: fix scope when modules aren't used
Fixes IDEA-310106 When using permits in a sealed class, the IDE does not suggest children classes GitOrigin-RevId: 8f210942613aaf93b83ad7f81751d3181e079513
This commit is contained in:
committed by
intellij-monorepo-bot
parent
bfcca2efde
commit
fc26ba2b00
@@ -117,18 +117,7 @@ public class JavaClassNameCompletionContributor extends CompletionContributor im
|
||||
}
|
||||
|
||||
final boolean pkgContext = JavaCompletionUtil.inSomePackage(insertedElement);
|
||||
final Project project = insertedElement.getProject();
|
||||
final GlobalSearchScope scope;
|
||||
if (inPermitsList) {
|
||||
PsiJavaModule javaModule = JavaModuleGraphUtil.findDescriptorByElement(psiFile.getOriginalElement());
|
||||
if (javaModule == null) return;
|
||||
JavaModuleScope moduleScope = JavaModuleScope.moduleScope(javaModule);
|
||||
if (moduleScope == null) return;
|
||||
scope = moduleScope;
|
||||
}
|
||||
else {
|
||||
scope = filterByScope ? psiFile.getResolveScope() : GlobalSearchScope.allScope(project);
|
||||
}
|
||||
final GlobalSearchScope scope = getReferenceScope(parameters, filterByScope, inPermitsList);
|
||||
|
||||
JavaLookupElementHighlighter highlighter = JavaCompletionUtil.getHighlighterForPlace(insertedElement);
|
||||
boolean patternContext = JavaPatternCompletionUtil.isPatternContext(psiFile, insertedElement);
|
||||
@@ -189,10 +178,38 @@ public class JavaClassNameCompletionContributor extends CompletionContributor im
|
||||
return innerName != null && matcher.prefixMatches(innerName);
|
||||
}
|
||||
};
|
||||
final Project project = insertedElement.getProject();
|
||||
AllClassesGetter.processJavaClasses(matcher, project, scope,
|
||||
new LimitedAccessibleClassPreprocessor(parameters, filterByScope, classProcessor));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static GlobalSearchScope getReferenceScope(@NotNull CompletionParameters parameters,
|
||||
boolean filterByScope,
|
||||
boolean inPermitsList) {
|
||||
PsiElement insertedElement = parameters.getPosition();
|
||||
PsiFile psiFile = insertedElement.getContainingFile().getOriginalFile();
|
||||
Project project = insertedElement.getProject();
|
||||
if (!inPermitsList) {
|
||||
return filterByScope ? psiFile.getResolveScope() : GlobalSearchScope.allScope(project);
|
||||
}
|
||||
if (parameters.getInvocationCount() >= 2) {
|
||||
return GlobalSearchScope.allScope(project);
|
||||
}
|
||||
PsiJavaModule javaModule = JavaModuleGraphUtil.findDescriptorByElement(psiFile.getOriginalElement());
|
||||
JavaModuleScope moduleScope = javaModule == null ? null : JavaModuleScope.moduleScope(javaModule);
|
||||
if (moduleScope != null) {
|
||||
return moduleScope;
|
||||
}
|
||||
PsiDirectory dir = psiFile.getParent();
|
||||
PsiPackage psiPackage = dir == null ? null : JavaDirectoryService.getInstance().getPackage(dir);
|
||||
if (psiPackage != null) {
|
||||
return GlobalSearchScope.filesScope(project, ContainerUtil.map(psiPackage.getFiles(GlobalSearchScope.allScope(project)),
|
||||
PsiFile::getVirtualFile));
|
||||
}
|
||||
return GlobalSearchScope.fileScope(psiFile);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static MultiMap<String, PsiClass> getAllAnnotationClasses(PsiElement context, PrefixMatcher matcher) {
|
||||
MultiMap<String, PsiClass> map = new MultiMap<>();
|
||||
|
||||
Reference in New Issue
Block a user