mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Resolve module members by providers only if resolve failed
This commit is contained in:
+7
@@ -0,0 +1,7 @@
|
||||
package com.jetbrains.python.psi.types;
|
||||
|
||||
/**
|
||||
* @author vlan
|
||||
*/
|
||||
public abstract class PyOverridingModuleMembersProvider extends PyModuleMembersProvider {
|
||||
}
|
||||
@@ -63,11 +63,9 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
|
||||
@Nullable PyExpression location,
|
||||
@NotNull AccessDirection direction,
|
||||
@NotNull PyResolveContext resolveContext) {
|
||||
for (PyModuleMembersProvider provider : Extensions.getExtensions(PyModuleMembersProvider.EP_NAME)) {
|
||||
final PsiElement element = provider.resolveMember(myModule, name);
|
||||
if (element != null) {
|
||||
return ResolveResultList.to(element);
|
||||
}
|
||||
final PsiElement overridingMember = resolveByOverridingMembersProviders(myModule, name);
|
||||
if (overridingMember != null) {
|
||||
return ResolveResultList.to(overridingMember);
|
||||
}
|
||||
final PsiElement attribute = myModule.getElementNamed(name);
|
||||
if (attribute != null) {
|
||||
@@ -95,6 +93,36 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
|
||||
return implicitMembers;
|
||||
}
|
||||
}
|
||||
final PsiElement member = resolveByMembersProviders(myModule, name);
|
||||
if (member != null) {
|
||||
return ResolveResultList.to(member);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiElement resolveByMembersProviders(PyFile module, String name) {
|
||||
for (PyModuleMembersProvider provider : Extensions.getExtensions(PyModuleMembersProvider.EP_NAME)) {
|
||||
if (!(provider instanceof PyOverridingModuleMembersProvider)) {
|
||||
final PsiElement element = provider.resolveMember(module, name);
|
||||
if (element != null) {
|
||||
return element;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiElement resolveByOverridingMembersProviders(@NotNull PyFile module, @NotNull String name) {
|
||||
for (PyModuleMembersProvider provider : Extensions.getExtensions(PyModuleMembersProvider.EP_NAME)) {
|
||||
if (provider instanceof PyOverridingModuleMembersProvider) {
|
||||
final PsiElement element = provider.resolveMember(module, name);
|
||||
if (element != null) {
|
||||
return element;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user