PY-18816 Don't use unstubbed AST to get annotation value if it's not allowed by context

even by sacrificing a bit of performance to avoid possible stochastic
issues when resolve leads to different results depending on whether
a file was parsed or not.
This commit is contained in:
Mikhail Golubev
2017-07-19 19:28:31 +03:00
parent 1580b82b92
commit 605c15509b
@@ -22,7 +22,6 @@ import com.google.common.collect.Sets;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.StubBasedPsiElement;
import com.intellij.psi.impl.source.resolve.FileContextUtil;
import com.intellij.psi.util.CachedValueProvider;
import com.intellij.psi.util.CachedValuesManager;
@@ -624,8 +623,7 @@ public class PyTypingTypeProvider extends PyTypeProviderBase {
@Nullable
private static PyExpression getAnnotationValue(@NotNull PyAnnotationOwner owner, @NotNull TypeEvalContext context) {
final boolean elementWasParsed = owner instanceof StubBasedPsiElement && ((StubBasedPsiElement)owner).getStub() == null;
if (context.maySwitchToAST(owner) || elementWasParsed) {
if (context.maySwitchToAST(owner)) {
final PyAnnotation annotation = owner.getAnnotation();
if (annotation != null) {
return annotation.getValue();