mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
committed by
intellij-monorepo-bot
parent
d9756f9e05
commit
e0f7bb46cc
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user