diff --git a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart index e788ced2bbe..5917ebc7daa 100644 --- a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart +++ b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart @@ -204,9 +204,7 @@ class PostfixExpressionResolver { operand.accept(_resolver); operand = node.operand; - var operandType = getReadType( - operand, - ); + var operandType = getReadType(operand); var type = _typeSystem.promoteToNonNull(operandType); _inferenceHelper.recordStaticType(node, type); diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart index d46db5f2273..e1a65018914 100644 --- a/pkg/analyzer/lib/src/task/strong/checker.dart +++ b/pkg/analyzer/lib/src/task/strong/checker.dart @@ -37,10 +37,14 @@ DartType getExpressionType( DartType getReadType(Expression expression) { if (expression is IndexExpression) { - var staticElement = expression.auxiliaryElements?.staticElement; - return staticElement == null - ? DynamicTypeImpl.instance - : staticElement.returnType; + var aux = expression.auxiliaryElements; + if (aux != null) { + var staticElement = aux.staticElement; + return staticElement == null + ? DynamicTypeImpl.instance + : staticElement.returnType; + } + return expression.staticType; } { Element setter; diff --git a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart index b7faca03619..e80dec78add 100644 --- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart @@ -159,6 +159,31 @@ main(Function f2) { '''); } + test_nullCheck_indexExpression() async { + await assertNoErrorsInCode(r''' +main(Map a) { + int v = a['foo']!; + v; +} +'''); + + assertIndexExpression( + findNode.index('a['), + readElement: elementMatcher( + mapElement.getMethod('[]'), + substitution: {'K': 'String', 'V': 'int'}, + ), + writeElement: null, + type: 'int?', + ); + + assertPostfixExpression( + findNode.postfix(']!'), + element: null, + type: 'int', + ); + } + test_nullCheck_null() async { await assertNoErrorsInCode(''' main(Null x) {