diff --git a/python/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java b/python/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java index 7f41bfc813ba..f9b895986b6c 100644 --- a/python/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java +++ b/python/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java @@ -41,8 +41,6 @@ import com.jetbrains.python.psi.impl.PyExpressionCodeFragmentImpl; import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.impl.stubs.PyTypingAliasStubType; import com.jetbrains.python.psi.resolve.*; -import com.jetbrains.python.psi.stubs.PyTargetExpressionStub; -import com.jetbrains.python.psi.stubs.PyTypingAliasStub; import com.jetbrains.python.psi.types.*; import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; @@ -615,7 +613,7 @@ public class PyTypingTypeProvider extends PyTypeProviderBase { } @Nullable - private static PyExpression createExpressionFromFragment(@NotNull String contents, @NotNull PsiElement anchor) { + public static PyExpression createExpressionFromFragment(@NotNull String contents, @NotNull PsiElement anchor) { final PyExpressionCodeFragmentImpl codeFragment = new PyExpressionCodeFragmentImpl(anchor.getProject(), "dummy.py", contents, false); codeFragment.setContext(FileContextUtil.getContextFile(anchor)); final PyExpressionStatement statement = as(codeFragment.getFirstChild(), PyExpressionStatement.class); @@ -787,22 +785,12 @@ public class PyTypingTypeProvider extends PyTypeProviderBase { // Presumably, a TypeVar definition or a type alias if (element instanceof PyTargetExpression) { final PyTargetExpression targetExpr = (PyTargetExpression)element; - PyExpression assignedValue = null; + final PyExpression assignedValue; if (context.maySwitchToAST(expression)) { assignedValue = targetExpr.findAssignedValue(); } else { - final PyTargetExpressionStub stub = targetExpr.getStub(); - if (stub != null) { - final PyTypingAliasStub aliasStub = stub.getCustomStub(PyTypingAliasStub.class); - if (aliasStub != null) { - assignedValue = createExpressionFromFragment(aliasStub.getText(), expression); - } - } - else { - // Use PSI to get the assigned value but only if the same expression would be saved in stubs - assignedValue = PyTypingAliasStubType.getAssignedValueIfTypeAliasLike(targetExpr); - } + assignedValue = PyTypingAliasStubType.getAssignedValueStubSafe(targetExpr); } if (assignedValue != null) { elements.add(assignedValue); diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java index c6b6d83368c8..ea59fb65b7e7 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java @@ -23,11 +23,14 @@ import com.intellij.util.io.StringRef; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.codeInsight.typing.PyTypingTypeProvider; import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.stubs.PyTargetExpressionStub; +import com.jetbrains.python.psi.stubs.PyTargetExpressionStub.InitializerType; import com.jetbrains.python.psi.stubs.PyTypingAliasStub; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.IOException; +import java.util.Objects; import java.util.regex.Pattern; import static com.jetbrains.python.psi.PyUtil.as; @@ -52,17 +55,17 @@ public class PyTypingAliasStubType extends CustomTargetExpressionStubType