mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-13740 Django 1.7 QuerySet.as_manager() code completion support:
PyDynamicMember renamed
This commit is contained in:
+17
-17
@@ -33,7 +33,7 @@ import javax.swing.*;
|
||||
/**
|
||||
* @author Dennis.Ushakov
|
||||
*/
|
||||
public class PyDynamicMember {
|
||||
public class PyCustomMember {
|
||||
private String myName;
|
||||
private final boolean myResolveToInstance;
|
||||
private final Function<PsiElement, PyType> myTypeCallback;
|
||||
@@ -45,7 +45,7 @@ public class PyDynamicMember {
|
||||
|
||||
boolean myFunction = false;
|
||||
|
||||
public PyDynamicMember(@NotNull final String name, @Nullable final String type, final boolean resolveToInstance) {
|
||||
public PyCustomMember(@NotNull final String name, @Nullable final String type, final boolean resolveToInstance) {
|
||||
myName = name;
|
||||
myResolveToInstance = resolveToInstance;
|
||||
myTypeName = type;
|
||||
@@ -54,7 +54,7 @@ public class PyDynamicMember {
|
||||
myTypeCallback = null;
|
||||
}
|
||||
|
||||
public PyDynamicMember(@NotNull final String name) {
|
||||
public PyCustomMember(@NotNull final String name) {
|
||||
myName = name;
|
||||
myResolveToInstance = false;
|
||||
myTypeName = null;
|
||||
@@ -63,9 +63,9 @@ public class PyDynamicMember {
|
||||
myTypeCallback = null;
|
||||
}
|
||||
|
||||
public PyDynamicMember(@NotNull final String name,
|
||||
@Nullable final String type,
|
||||
final Function<PsiElement, PyType> typeCallback) {
|
||||
public PyCustomMember(@NotNull final String name,
|
||||
@Nullable final String type,
|
||||
final Function<PsiElement, PyType> typeCallback) {
|
||||
myName = name;
|
||||
|
||||
myResolveToInstance = false;
|
||||
@@ -75,7 +75,7 @@ public class PyDynamicMember {
|
||||
myTypeCallback = typeCallback;
|
||||
}
|
||||
|
||||
public PyDynamicMember(@NotNull final String name, @Nullable final PsiElement target) {
|
||||
public PyCustomMember(@NotNull final String name, @Nullable final PsiElement target) {
|
||||
myName = name;
|
||||
myTarget = target;
|
||||
myResolveToInstance = false;
|
||||
@@ -83,47 +83,47 @@ public class PyDynamicMember {
|
||||
myTypeCallback = null;
|
||||
}
|
||||
|
||||
public PyDynamicMember resolvesTo(String moduleQName) {
|
||||
public PyCustomMember resolvesTo(String moduleQName) {
|
||||
myPsiPath = new PyPsiPath.ToFile(moduleQName);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PyDynamicMember resolvesToClass(String classQName) {
|
||||
public PyCustomMember resolvesToClass(String classQName) {
|
||||
myPsiPath = new PyPsiPath.ToClassQName(classQName);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PyDynamicMember toClass(String name) {
|
||||
public PyCustomMember toClass(String name) {
|
||||
myPsiPath = new PyPsiPath.ToClass(myPsiPath, name);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PyDynamicMember toFunction(String name) {
|
||||
public PyCustomMember toFunction(String name) {
|
||||
myPsiPath = new PyPsiPath.ToFunction(myPsiPath, name);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PyDynamicMember toFunctionRecursive(String name) {
|
||||
public PyCustomMember toFunctionRecursive(String name) {
|
||||
myPsiPath = new PyPsiPath.ToFunctionRecursive(myPsiPath, name);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PyDynamicMember toClassAttribute(String name) {
|
||||
public PyCustomMember toClassAttribute(String name) {
|
||||
myPsiPath = new PyPsiPath.ToClassAttribute(myPsiPath, name);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PyDynamicMember toCall(String name, String... args) {
|
||||
public PyCustomMember toCall(String name, String... args) {
|
||||
myPsiPath = new PyPsiPath.ToCall(myPsiPath, name, args);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PyDynamicMember toAssignment(String assignee) {
|
||||
public PyCustomMember toAssignment(String assignee) {
|
||||
myPsiPath = new PyPsiPath.ToAssignment(myPsiPath, assignee);
|
||||
return this;
|
||||
}
|
||||
|
||||
public PyDynamicMember toPsiElement(final PsiElement psiElement) {
|
||||
public PyCustomMember toPsiElement(final PsiElement psiElement) {
|
||||
myPsiPath = new PyPsiPath() {
|
||||
|
||||
@Override
|
||||
@@ -179,7 +179,7 @@ public class PyDynamicMember {
|
||||
return myTypeName.substring(pos + 1);
|
||||
}
|
||||
|
||||
public PyDynamicMember asFunction() {
|
||||
public PyCustomMember asFunction() {
|
||||
myFunction = true;
|
||||
return this;
|
||||
}
|
||||
@@ -17,7 +17,7 @@ package com.jetbrains.python.psi.types;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -30,7 +30,7 @@ public interface PyClassMembersProvider {
|
||||
ExtensionPointName<PyClassMembersProvider> EP_NAME = ExtensionPointName.create("Pythonid.pyClassMembersProvider");
|
||||
|
||||
@NotNull
|
||||
Collection<PyDynamicMember> getMembers(PyClassType clazz, @Nullable PsiElement location);
|
||||
Collection<PyCustomMember> getMembers(PyClassType clazz, @Nullable PsiElement location);
|
||||
|
||||
@Nullable
|
||||
PsiElement resolveMember(PyClassType clazz, String name, @Nullable PsiElement location);
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package com.jetbrains.python.psi.types;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.psi.PyClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -30,22 +30,22 @@ import java.util.Collections;
|
||||
public class PyClassMembersProviderBase implements PyClassMembersProvider {
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<PyDynamicMember> getMembers(PyClassType clazz, PsiElement location) {
|
||||
public Collection<PyCustomMember> getMembers(PyClassType clazz, PsiElement location) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement resolveMember(PyClassType clazz, String name, PsiElement location) {
|
||||
final Collection<PyDynamicMember> members = getMembers(clazz, location);
|
||||
final Collection<PyCustomMember> members = getMembers(clazz, location);
|
||||
return resolveMemberByName(members, clazz, name);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiElement resolveMemberByName(Collection<PyDynamicMember> members,
|
||||
public static PsiElement resolveMemberByName(Collection<PyCustomMember> members,
|
||||
PyClassType clazz,
|
||||
String name) {
|
||||
final PyClass pyClass = clazz.getPyClass();
|
||||
for (PyDynamicMember member : members) {
|
||||
for (PyCustomMember member : members) {
|
||||
if (member.getName().equals(name)) {
|
||||
return member.resolve(pyClass);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ package com.jetbrains.python.psi.types;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.psi.PyFile;
|
||||
import com.jetbrains.python.psi.PyPsiFacade;
|
||||
import com.jetbrains.python.psi.resolve.PointInImport;
|
||||
@@ -33,7 +33,7 @@ import java.util.Collections;
|
||||
public abstract class PyModuleMembersProvider {
|
||||
public static final ExtensionPointName<PyModuleMembersProvider> EP_NAME = ExtensionPointName.create("Pythonid.pyModuleMembersProvider");
|
||||
|
||||
public Collection<PyDynamicMember> getMembers(PyFile module, PointInImport point) {
|
||||
public Collection<PyCustomMember> getMembers(PyFile module, PointInImport point) {
|
||||
final VirtualFile vFile = module.getVirtualFile();
|
||||
if (vFile != null) {
|
||||
final String qName = PyPsiFacade.getInstance(module.getProject()).findShortestImportableName(vFile, module);
|
||||
@@ -46,7 +46,7 @@ public abstract class PyModuleMembersProvider {
|
||||
|
||||
@Nullable
|
||||
public PsiElement resolveMember(PyFile module, String name) {
|
||||
for (PyDynamicMember o : getMembers(module, PointInImport.NONE)) {
|
||||
for (PyCustomMember o : getMembers(module, PointInImport.NONE)) {
|
||||
if (o.getName().equals(name)) {
|
||||
return o.resolve(module);
|
||||
}
|
||||
@@ -54,5 +54,5 @@ public abstract class PyModuleMembersProvider {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected abstract Collection<PyDynamicMember> getMembersByQName(PyFile module, String qName);
|
||||
protected abstract Collection<PyCustomMember> getMembersByQName(PyFile module, String qName);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.jetbrains.numpy.codeInsight;
|
||||
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.psi.PyFile;
|
||||
import com.jetbrains.python.psi.types.PyModuleMembersProvider;
|
||||
|
||||
@@ -39,11 +39,11 @@ public class NumpyModuleMembersProvider extends PyModuleMembersProvider {
|
||||
};
|
||||
|
||||
@Override
|
||||
protected Collection<PyDynamicMember> getMembersByQName(PyFile module, String qName) {
|
||||
protected Collection<PyCustomMember> getMembersByQName(PyFile module, String qName) {
|
||||
if ("numpy".equals(qName)) {
|
||||
final List<PyDynamicMember> members = new ArrayList<PyDynamicMember>();
|
||||
final List<PyCustomMember> members = new ArrayList<PyCustomMember>();
|
||||
for (String type : NUMERIC_TYPES) {
|
||||
members.add(new PyDynamicMember(type, "numpy.core.multiarray.dtype", false));
|
||||
members.add(new PyCustomMember(type, "numpy.core.multiarray.dtype", false));
|
||||
}
|
||||
return members;
|
||||
}
|
||||
|
||||
+8
-8
@@ -17,7 +17,7 @@ package com.jetbrains.python.codeInsight.stdlib;
|
||||
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.psi.PyClass;
|
||||
import com.jetbrains.python.psi.PyFile;
|
||||
import com.jetbrains.python.psi.PyTargetExpression;
|
||||
@@ -35,16 +35,16 @@ import java.util.List;
|
||||
* @author yole
|
||||
*/
|
||||
public class PyStdlibClassMembersProvider extends PyClassMembersProviderBase {
|
||||
private Key<List<PyDynamicMember>> mySocketMembersKey = Key.create("socket.members");
|
||||
private Key<List<PyCustomMember>> mySocketMembersKey = Key.create("socket.members");
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<PyDynamicMember> getMembers(PyClassType classType, PsiElement location) {
|
||||
public Collection<PyCustomMember> getMembers(PyClassType classType, PsiElement location) {
|
||||
PyClass clazz = classType.getPyClass();
|
||||
final String qualifiedName = clazz.getQualifiedName();
|
||||
if ("socket._socketobject".equals(qualifiedName)) {
|
||||
final PyFile socketFile = (PyFile)clazz.getContainingFile();
|
||||
List<PyDynamicMember> socketMembers = socketFile.getUserData(mySocketMembersKey);
|
||||
List<PyCustomMember> socketMembers = socketFile.getUserData(mySocketMembersKey);
|
||||
if (socketMembers == null) {
|
||||
socketMembers = calcSocketMembers(socketFile);
|
||||
socketFile.putUserData(mySocketMembersKey, socketMembers);
|
||||
@@ -54,20 +54,20 @@ public class PyStdlibClassMembersProvider extends PyClassMembersProviderBase {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
private static List<PyDynamicMember> calcSocketMembers(PyFile socketFile) {
|
||||
List<PyDynamicMember> result = new ArrayList<PyDynamicMember>();
|
||||
private static List<PyCustomMember> calcSocketMembers(PyFile socketFile) {
|
||||
List<PyCustomMember> result = new ArrayList<PyCustomMember>();
|
||||
addMethodsFromAttr(socketFile, result, "_socketmethods");
|
||||
addMethodsFromAttr(socketFile, result, "_delegate_methods");
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void addMethodsFromAttr(PyFile socketFile, List<PyDynamicMember> result, final String attrName) {
|
||||
private static void addMethodsFromAttr(PyFile socketFile, List<PyCustomMember> result, final String attrName) {
|
||||
final PyTargetExpression socketMethods = socketFile.findTopLevelAttribute(attrName);
|
||||
if (socketMethods != null) {
|
||||
final List<String> methods = PyUtil.getStringListFromTargetExpression(socketMethods);
|
||||
if (methods != null) {
|
||||
for (String name : methods) {
|
||||
result.add(new PyDynamicMember(name).resolvesTo("_socket").toClass("SocketType").toFunction(name));
|
||||
result.add(new PyCustomMember(name).resolvesTo("_socket").toClass("SocketType").toFunction(name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -18,7 +18,7 @@ package com.jetbrains.python.codeInsight.stdlib;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.psi.PyFile;
|
||||
import com.jetbrains.python.psi.resolve.ResolveImportUtil;
|
||||
import com.jetbrains.python.psi.types.PyModuleMembersProvider;
|
||||
@@ -33,15 +33,15 @@ import java.util.List;
|
||||
*/
|
||||
public class PyStdlibModuleMembersProvider extends PyModuleMembersProvider {
|
||||
@Override
|
||||
protected Collection<PyDynamicMember> getMembersByQName(PyFile module, String qName) {
|
||||
protected Collection<PyCustomMember> getMembersByQName(PyFile module, String qName) {
|
||||
if (qName.equals("os")) {
|
||||
final List<PyDynamicMember> results = new ArrayList<PyDynamicMember>();
|
||||
final List<PyCustomMember> results = new ArrayList<PyCustomMember>();
|
||||
PsiElement path = null;
|
||||
if (module != null) {
|
||||
final String pathModuleName = SystemInfo.isWindows ? "ntpath" : "posixpath";
|
||||
path = ResolveImportUtil.resolveModuleInRoots(QualifiedName.fromDottedString(pathModuleName), module);
|
||||
}
|
||||
results.add(new PyDynamicMember("path", path));
|
||||
results.add(new PyCustomMember("path", path));
|
||||
return results;
|
||||
}
|
||||
return Collections.emptyList();
|
||||
|
||||
+7
-7
@@ -16,7 +16,7 @@
|
||||
package com.jetbrains.python.codeInsight.userSkeletons;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.psi.PyClass;
|
||||
import com.jetbrains.python.psi.PyFunction;
|
||||
import com.jetbrains.python.psi.PyTargetExpression;
|
||||
@@ -37,7 +37,7 @@ import java.util.List;
|
||||
public class PyUserSkeletonsClassMembersProvider extends PyClassMembersProviderBase implements PyOverridingAncestorsClassMembersProvider {
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<PyDynamicMember> getMembers(@NotNull PyClassType classType, PsiElement location) {
|
||||
public Collection<PyCustomMember> getMembers(@NotNull PyClassType classType, PsiElement location) {
|
||||
final PyClass cls = classType.getPyClass();
|
||||
final PyClass skeleton = PyUserSkeletonsUtil.getUserSkeleton(cls);
|
||||
if (skeleton != null) {
|
||||
@@ -73,24 +73,24 @@ public class PyUserSkeletonsClassMembersProvider extends PyClassMembersProviderB
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Collection<PyDynamicMember> getClassMembers(@NotNull PyClass cls) {
|
||||
final List<PyDynamicMember> result = new ArrayList<PyDynamicMember>();
|
||||
private static Collection<PyCustomMember> getClassMembers(@NotNull PyClass cls) {
|
||||
final List<PyCustomMember> result = new ArrayList<PyCustomMember>();
|
||||
for (PyFunction function : cls.getMethods()) {
|
||||
final String name = function.getName();
|
||||
if (name != null) {
|
||||
result.add(new PyDynamicMember(name, function));
|
||||
result.add(new PyCustomMember(name, function));
|
||||
}
|
||||
}
|
||||
for (PyTargetExpression attribute : cls.getInstanceAttributes()) {
|
||||
final String name = attribute.getName();
|
||||
if (name != null) {
|
||||
result.add(new PyDynamicMember(name, attribute));
|
||||
result.add(new PyCustomMember(name, attribute));
|
||||
}
|
||||
}
|
||||
for (PyTargetExpression attribute : cls.getClassAttributes()) {
|
||||
final String name = attribute.getName();
|
||||
if (name != null) {
|
||||
result.add(new PyDynamicMember(name, attribute));
|
||||
result.add(new PyCustomMember(name, attribute));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
+4
-4
@@ -17,7 +17,7 @@ package com.jetbrains.python.codeInsight.userSkeletons;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFileSystemItem;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.psi.PyElement;
|
||||
import com.jetbrains.python.psi.PyFile;
|
||||
import com.jetbrains.python.psi.types.PyModuleMembersProvider;
|
||||
@@ -43,17 +43,17 @@ public class PyUserSkeletonsModuleMembersProvider extends PyModuleMembersProvide
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<PyDynamicMember> getMembersByQName(PyFile module, String qName) {
|
||||
protected Collection<PyCustomMember> getMembersByQName(PyFile module, String qName) {
|
||||
final PyFile moduleSkeleton = PyUserSkeletonsUtil.getUserSkeletonForModuleQName(qName, module);
|
||||
if (moduleSkeleton != null) {
|
||||
final List<PyDynamicMember> results = new ArrayList<PyDynamicMember>();
|
||||
final List<PyCustomMember> results = new ArrayList<PyCustomMember>();
|
||||
for (PyElement element : moduleSkeleton.iterateNames()) {
|
||||
if (element instanceof PsiFileSystemItem) {
|
||||
continue;
|
||||
}
|
||||
final String name = element.getName();
|
||||
if (name != null) {
|
||||
results.add(new PyDynamicMember(name, element));
|
||||
results.add(new PyCustomMember(name, element));
|
||||
}
|
||||
}
|
||||
return results;
|
||||
|
||||
+3
-3
@@ -35,7 +35,7 @@ import com.intellij.util.PlatformUtils;
|
||||
import com.jetbrains.python.PyBundle;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.codeInsight.PyCodeInsightSettings;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.codeInsight.controlflow.ScopeOwner;
|
||||
import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
|
||||
import com.jetbrains.python.codeInsight.imports.AutoImportHintAction;
|
||||
@@ -721,8 +721,8 @@ public class PyUnresolvedReferencesInspection extends PyInspection {
|
||||
PsiReference reference,
|
||||
@NotNull final String name) {
|
||||
for (PyClassMembersProvider provider : Extensions.getExtensions(PyClassMembersProvider.EP_NAME)) {
|
||||
final Collection<PyDynamicMember> resolveResult = provider.getMembers(type, reference.getElement());
|
||||
for (PyDynamicMember member : resolveResult) {
|
||||
final Collection<PyCustomMember> resolveResult = provider.getMembers(type, reference.getElement());
|
||||
for (PyCustomMember member : resolveResult) {
|
||||
if (member.getName().equals(name)) return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.psi.*;
|
||||
import com.jetbrains.python.psi.impl.PyBuiltinCache;
|
||||
import com.jetbrains.python.psi.impl.ResolveResultList;
|
||||
@@ -415,7 +415,7 @@ public class PyClassTypeImpl extends UserDataHolderBase implements PyClassType {
|
||||
|
||||
// from providers
|
||||
for (PyClassMembersProvider provider : Extensions.getExtensions(PyClassMembersProvider.EP_NAME)) {
|
||||
for (PyDynamicMember member : provider.getMembers(this, location)) {
|
||||
for (PyCustomMember member : provider.getMembers(this, location)) {
|
||||
final String name = member.getName();
|
||||
if (!namesAlready.contains(name)) {
|
||||
LookupElementBuilder lookupElementBuilder = LookupElementBuilder.create(name).withIcon(member.getIcon()).withTypeText(getName());
|
||||
|
||||
@@ -30,7 +30,7 @@ import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.codeInsight.PyDynamicMember;
|
||||
import com.jetbrains.python.codeInsight.PyCustomMember;
|
||||
import com.jetbrains.python.codeInsight.controlflow.ScopeOwner;
|
||||
import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
|
||||
import com.jetbrains.python.psi.*;
|
||||
@@ -289,7 +289,7 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
|
||||
Set<String> namesAlready = context.get(CTX_NAMES);
|
||||
PointInImport point = ResolveImportUtil.getPointInImport(location);
|
||||
for (PyModuleMembersProvider provider : Extensions.getExtensions(PyModuleMembersProvider.EP_NAME)) {
|
||||
for (PyDynamicMember member : provider.getMembers(myModule, point)) {
|
||||
for (PyCustomMember member : provider.getMembers(myModule, point)) {
|
||||
final String name = member.getName();
|
||||
if (namesAlready != null) {
|
||||
namesAlready.add(name);
|
||||
|
||||
Reference in New Issue
Block a user