5
5
import 'dart:math' as math;
6
6
7
7
import 'package:analyzer/dart/analysis/features.dart' ;
8
- import 'package:analyzer/dart/ast/ast.dart' ;
9
8
import 'package:analyzer/dart/ast/visitor.dart' ;
10
- import 'package:analyzer/dart/element/element.dart' ;
9
+ import 'package:analyzer/dart/element/element2.dart' ;
10
+ // ignore: implementation_imports
11
+ import 'package:analyzer/src/dart/ast/ast.dart' ;
11
12
12
13
import '../analyzer.dart' ;
13
14
import '../extensions.dart' ;
@@ -29,7 +30,8 @@ class AvoidRenamingMethodParameters extends LintRule {
29
30
NodeLintRegistry registry, LinterContext context) {
30
31
if (! context.isInLibDir) return ;
31
32
32
- var visitor = _Visitor (this , context.libraryElement);
33
+ var visitor =
34
+ _Visitor (this , context.libraryElement2, context.inheritanceManager);
33
35
registry.addMethodDeclaration (this , visitor);
34
36
}
35
37
}
@@ -38,9 +40,11 @@ class _Visitor extends SimpleAstVisitor<void> {
38
40
/// Whether the `wildcard_variables` feature is enabled.
39
41
final bool _wildCardVariablesEnabled;
40
42
43
+ final InheritanceManager3 inheritanceManager;
44
+
41
45
final LintRule rule;
42
46
43
- _Visitor (this .rule, LibraryElement ? library)
47
+ _Visitor (this .rule, LibraryElement2 ? library, this .inheritanceManager )
44
48
: _wildCardVariablesEnabled =
45
49
library? .featureSet.isEnabled (Feature .wildcard_variables) ?? false ;
46
50
@@ -52,50 +56,47 @@ class _Visitor extends SimpleAstVisitor<void> {
52
56
if (node.isStatic) return ;
53
57
if (node.documentationComment != null ) return ;
54
58
55
- var parentNode = node.parent;
56
- if (parentNode is ! Declaration ) {
57
- return ;
58
- }
59
- var parentElement = parentNode.declaredElement;
60
- // Note: there are no override semantics with extension methods.
61
- if (parentElement is ! InterfaceElement ) {
62
- return ;
63
- }
59
+ var nodeParams = node.parameters;
60
+ if (nodeParams == null ) return ;
64
61
65
- var classElement = parentElement ;
62
+ late List < FormalParameterElement > parentParameters ;
66
63
67
- if (classElement.isPrivate) return ;
64
+ var previousFragment = node.declaredFragment? .previousFragment;
65
+ if (previousFragment == null ) {
66
+ // If it's the first fragment, check for an inherited member.
67
+ var parentNode = node.parent;
68
+ if (parentNode is ! Declaration ) return ;
68
69
69
- var parentMethod = classElement.lookUpInheritedMethod (
70
- node.name.lexeme, classElement.library);
70
+ var parentElement = parentNode.declaredFragment? .element;
71
71
72
- // If it's not an inherited method, check for an augmentation.
73
- if (parentMethod == null && node.isAugmentation) {
74
- var element = node.declaredElement;
75
- // Note that we only require an augmentation to conform to the previous
76
- // declaration/augmentation in the chain.
77
- var target = element? .augmentationTarget;
78
- if (target is MethodElement ) {
79
- parentMethod = target;
80
- }
81
- }
72
+ // Note: there are no override semantics with extension methods.
73
+ if (parentElement is ! InterfaceElement2 ) return ;
74
+ if (parentElement.isPrivate) return ;
82
75
83
- if (parentMethod == null ) return ;
76
+ var parentMethod = inheritanceManager.getMember4 (
77
+ parentElement, Name (parentElement.library2.uri, node.name.lexeme),
78
+ forSuper: true );
79
+ if (parentMethod == null ) return ;
84
80
85
- var nodeParams = node.parameters;
86
- if (nodeParams == null ) {
87
- return ;
81
+ parentParameters = parentMethod.formalParameters.positional;
82
+ } else {
83
+ if (! node.isAugmentation) return ;
84
+
85
+ parentParameters =
86
+ previousFragment.formalParameters.map ((p) => p.element).positional;
88
87
}
89
88
90
89
var parameters = nodeParams.parameters.where ((p) => ! p.isNamed).toList ();
91
- var parentParameters =
92
- parentMethod.parameters.where ((p) => ! p.isNamed).toList ();
90
+
93
91
var count = math.min (parameters.length, parentParameters.length);
94
92
for (var i = 0 ; i < count; i++ ) {
95
93
if (parentParameters.length <= i) break ;
96
94
97
- var parentParameterName = parentParameters[i].name;
98
- if (isWildcardIdentifier (parentParameterName)) continue ;
95
+ var parentParameterName = parentParameters[i].name3;
96
+ if (parentParameterName == null ||
97
+ isWildcardIdentifier (parentParameterName)) {
98
+ continue ;
99
+ }
99
100
100
101
var parameterName = parameters[i].name;
101
102
if (parameterName == null ) continue ;
@@ -110,3 +111,8 @@ class _Visitor extends SimpleAstVisitor<void> {
110
111
}
111
112
}
112
113
}
114
+
115
+ extension on Iterable <FormalParameterElement > {
116
+ List <FormalParameterElement > get positional =>
117
+ where ((p) => ! p.isNamed).toList ();
118
+ }
0 commit comments