Skip to content

Commit 444f8eb

Browse files
srawlinsCommit Queue
authored andcommitted
linter: Move 'overriddenMember' off of InheritanceManager3
This was an extension method on InheritanceManager3. But that class may be disappearing in favor of methods on InterfaceElement. So this change keeps the method as an extension method, but takes InheritanceManager3 out of the picture. Change-Id: I79147f7c39e0e7d94f0e65231e36a2baf2f54362 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/428162 Commit-Queue: Samuel Rawlins <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 27e819f commit 444f8eb

File tree

5 files changed

+30
-43
lines changed

5 files changed

+30
-43
lines changed

pkg/linter/lib/src/extensions.dart

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,27 @@ extension ElementExtension on Element? {
352352
self.name3 == 'print' &&
353353
self.firstFragment.libraryFragment.element.isDartCore;
354354
}
355+
356+
/// Returns the class member that is overridden by `this`, if there is one,
357+
/// as defined by [InterfaceElement.getInheritedMember].
358+
ExecutableElement? get overriddenMember {
359+
var member = switch (this) {
360+
FieldElement(:var getter2) => getter2,
361+
MethodElement method => method,
362+
PropertyAccessorElement accessor => accessor,
363+
_ => null,
364+
};
365+
366+
if (member == null) return null;
367+
368+
var interfaceElement = member.enclosingElement2;
369+
if (interfaceElement is! InterfaceElement) return null;
370+
371+
var name = Name.forElement(member);
372+
if (name == null) return null;
373+
374+
return interfaceElement.getInheritedMember(name);
375+
}
355376
}
356377

357378
extension ExpressionExtension on Expression {
@@ -514,29 +535,6 @@ extension FunctionBodyExtension on FunctionBody? {
514535
}
515536
}
516537

517-
extension InhertanceManager3Extension on InheritanceManager3 {
518-
/// Returns the class member that is overridden by [member], if there is one,
519-
/// as defined by [getInherited].
520-
ExecutableElement? overriddenMember(Element? member) {
521-
var executable = switch (member) {
522-
FieldElement() => member.getter2,
523-
MethodElement() => member,
524-
PropertyAccessorElement() => member,
525-
_ => null,
526-
};
527-
528-
if (executable == null) return null;
529-
530-
var interfaceElement = executable.enclosingElement2;
531-
if (interfaceElement is! InterfaceElement) return null;
532-
533-
var nameObj = Name.forElement(executable);
534-
if (nameObj == null) return null;
535-
536-
return getInherited3(interfaceElement.thisType, nameObj);
537-
}
538-
}
539-
540538
extension InstanceElementExtension on InstanceElement {
541539
bool get isReflectiveTest =>
542540
this is ClassElement &&

pkg/linter/lib/src/rules/annotate_overrides.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class _Visitor extends SimpleAstVisitor<void> {
4040
if (element == null) return;
4141
if (element case Annotatable a when a.metadata2.hasOverride) return;
4242

43-
var member = context.inheritanceManager.overriddenMember(element);
43+
var member = element.overriddenMember;
4444
if (member != null) {
4545
rule.reportAtToken(target, arguments: [member.name3!]);
4646
}

pkg/linter/lib/src/rules/prefer_void_to_null.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ class _Visitor extends SimpleAstVisitor<void> {
4444
// Make sure we're checking a return type.
4545
if (parent.returnType?.offset != node.offset) return false;
4646

47-
var member = context.inheritanceManager.overriddenMember(
48-
parent.declaredFragment?.element,
49-
);
47+
var member = parent.declaredFragment?.element.overriddenMember;
5048
if (member == null) return false;
5149

5250
var returnType = member.returnType;

pkg/linter/lib/src/rules/public_member_api_docs.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,7 @@ class _Visitor extends SimpleAstVisitor<void> {
110110

111111
/// Whether [node] overrides some other member.
112112
bool isOverridingMember(Declaration node) =>
113-
context.inheritanceManager.overriddenMember(
114-
node.declaredFragment?.element,
115-
) !=
116-
null;
113+
node.declaredFragment?.element.overriddenMember != null;
117114

118115
@override
119116
void visitClassDeclaration(ClassDeclaration node) {

pkg/linter/lib/src/rules/strict_top_level_inference.dart

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,19 +103,17 @@ class _Visitor extends SimpleAstVisitor<void> {
103103

104104
if (node.variables.length == 1) {
105105
var variable = node.variables.single;
106-
var overriddenMember = context.inheritanceManager.overriddenMember(
107-
variable.declaredFragment?.element,
108-
);
106+
var overriddenMember =
107+
variable.declaredFragment?.element.overriddenMember;
109108
if (overriddenMember == null) {
110109
_report(variable.name, keyword: node.keyword);
111110
}
112111
} else {
113112
// Handle the multiple-variable case separately so that we can instead
114113
// report `LinterLintCode.strict_top_level_inference_split_to_types`.
115114
for (var variable in variablesMissingAnInitializer) {
116-
var overriddenMember = context.inheritanceManager.overriddenMember(
117-
variable.declaredFragment?.element,
118-
);
115+
var overriddenMember =
116+
variable.declaredFragment?.element.overriddenMember;
119117
if (overriddenMember == null) {
120118
rule.reportAtToken(
121119
variable.name,
@@ -208,9 +206,7 @@ class _Visitor extends SimpleAstVisitor<void> {
208206
_checkFormalParameters(parameters.parameters);
209207
}
210208
} else {
211-
var overriddenMember = context.inheritanceManager.overriddenMember(
212-
node.declaredFragment?.element,
213-
);
209+
var overriddenMember = node.declaredFragment?.element.overriddenMember;
214210
if (overriddenMember == null &&
215211
node.returnType == null &&
216212
(!container.isReflectiveTest ||
@@ -246,9 +242,7 @@ class _Visitor extends SimpleAstVisitor<void> {
246242
if (node.isStatic) return false;
247243
if (container is ExtensionElement) return false;
248244
if (container is ExtensionTypeElement) return false;
249-
var overriddenMember = context.inheritanceManager.overriddenMember(
250-
node.declaredFragment?.element,
251-
);
245+
var overriddenMember = node.declaredFragment?.element.overriddenMember;
252246
return overriddenMember != null;
253247
}
254248

0 commit comments

Comments
 (0)