extension type support for deprecated_member_use_from_same_package

Fixes: https://github.com/dart-lang/linter/issues/4715

Change-Id: I8584facf340c7818d539b9182ebb50c12484114e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/322580
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
This commit is contained in:
pq 2023-08-24 21:11:17 +00:00 committed by Commit Queue
parent 0f39236144
commit 69c6a3c377
2 changed files with 79 additions and 0 deletions

View file

@ -275,6 +275,18 @@ class _RecursiveVisitor extends RecursiveAstVisitor<void> {
super.visitExtensionOverride(node);
}
@override
void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
_deprecatedVerifier
.pushInDeprecatedValue(node.declaredElement?.hasDeprecated ?? false);
try {
super.visitExtensionTypeDeclaration(node);
} finally {
_deprecatedVerifier.popInDeprecated();
}
}
@override
void visitFieldDeclaration(FieldDeclaration node) {
_deprecatedVerifier.pushInDeprecatedMetadata(node.metadata);

View file

@ -110,6 +110,16 @@ extension E on C {}
''');
}
test_deprecatedClass_usedInDeprecatedExtensionTypeRepresentation() async {
await assertNoDiagnostics(r'''
@deprecated
class C {}
@deprecated
extension type E(C c) { }
''');
}
test_deprecatedClass_usedInDeprecatedField_initializer() async {
await assertNoDiagnostics(r'''
@deprecated
@ -208,6 +218,17 @@ C? x;
''');
}
test_deprecatedClass_usedInExtensionTypeRepresentation() async {
await assertDiagnostics(r'''
@deprecated
class C {}
extension type E(C c) { }
''', [
lint(41, 1),
]);
}
test_deprecatedClass_usedInFieldFormalParameter() async {
await assertDiagnostics(r'''
@deprecated
@ -364,6 +385,52 @@ var x = E(0).f();
]);
}
test_deprecatedExtensionType_usedInExtensionTypeImplements() async {
await assertDiagnostics(r'''
@deprecated
extension type E(int i) { }
extension type F(int i) implements E { }
''', [
lint(76, 1),
]);
}
test_deprecatedExtensionType_usedInExtensionTypeRepresentation() async {
await assertDiagnostics(r'''
@deprecated
extension type E(int i) { }
extension type F(E c) { }
''', [
lint(58, 1),
]);
}
test_deprecatedExtensionType_usedInField() async {
await assertDiagnostics(r'''
@deprecated
extension type E(int i) { }
class C {
E? e;
}
''', [
lint(53, 1),
]);
}
test_deprecatedExtensionType_usedInFunctionParam() async {
await assertDiagnostics(r'''
@deprecated
extension type E(int i) { }
void f(E e) { }
''', [
lint(48, 1),
]);
}
test_deprecatedField_usedAsGetter() async {
await assertDiagnostics(r'''
class A {