From 172d60f8437df5563d3ceb785cbbbedfdd9657c5 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Mon, 15 Sep 2025 16:55:15 +0300 Subject: [PATCH] PY-80002 Add more tests on forward references in annotations from various scopes and in different versions GitOrigin-RevId: cfe4d2ebbc7ff83f5d206ecc2569b3ba4b70a483 --- .../jetbrains/python/PyCommonResolveTest.java | 44 ++++++++++++++++++- ...unctionReturnAnnotationForwardReference.py | 6 +++ ...turnAnnotationForwardReferenceBefore314.py | 6 +++ ...efore314WithFromFutureImportAnnotations.py | 8 ++++ ...fore314WithFromFutureImportAnnotations.py} | 0 .../MethodReturnAnnotationForwardReference.py | 7 +++ ...turnAnnotationForwardReferenceBefore314.py | 7 +++ ...fore314WithFromFutureImportAnnotations.py} | 0 8 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 python/testData/resolve/FunctionReturnAnnotationForwardReference.py create mode 100644 python/testData/resolve/FunctionReturnAnnotationForwardReferenceBefore314.py create mode 100644 python/testData/resolve/FunctionReturnAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py rename python/testData/resolve/{ParameterAnnotationForwardReference.py => MethodParameterAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py} (100%) create mode 100644 python/testData/resolve/MethodReturnAnnotationForwardReference.py create mode 100644 python/testData/resolve/MethodReturnAnnotationForwardReferenceBefore314.py rename python/testData/resolve/{ReturnAnnotationForwardReference.py => MethodReturnAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py} (100%) diff --git a/python/python-common-tests/com/jetbrains/python/PyCommonResolveTest.java b/python/python-common-tests/com/jetbrains/python/PyCommonResolveTest.java index 5b6336ed8895..77b126b38aad 100644 --- a/python/python-common-tests/com/jetbrains/python/PyCommonResolveTest.java +++ b/python/python-common-tests/com/jetbrains/python/PyCommonResolveTest.java @@ -1374,7 +1374,23 @@ public abstract class PyCommonResolveTest extends PyCommonResolveTestCase { } // PY-28228 - public void testReturnAnnotationForwardReference() { + public void testMethodReturnAnnotationForwardReferenceBefore314() { + runWithLanguageLevel( + LanguageLevel.PYTHON37, + () -> assertUnresolved() + ); + } + + // PY-28228 + public void testFunctionReturnAnnotationForwardReferenceBefore314() { + runWithLanguageLevel( + LanguageLevel.PYTHON37, + () -> assertUnresolved() + ); + } + + // PY-28228 + public void testMethodReturnAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations() { runWithLanguageLevel( LanguageLevel.PYTHON37, () -> assertResolvesTo(PyClass.class, "A") @@ -1382,13 +1398,37 @@ public abstract class PyCommonResolveTest extends PyCommonResolveTestCase { } // PY-28228 - public void testParameterAnnotationForwardReference() { + public void testFunctionReturnAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations() { runWithLanguageLevel( LanguageLevel.PYTHON37, () -> assertResolvesTo(PyClass.class, "A") ); } + // PY-28228 + public void testMethodParameterAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations() { + runWithLanguageLevel( + LanguageLevel.PYTHON37, + () -> assertResolvesTo(PyClass.class, "A") + ); + } + + // PY-80002 + public void testMethodReturnAnnotationForwardReference() { + runWithLanguageLevel( + LanguageLevel.getLatest(), + () -> assertResolvesTo(PyClass.class, "A") + ); + } + + // PY-80002 + public void testFunctionReturnAnnotationForwardReference() { + runWithLanguageLevel( + LanguageLevel.getLatest(), + () -> assertResolvesTo(PyClass.class, "A") + ); + } + // PY-19890 public void testUnboundVariableOnClassLevelDeclaredBelowAsTarget() { final PyTargetExpression foo = assertResolvesTo(PyTargetExpression.class, "foo"); diff --git a/python/testData/resolve/FunctionReturnAnnotationForwardReference.py b/python/testData/resolve/FunctionReturnAnnotationForwardReference.py new file mode 100644 index 000000000000..1e345ff61224 --- /dev/null +++ b/python/testData/resolve/FunctionReturnAnnotationForwardReference.py @@ -0,0 +1,6 @@ +def create() -> A: + # + pass + +class A: + pass diff --git a/python/testData/resolve/FunctionReturnAnnotationForwardReferenceBefore314.py b/python/testData/resolve/FunctionReturnAnnotationForwardReferenceBefore314.py new file mode 100644 index 000000000000..1e345ff61224 --- /dev/null +++ b/python/testData/resolve/FunctionReturnAnnotationForwardReferenceBefore314.py @@ -0,0 +1,6 @@ +def create() -> A: + # + pass + +class A: + pass diff --git a/python/testData/resolve/FunctionReturnAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py b/python/testData/resolve/FunctionReturnAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py new file mode 100644 index 000000000000..352fcec620db --- /dev/null +++ b/python/testData/resolve/FunctionReturnAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +def create() -> A: + # + pass + +class A: + pass diff --git a/python/testData/resolve/ParameterAnnotationForwardReference.py b/python/testData/resolve/MethodParameterAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py similarity index 100% rename from python/testData/resolve/ParameterAnnotationForwardReference.py rename to python/testData/resolve/MethodParameterAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py diff --git a/python/testData/resolve/MethodReturnAnnotationForwardReference.py b/python/testData/resolve/MethodReturnAnnotationForwardReference.py new file mode 100644 index 000000000000..48372475e8fa --- /dev/null +++ b/python/testData/resolve/MethodReturnAnnotationForwardReference.py @@ -0,0 +1,7 @@ +class B: + def create(self) -> A: + # + pass + +class A: + pass \ No newline at end of file diff --git a/python/testData/resolve/MethodReturnAnnotationForwardReferenceBefore314.py b/python/testData/resolve/MethodReturnAnnotationForwardReferenceBefore314.py new file mode 100644 index 000000000000..48372475e8fa --- /dev/null +++ b/python/testData/resolve/MethodReturnAnnotationForwardReferenceBefore314.py @@ -0,0 +1,7 @@ +class B: + def create(self) -> A: + # + pass + +class A: + pass \ No newline at end of file diff --git a/python/testData/resolve/ReturnAnnotationForwardReference.py b/python/testData/resolve/MethodReturnAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py similarity index 100% rename from python/testData/resolve/ReturnAnnotationForwardReference.py rename to python/testData/resolve/MethodReturnAnnotationForwardReferenceBefore314WithFromFutureImportAnnotations.py