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 <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
This commit is contained in:
Sam Rawlins
2023-03-30 20:01:55 +00:00
committed by Commit Queue
parent 2ff94f8882
commit 3fe440b1e1
2 changed files with 78 additions and 1 deletions
@@ -299,7 +299,14 @@ class BestPracticesVerifier extends RecursiveAstVisitor<void> {
CompileTimeErrorCode.OBSOLETE_COLON_FOR_DEFAULT_VALUE, separator);
}
}
super.visitDefaultFormalParameter(node);
_deprecatedVerifier
.pushInDeprecatedValue(node.declaredElement!.hasDeprecated);
try {
super.visitDefaultFormalParameter(node);
} finally {
_deprecatedVerifier.popInDeprecated();
}
}
@override
@@ -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'''