Pass TypeEvalContext to PyReferenceResolveProvider

This commit is contained in:
Semyon Proshev
2016-11-15 16:05:38 +03:00
parent 2594094290
commit 5fea23d3c7
3 changed files with 8 additions and 7 deletions
@@ -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;
}
@@ -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;