mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
test fix: type is used for argument completion
This commit is contained in:
+26
-3
@@ -28,6 +28,7 @@ import com.jetbrains.python.psi.resolve.QualifiedResolveResult;
|
||||
import com.jetbrains.python.psi.search.PySuperMethodsSearch;
|
||||
import com.jetbrains.python.psi.types.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -40,9 +41,13 @@ public class KeywordArgumentCompletionUtil {
|
||||
if (callExpr != null) {
|
||||
PyExpression callee = callExpr.getCallee();
|
||||
if (callee instanceof PyReferenceExpression && element.getParent() == callExpr.getArgumentList()) {
|
||||
final PyResolveContext resolveContext = PyResolveContext.defaultContext().withTypeEvalContext(context);
|
||||
final QualifiedResolveResult result = ((PyReferenceExpression)callee).followAssignmentsChain(resolveContext);
|
||||
PsiElement def = result.getElement();
|
||||
|
||||
PsiElement def = getElementByType(context, callee);
|
||||
if (def == null) {
|
||||
def = getElementByChain(context, (PyReferenceExpression)callee);
|
||||
}
|
||||
|
||||
|
||||
if (def instanceof PyCallable) {
|
||||
addKeywordArgumentVariants((PyCallable)def, callExpr, ret);
|
||||
}
|
||||
@@ -61,6 +66,24 @@ public class KeywordArgumentCompletionUtil {
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PyElement getElementByType(@NotNull final TypeEvalContext context, @NotNull final PyExpression callee) {
|
||||
final PyType pyType = context.getType(callee);
|
||||
if (pyType instanceof PyFunctionType) {
|
||||
return ((PyFunctionType)pyType).getCallable();
|
||||
}
|
||||
if (pyType instanceof PyClassType) {
|
||||
return ((PyClassType)pyType).getPyClass();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static PsiElement getElementByChain(@NotNull TypeEvalContext context, PyReferenceExpression callee) {
|
||||
final PyResolveContext resolveContext = PyResolveContext.defaultContext().withTypeEvalContext(context);
|
||||
final QualifiedResolveResult result = callee.followAssignmentsChain(resolveContext);
|
||||
return result.getElement();
|
||||
}
|
||||
|
||||
private static void fetchCallablesFromUnion(@NotNull final List<LookupElement> ret,
|
||||
@NotNull final PyCallExpression callExpr,
|
||||
@NotNull final PyUnionType unionType,
|
||||
|
||||
Reference in New Issue
Block a user