44
55import 'package:analyzer/dart/ast/ast.dart' ;
66import 'package:analyzer/dart/ast/visitor.dart' ;
7- import 'package:analyzer/dart/element/element.dart' ;
87
98import '../analyzer.dart' ;
109
@@ -62,15 +61,19 @@ class _Visitor extends SimpleAstVisitor {
6261
6362 _Visitor (this .rule, this .context);
6463
65- void check (ArgumentList argumentList, List <ParameterElement > parameters) {
66- if (argumentList.arguments.isEmpty || parameters == null ) {
64+ void check (ArgumentList argumentList) {
65+ final arguments = argumentList.arguments;
66+ if (arguments.isEmpty) {
6767 return ;
6868 }
6969
70- for (var arg in argumentList.arguments) {
70+ for (var i = arguments.length - 1 ; i >= 0 ; -- i) {
71+ var arg = arguments[i];
7172 final param = arg.staticParameterElement;
72- if (param == null || param.hasRequired) {
73+ if (param == null || param.hasRequired || param.isRequiredNamed ) {
7374 continue ;
75+ } else if (param.isRequiredPositional) {
76+ break ;
7477 }
7578 final value = param.constantValue;
7679 if (value != null ) {
@@ -82,25 +85,19 @@ class _Visitor extends SimpleAstVisitor {
8285 rule.reportLint (arg);
8386 }
8487 }
88+ if (param.isOptionalPositional) {
89+ break ;
90+ }
8591 }
8692 }
8793
8894 @override
8995 void visitInstanceCreationExpression (InstanceCreationExpression node) {
90- check (node.argumentList, node.staticElement ? .parameters );
96+ check (node.argumentList);
9197 }
9298
9399 @override
94100 void visitMethodInvocation (MethodInvocation node) {
95- final element = node.staticInvokeType.element;
96- List <ParameterElement > parameters;
97- if (element is MethodElement ) {
98- parameters = element.parameters;
99- }
100- if (element is FunctionElement ) {
101- parameters = element.parameters;
102- }
103-
104- check (node.argumentList, parameters);
101+ check (node.argumentList);
105102 }
106103}
0 commit comments