mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Pass TypeEvalContext to PyReferenceResolveProvider
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,6 +17,7 @@ package com.jetbrains.python.psi.resolve;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.jetbrains.python.psi.PyQualifiedExpression;
|
||||
import com.jetbrains.python.psi.types.TypeEvalContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
@@ -32,5 +33,5 @@ public interface PyReferenceResolveProvider {
|
||||
* Allows to provide a custom resolve result for qualified expression
|
||||
*/
|
||||
@NotNull
|
||||
List<RatedResolveResult> resolveName(@NotNull final PyQualifiedExpression element);
|
||||
List<RatedResolveResult> resolveName(@NotNull PyQualifiedExpression element, @NotNull TypeEvalContext context);
|
||||
}
|
||||
|
||||
@@ -362,8 +362,9 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference
|
||||
@NotNull
|
||||
private ResolveResultList resolveByReferenceResolveProviders() {
|
||||
final ResolveResultList results = new ResolveResultList();
|
||||
final TypeEvalContext context = myContext.getTypeEvalContext();
|
||||
for (PyReferenceResolveProvider provider : Extensions.getExtensions(PyReferenceResolveProvider.EP_NAME)) {
|
||||
results.addAll(provider.resolveName(myElement));
|
||||
results.addAll(provider.resolveName(myElement, context));
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
+3
-4
@@ -38,12 +38,11 @@ import java.util.Optional;
|
||||
public class PythonBuiltinReferenceResolveProvider implements PyReferenceResolveProvider {
|
||||
@NotNull
|
||||
@Override
|
||||
public List<RatedResolveResult> resolveName(@NotNull PyQualifiedExpression element) {
|
||||
public List<RatedResolveResult> resolveName(@NotNull PyQualifiedExpression element, @NotNull TypeEvalContext context) {
|
||||
final List<RatedResolveResult> result = new ArrayList<>();
|
||||
final PsiElement realContext = PyPsiUtils.getRealContext(element);
|
||||
final String referencedName = element.getReferencedName();
|
||||
final PyBuiltinCache builtinCache = PyBuiltinCache.getInstance(realContext);
|
||||
final TypeEvalContext typeEvalContext = TypeEvalContext.codeInsightFallback(element.getProject());
|
||||
|
||||
// resolve to module __doc__
|
||||
if (PyNames.DOC.equals(referencedName)) {
|
||||
@@ -51,7 +50,7 @@ public class PythonBuiltinReferenceResolveProvider implements PyReferenceResolve
|
||||
Optional
|
||||
.ofNullable(builtinCache.getObjectType())
|
||||
.map(type -> type.resolveMember(referencedName, element, AccessDirection.of(element),
|
||||
PyResolveContext.noImplicits().withTypeEvalContext(typeEvalContext)))
|
||||
PyResolveContext.noImplicits().withTypeEvalContext(context)))
|
||||
.orElse(Collections.emptyList())
|
||||
);
|
||||
}
|
||||
@@ -64,7 +63,7 @@ public class PythonBuiltinReferenceResolveProvider implements PyReferenceResolve
|
||||
resultElement = bfile; // resolve __builtins__ reference
|
||||
}
|
||||
if (resultElement != null) {
|
||||
result.add(new ImportedResolveResult(resultElement, PyReferenceImpl.getRate(resultElement, typeEvalContext), null));
|
||||
result.add(new ImportedResolveResult(resultElement, PyReferenceImpl.getRate(resultElement, context), null));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user