PY-80002 Add more tests on forward references in annotations from various scopes and in different versions

GitOrigin-RevId: cfe4d2ebbc7ff83f5d206ecc2569b3ba4b70a483
This commit is contained in:
Mikhail Golubev
2025-09-16 17:00:01 +00:00
committed by intellij-monorepo-bot
parent 761c8be02a
commit 172d60f843
8 changed files with 76 additions and 2 deletions
@@ -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");
@@ -0,0 +1,6 @@
def create() -> A:
# <ref>
pass
class A:
pass
@@ -0,0 +1,6 @@
def create() -> A:
# <ref>
pass
class A:
pass
@@ -0,0 +1,8 @@
from __future__ import annotations
def create() -> A:
# <ref>
pass
class A:
pass
@@ -0,0 +1,7 @@
class B:
def create(self) -> A:
# <ref>
pass
class A:
pass
@@ -0,0 +1,7 @@
class B:
def create(self) -> A:
# <ref>
pass
class A:
pass