@@ -321,6 +321,13 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
321321 _checkForDeadNullCoalesce (node.readType, node.rightHandSide);
322322 }
323323 _checkForAssignmentToFinal (lhs);
324+ if (lhs is IndexExpression ) {
325+ _checkIndexExpressionIndex (
326+ lhs.index,
327+ readElement: node.readElement,
328+ writeElement: node.writeElement,
329+ );
330+ }
324331 super .visitAssignmentExpression (node);
325332 }
326333
@@ -816,28 +823,19 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
816823
817824 @override
818825 void visitIndexExpression (IndexExpression node) {
819- void checkIndexExpression (MethodElement method) {
820- if (method != null ) {
821- var parameters = method.parameters;
822- if (parameters.isNotEmpty) {
823- _checkForArgumentTypeNotAssignableForArgument2 (
824- argument: node.index,
825- parameter: parameters[0 ],
826- promoteParameterToNullable: false ,
827- );
828- }
829- }
830- }
831-
832- checkIndexExpression (node.staticElement);
833- checkIndexExpression (node.auxiliaryElements? .staticElement);
826+ _checkIndexExpressionIndex (
827+ node.index,
828+ readElement: node.staticElement,
829+ writeElement: null ,
830+ );
834831
835832 if (node.isNullAware) {
836833 _checkForUnnecessaryNullAware (
837834 node.realTarget,
838835 node.question ?? node.period ?? node.leftBracket,
839836 );
840837 }
838+
841839 super .visitIndexExpression (node);
842840 }
843841
@@ -989,12 +987,20 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
989987
990988 @override
991989 void visitPostfixExpression (PostfixExpression node) {
990+ var operand = node.operand;
992991 if (node.operator .type == TokenType .BANG ) {
993992 _checkForUseOfVoidResult (node);
994- _checkForUnnecessaryNullAware (node. operand, node.operator );
993+ _checkForUnnecessaryNullAware (operand, node.operator );
995994 } else {
996- _checkForAssignmentToFinal (node.operand);
997- _checkForIntNotAssignable (node.operand);
995+ _checkForAssignmentToFinal (operand);
996+ _checkForIntNotAssignable (operand);
997+ }
998+ if (operand is IndexExpression ) {
999+ _checkIndexExpressionIndex (
1000+ operand.index,
1001+ readElement: node.readElement,
1002+ writeElement: node.writeElement,
1003+ );
9981004 }
9991005 super .visitPostfixExpression (node);
10001006 }
@@ -1022,6 +1028,13 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
10221028 _checkForUseOfVoidResult (operand);
10231029 _checkForIntNotAssignable (operand);
10241030 }
1031+ if (operand is IndexExpression ) {
1032+ _checkIndexExpressionIndex (
1033+ operand.index,
1034+ readElement: node.readElement,
1035+ writeElement: node.writeElement,
1036+ );
1037+ }
10251038 super .visitPrefixExpression (node);
10261039 }
10271040
@@ -4809,6 +4822,34 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
48094822 }
48104823 }
48114824
4825+ void _checkIndexExpressionIndex (
4826+ Expression index, {
4827+ @required ExecutableElement readElement,
4828+ @required ExecutableElement writeElement,
4829+ }) {
4830+ if (readElement is MethodElement ) {
4831+ var parameters = readElement.parameters;
4832+ if (parameters.isNotEmpty) {
4833+ _checkForArgumentTypeNotAssignableForArgument2 (
4834+ argument: index,
4835+ parameter: parameters[0 ],
4836+ promoteParameterToNullable: false ,
4837+ );
4838+ }
4839+ }
4840+
4841+ if (writeElement is MethodElement ) {
4842+ var parameters = writeElement.parameters;
4843+ if (parameters.isNotEmpty) {
4844+ _checkForArgumentTypeNotAssignableForArgument2 (
4845+ argument: index,
4846+ parameter: parameters[0 ],
4847+ promoteParameterToNullable: false ,
4848+ );
4849+ }
4850+ }
4851+ }
4852+
48124853 void _checkMixinInference (
48134854 NamedCompilationUnitMember node, WithClause withClause) {
48144855 if (withClause == null ) {
0 commit comments