diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart index 10b7d3a6c4e..b7153c23706 100644 --- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart +++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart @@ -299,7 +299,14 @@ class BestPracticesVerifier extends RecursiveAstVisitor { CompileTimeErrorCode.OBSOLETE_COLON_FOR_DEFAULT_VALUE, separator); } } - super.visitDefaultFormalParameter(node); + _deprecatedVerifier + .pushInDeprecatedValue(node.declaredElement!.hasDeprecated); + + try { + super.visitDefaultFormalParameter(node); + } finally { + _deprecatedVerifier.popInDeprecated(); + } } @override diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart index 0be7906c7fd..b5f2b90ba6d 100644 --- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart +++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart @@ -64,6 +64,20 @@ int g(Object s) => ]); } + test_inDeprecatedDefaultFormalParameter() async { + await assertNoErrorsInCode2( + externalCode: r''' +@deprecated +class C { + const C(); +} +''', + code: r''' +f({@deprecated C? c = const C()}) {} +''', + ); + } + test_inDeprecatedEnum() async { await assertNoErrorsInCode2( externalCode: r''' @@ -83,6 +97,62 @@ enum E { ); } + test_inDeprecatedFieldFormalParameter() async { + await assertNoErrorsInCode2( + externalCode: r''' +@deprecated +class C {} +''', + code: r''' +class A { + Object? o; + A({@deprecated C? this.o}); +} +''', + ); + } + + test_inDeprecatedFunctionTypedFormalParameter() async { + await assertNoErrorsInCode2( + externalCode: r''' +@deprecated +class C {} +''', + code: r''' +f({@deprecated C? callback()?}) {} +''', + ); + } + + test_inDeprecatedSimpleFormalParameter() async { + await assertNoErrorsInCode2( + externalCode: r''' +@deprecated +class C {} +''', + code: r''' +f({@deprecated C? c}) {} +''', + ); + } + + test_inDeprecatedSuperFormalParameter() async { + await assertNoErrorsInCode2( + externalCode: r''' +@deprecated +class C {} +''', + code: r''' +class A { + A({Object? o}); +} +class B extends A { + B({@deprecated C? super.o}); +} +''', + ); + } + test_inEnum() async { await assertErrorsInCode2( externalCode: r'''