From ca2017675f36acdbd8f8dbe1e9fabc1ad16b3789 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 20 Feb 2018 14:50:17 +0300 Subject: [PATCH] PY-28032 Optional[Any] in a type hint is not coerced into plain Any --- .../python/codeInsight/typing/PyTypingTypeProvider.java | 6 +++--- python/testSrc/com/jetbrains/python/PyTypingTest.java | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/python/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java b/python/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java index 878c6d75d7e8..b927a3af8b5c 100644 --- a/python/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java +++ b/python/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java @@ -961,9 +961,9 @@ public class PyTypingTypeProvider extends PyTypeProviderBase { if (operandNames.contains(OPTIONAL)) { final PyExpression indexExpr = subscriptionExpr.getIndexExpression(); if (indexExpr != null) { - final PyType type = Ref.deref(getType(indexExpr, context)); - if (type != null) { - return Ref.create(PyUnionType.union(type, PyNoneType.INSTANCE)); + final Ref typeRef = getType(indexExpr, context); + if (typeRef != null) { + return Ref.create(PyUnionType.union(typeRef.get(), PyNoneType.INSTANCE)); } } return Ref.create(); diff --git a/python/testSrc/com/jetbrains/python/PyTypingTest.java b/python/testSrc/com/jetbrains/python/PyTypingTest.java index aece3fb57dbe..719059940a88 100644 --- a/python/testSrc/com/jetbrains/python/PyTypingTest.java +++ b/python/testSrc/com/jetbrains/python/PyTypingTest.java @@ -275,6 +275,15 @@ public class PyTypingTest extends PyTestCase { " pass\n"); } + // PY-28032 + public void testOptionalOfAny() { + doTest("Optional[Any]", + "from typing import Optional, Any\n" + + "\n" + + "x = None # type: Optional[Any]\n" + + "expr = x\n"); + } + public void testOptionalFromDefaultNone() { doTest("Optional[int]", "def foo(expr: int = None):\n" +