Drop PyiModuleMembersProvider since, if a module has a python stub, this stub is presented in resolve results (PY-39956)

GitOrigin-RevId: 86553aa62f7c02a329441a7cdfb3781947e68a88
This commit is contained in:
Semyon Proshev
2020-01-30 14:07:49 +00:00
committed by intellij-monorepo-bot
parent d9756f9e05
commit e0f7bb46cc
2 changed files with 0 additions and 88 deletions
@@ -148,7 +148,6 @@
<typeProvider implementation="com.jetbrains.python.pyi.PyiTypeProvider"/>
<typeProvider implementation="com.jetbrains.python.codeInsight.typing.PyTypedDictTypeProvider"/>
<typeProvider implementation="com.jetbrains.python.codeInsight.typing.PyTypedDictOverridingTypeProvider"/>
<pyModuleMembersProvider implementation="com.jetbrains.python.pyi.PyiModuleMembersProvider"/>
<pyClassMembersProvider implementation="com.jetbrains.python.pyi.PyiClassMembersProvider"/>
<pyReferenceResolveProvider implementation="com.jetbrains.python.psi.resolve.PyForwardReferenceResolveProvider"/>
<inspectionExtension implementation="com.jetbrains.python.pyi.PyiInspectionExtension"/>
@@ -1,87 +0,0 @@
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.pyi;
import com.intellij.psi.PsiElement;
import com.jetbrains.python.codeInsight.PyCustomMember;
import com.jetbrains.python.psi.PyElement;
import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.psi.PyFromImportStatement;
import com.jetbrains.python.psi.PyImportElement;
import com.jetbrains.python.psi.resolve.PointInImport;
import com.jetbrains.python.psi.resolve.PyResolveContext;
import com.jetbrains.python.psi.types.PyModuleMembersProvider;
import com.jetbrains.python.psi.types.TypeEvalContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
/**
* @author vlan
*/
public class PyiModuleMembersProvider extends PyModuleMembersProvider {
@Nullable
@Override
public PsiElement resolveMember(@NotNull PyFile module, @NotNull String name, @NotNull PyResolveContext resolveContext) {
final PsiElement pythonStub = PyiUtil.getPythonStub(module);
if (pythonStub instanceof PyFile) {
final PyFile stubFile = (PyFile)pythonStub;
final PsiElement member = stubFile.getElementNamed(name);
if (member != null && isExportedName(stubFile, name)) {
return member;
}
}
return null;
}
@Override
@NotNull
public Collection<PyCustomMember> getMembers(@NotNull PyFile module, @NotNull PointInImport point, @NotNull TypeEvalContext context) {
final PsiElement pythonStub = PyiUtil.getPythonStub(module);
if (pythonStub instanceof PyFile) {
final PyFile stubFile = (PyFile)pythonStub;
final List<PyCustomMember> results = new ArrayList<>();
for (PyElement element : stubFile.iterateNames()) {
final String name = element.getName();
if (name != null && isExportedName(stubFile, name)) {
results.add(new PyCustomMember(name, element));
}
}
return results;
}
return Collections.emptyList();
}
@Override
@NotNull
protected Collection<PyCustomMember> getMembersByQName(@NotNull PyFile module, @NotNull String qName, @NotNull TypeEvalContext context) {
return Collections.emptyList();
}
private static boolean isExportedName(@NotNull PyFile file, @NotNull String name) {
final PyImportElement importElement = findImportElementByName(file, name);
return importElement == null || isExportedImportElement(importElement);
}
private static boolean isExportedImportElement(@NotNull PyImportElement element) {
return element.getAsNameElement() != null;
}
@Nullable
private static PyImportElement findImportElementByName(@NotNull PyFile file, @NotNull String name) {
for (PyImportElement element : getImportElements(file)) {
if (name.equals(element.getVisibleName())) {
return element;
}
}
return null;
}
private static List<PyImportElement> getImportElements(@NotNull PyFile file) {
final List<PyImportElement> result = new ArrayList<>(file.getImportTargets());
for (PyFromImportStatement statement : file.getFromImports()) {
result.addAll(Arrays.asList(statement.getImportElements()));
}
return result;
}
}