From e52455d0226db7090c3b1891e97829f46bfb29e7 Mon Sep 17 00:00:00 2001 From: Daniil Kalinin Date: Wed, 16 Jul 2025 12:42:18 +0200 Subject: [PATCH] PY-76855 Do not report ambiguous access to a generic instance if the type parameter has a default GitOrigin-RevId: ce6c1cb85beac3a326dd87c4477be8893d99e802 --- .../python/inspections/PyTypeCheckerInspection.java | 4 +++- .../inspections/Py3TypeCheckerInspectionTest.java | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyTypeCheckerInspection.java b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyTypeCheckerInspection.java index 51c329f73693..6fc7ddb172c7 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/inspections/PyTypeCheckerInspection.java +++ b/python/python-psi-impl/src/com/jetbrains/python/inspections/PyTypeCheckerInspection.java @@ -267,7 +267,9 @@ public class PyTypeCheckerInspection extends PyInspection { } private static boolean requiresTypeSpecialization(@Nullable PyType type) { - if (type instanceof PyTypeParameterType && !(type instanceof PySelfType)) return true; + if (type instanceof PyTypeParameterType typeParameterType && + typeParameterType.getDefaultType() == null && + !(type instanceof PySelfType)) return true; return type instanceof PyCollectionType collectionType && exists(collectionType.getElementTypes(), Visitor::requiresTypeSpecialization); } diff --git a/python/testSrc/com/jetbrains/python/inspections/Py3TypeCheckerInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/Py3TypeCheckerInspectionTest.java index c352d3bc5543..c7015d498348 100644 --- a/python/testSrc/com/jetbrains/python/inspections/Py3TypeCheckerInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/Py3TypeCheckerInspectionTest.java @@ -2994,4 +2994,17 @@ def foo(param: str | int) -> TypeGuard[str]: v5: Hashable = DC5(0) """); } + + // PY-76855 + public void testAccessToAttributeOfGenericClassWithDefaultIsNotAmbiguous() { + doTestByText(""" + class Test1[T = int](): + attr: T + class Test2[T](): + attr: T + + Test1.attr #OK + Test2.attr + """); + } }