Skip to content

Commit d74ead2

Browse files
pqCommit Queue
authored and
Commit Queue
committed
[element model] migrate extensions (final)
Bug: #59548 Change-Id: I06ea96988409f69bdcdf67fd9a40278a64c170af Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399500 Commit-Queue: Phil Quitslund <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 09d02b9 commit d74ead2

File tree

4 files changed

+29
-55
lines changed

4 files changed

+29
-55
lines changed
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
lib/src/extensions.dart

pkg/linter/lib/src/extensions.dart

Lines changed: 24 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@
55
import 'package:analyzer/dart/analysis/features.dart';
66
import 'package:analyzer/dart/ast/token.dart';
77
import 'package:analyzer/dart/constant/value.dart';
8-
import 'package:analyzer/dart/element/element.dart';
98
import 'package:analyzer/dart/element/element2.dart';
109
import 'package:analyzer/dart/element/type.dart';
1110
import 'package:analyzer/file_system/physical_file_system.dart';
1211
import 'package:analyzer/src/dart/ast/ast.dart'; // ignore: implementation_imports
13-
import 'package:analyzer/src/dart/element/member.dart'; // ignore: implementation_imports
1412
import 'package:analyzer/src/dart/element/type.dart' // ignore: implementation_imports
1513
show
1614
InvalidTypeImpl;
@@ -236,12 +234,6 @@ extension ClassElement2Extension on ClassElement2 {
236234
bool isEnumLikeClass() => asEnumLikeClass() != null;
237235
}
238236

239-
// TODO(pq): remove when internal migration is complete.
240-
extension ClassElementExtension on ClassElement {
241-
/// Get all constructors, including merged augmentations.
242-
List<ConstructorElement> get allConstructors => augmented.constructors;
243-
}
244-
245237
extension ClassMemberListExtension on List<ClassMember> {
246238
MethodDeclaration? getMethod(String name) => whereType<MethodDeclaration>()
247239
.firstWhereOrNull((node) => node.name.lexeme == name);
@@ -317,28 +309,6 @@ extension DartTypeExtension on DartType? {
317309
_extendsClass(type.superclass, seenElements, className, library));
318310
}
319311

320-
extension ElementExtension on Element {
321-
Element get canonicalElement {
322-
var self = this;
323-
if (self is PropertyAccessorElement) {
324-
var variable = self.variable2;
325-
if (variable is FieldMember) {
326-
// A field element defined in a parameterized type where the values of
327-
// the type parameters are known.
328-
//
329-
// This concept should be invisible when comparing FieldElements, but a
330-
// bug in the analyzer causes FieldElements to not evaluate as
331-
// equivalent to equivalent FieldMembers. See
332-
// https://github.com/dart-lang/sdk/issues/35343.
333-
return variable.declaration;
334-
} else if (variable != null) {
335-
return variable;
336-
}
337-
}
338-
return self;
339-
}
340-
}
341-
342312
extension ElementExtension2 on Element2? {
343313
Element2? get canonicalElement2 => switch (this) {
344314
PropertyAccessorElement2(:var variable3?) => variable3,
@@ -569,42 +539,46 @@ extension LinterContextExtension on LinterContext {
569539
}
570540

571541
extension MethodDeclarationExtension on MethodDeclaration {
572-
bool get hasInheritedMethod => lookUpInheritedMethod() != null;
573-
574542
/// Returns whether this method is an override of a method in any supertype.
575543
bool get isOverride {
576-
var name = declaredElement?.name;
577-
if (name == null) {
578-
return false;
579-
}
580-
var parentElement = declaredElement?.enclosingElement3;
581-
if (parentElement is! InterfaceElement) {
582-
return false;
583-
}
584-
var parentLibrary = parentElement.library;
544+
var element = declaredFragment?.element;
545+
546+
var name = element?.name3;
547+
if (name == null) return false;
548+
549+
var parentElement = element?.enclosingElement2;
550+
if (parentElement is! InterfaceElement2) return false;
551+
552+
var parentLibrary = parentElement.library2;
585553

586554
if (isGetter) {
587555
// Search supertypes for a getter of the same name.
588556
return parentElement.allSupertypes
589-
.any((t) => t.lookUpGetter2(name, parentLibrary) != null);
557+
.any((t) => t.lookUpGetter3(name, parentLibrary) != null);
590558
} else if (isSetter) {
591559
// Search supertypes for a setter of the same name.
592560
return parentElement.allSupertypes
593-
.any((t) => t.lookUpSetter2(name, parentLibrary) != null);
561+
.any((t) => t.lookUpSetter3(name, parentLibrary) != null);
594562
} else {
595563
// Search supertypes for a method of the same name.
596564
return parentElement.allSupertypes
597-
.any((t) => t.lookUpMethod2(name, parentLibrary) != null);
565+
.any((t) => t.lookUpMethod3(name, parentLibrary) != null);
598566
}
599567
}
600568

601-
MethodElement? lookUpInheritedMethod() {
602-
var declaredElement = this.declaredElement;
569+
bool hasInheritedMethod(InheritanceManager3 inheritanceManager) =>
570+
lookUpInheritedMethod(inheritanceManager) != null;
571+
572+
MethodElement2? lookUpInheritedMethod(
573+
InheritanceManager3 inheritanceManager) {
574+
var declaredElement = declaredFragment?.element;
603575
if (declaredElement != null) {
604-
var parent = declaredElement.enclosingElement3;
605-
if (parent is InterfaceElement) {
606-
return parent.lookUpInheritedMethod(
607-
name.lexeme, declaredElement.library);
576+
var parent = declaredElement.enclosingElement2;
577+
if (parent is InterfaceElement2) {
578+
var methodName = Name.forElement(declaredElement);
579+
if (methodName == null) return null;
580+
var inherited = inheritanceManager.getInherited4(parent, methodName);
581+
if (inherited is MethodElement2) return inherited;
608582
}
609583
}
610584
return null;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class _Visitor extends SimpleAstVisitor<void> {
8484
!node.isSetter &&
8585
!declaredElement.isPrivate &&
8686
!node.isOperator &&
87-
!node.hasInheritedMethod &&
87+
!node.hasInheritedMethod(context.inheritanceManager) &&
8888
!_isOverridingMember(declaredElement)) {
8989
checkParams(node.parameters?.parameters);
9090
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,16 @@ class UseToAndAsIfApplicable extends LintRule {
3333
@override
3434
void registerNodeProcessors(
3535
NodeLintRegistry registry, LinterContext context) {
36-
var visitor = _Visitor(this);
36+
var visitor = _Visitor(this, context.inheritanceManager);
3737
registry.addMethodDeclaration(this, visitor);
3838
}
3939
}
4040

4141
class _Visitor extends SimpleAstVisitor<void> {
4242
final LintRule rule;
43+
final InheritanceManager3 inheritanceManager;
4344

44-
_Visitor(this.rule);
45+
_Visitor(this.rule, this.inheritanceManager);
4546

4647
@override
4748
void visitMethodDeclaration(MethodDeclaration node) {
@@ -51,7 +52,7 @@ class _Visitor extends SimpleAstVisitor<void> {
5152
nodeParameters.parameters.isEmpty &&
5253
!_isVoid(node.returnType) &&
5354
!_beginsWithAsOrTo(node.name.lexeme) &&
54-
!node.hasInheritedMethod &&
55+
!node.hasInheritedMethod(inheritanceManager) &&
5556
_checkBody(node.body)) {
5657
rule.reportLintForToken(node.name);
5758
}

0 commit comments

Comments
 (0)