From 25940942909a5af9b8f0c83f3e7d9efef8a1691a Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Thu, 27 Oct 2016 19:19:10 +0300 Subject: [PATCH] Move resolving module __doc__ to PythonBuiltinReferenceResolveProvider --- .../psi/impl/references/PyReferenceImpl.java | 16 +-------------- ...PythonBuiltinReferenceResolveProvider.java | 20 +++++++++++++++++-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java b/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java index 3145dd14a937..73f4ce47bccb 100644 --- a/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java @@ -266,21 +266,7 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference final PsiElement roof = findResolveRoof(referencedName, realContext); PyResolveUtil.scopeCrawlUp(processor, myElement, referencedName, roof); - final List resultsFromProcessor = getResultsFromProcessor(referencedName, processor, realContext, roof); - - // resolve to module __doc__ - if (resultsFromProcessor.isEmpty() && referencedName.equals(PyNames.DOC)) { - ret.addAll( - Optional - .ofNullable(PyBuiltinCache.getInstance(myElement).getObjectType()) - .map(type -> type.resolveMember(referencedName, myElement, AccessDirection.of(myElement), myContext)) - .orElse(Collections.emptyList()) - ); - - return ret; - } - - return resultsFromProcessor; + return getResultsFromProcessor(referencedName, processor, realContext, roof); } protected List getResultsFromProcessor(@NotNull String referencedName, diff --git a/python/src/com/jetbrains/python/psi/resolve/PythonBuiltinReferenceResolveProvider.java b/python/src/com/jetbrains/python/psi/resolve/PythonBuiltinReferenceResolveProvider.java index 48358136b2f1..33aa8f221669 100644 --- a/python/src/com/jetbrains/python/psi/resolve/PythonBuiltinReferenceResolveProvider.java +++ b/python/src/com/jetbrains/python/psi/resolve/PythonBuiltinReferenceResolveProvider.java @@ -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. @@ -16,6 +16,8 @@ package com.jetbrains.python.psi.resolve; import com.intellij.psi.PsiElement; +import com.jetbrains.python.PyNames; +import com.jetbrains.python.psi.AccessDirection; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyQualifiedExpression; import com.jetbrains.python.psi.PyUtil; @@ -26,7 +28,9 @@ import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Optional; /** * User : ktisha @@ -39,6 +43,19 @@ public class PythonBuiltinReferenceResolveProvider implements PyReferenceResolve 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)) { + result.addAll( + Optional + .ofNullable(builtinCache.getObjectType()) + .map(type -> type.resolveMember(referencedName, element, AccessDirection.of(element), + PyResolveContext.noImplicits().withTypeEvalContext(typeEvalContext))) + .orElse(Collections.emptyList()) + ); + } + // ...as a builtin symbol final PyFile bfile = builtinCache.getBuiltinsFile(); if (bfile != null && !PyUtil.isClassPrivateName(referencedName)) { @@ -47,7 +64,6 @@ public class PythonBuiltinReferenceResolveProvider implements PyReferenceResolve resultElement = bfile; // resolve __builtins__ reference } if (resultElement != null) { - final TypeEvalContext typeEvalContext = TypeEvalContext.codeInsightFallback(element.getProject()); result.add(new ImportedResolveResult(resultElement, PyReferenceImpl.getRate(resultElement, typeEvalContext), null)); } }