From 3fe440b1e1666691d4e771bd6956ffa97d57261e Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Thu, 30 Mar 2023 20:01:55 +0000 Subject: [PATCH] Do not report deprecated member use inside deprecated parameters Fixes https://github.com/dart-lang/sdk/issues/51664 Change-Id: I7f7e9f56c27e81f7d60c3a66e0727b433d854b8b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291700 Reviewed-by: Phil Quitslund Reviewed-by: Brian Wilkerson Commit-Queue: Samuel Rawlins --- .../src/error/best_practices_verifier.dart | 9 ++- .../deprecated_member_use_test.dart | 70 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) 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'''