| Index: lib/src/call_chain_visitor.dart | 
| diff --git a/lib/src/call_chain_visitor.dart b/lib/src/call_chain_visitor.dart | 
| index 29c04fb28ea4216473b8f780289ee99cc9fcc620..e1fec05eb675af1069817456b3920b1372b864a3 100644 | 
| --- a/lib/src/call_chain_visitor.dart | 
| +++ b/lib/src/call_chain_visitor.dart | 
| @@ -317,7 +317,7 @@ class CallChainVisitor { | 
|  | 
| // If the expression ends in an argument list, base the splitting on the | 
| // last argument. | 
| -    var argumentList; | 
| +    ArgumentList argumentList; | 
| if (expression is MethodInvocation) { | 
| argumentList = expression.argumentList; | 
| } else if (expression is InstanceCreationExpression) { | 
| @@ -331,7 +331,9 @@ class CallChainVisitor { | 
| if (argumentList.arguments.isEmpty) return true; | 
|  | 
| var argument = argumentList.arguments.last; | 
| -    if (argument is NamedExpression) argument = argument.expression; | 
| +    if (argument is NamedExpression) { | 
| +      argument = (argument as NamedExpression).expression; | 
| +    } | 
|  | 
| // TODO(rnystrom): This logic is similar (but not identical) to | 
| // ArgumentListVisitor.hasBlockArguments. They overlap conceptually and | 
| @@ -399,7 +401,10 @@ class CallChainVisitor { | 
| _endSpan(); | 
| } | 
|  | 
| -    _visitor.visit(invocation.argumentList); | 
| +    _visitor.builder.nestExpression(); | 
| +    _visitor.visit(invocation.typeArguments); | 
| +    _visitor.visitArgumentList(invocation.argumentList, nestExpression: false); | 
| +    _visitor.builder.unnest(); | 
| } | 
|  | 
| void _writeBlockCall(MethodInvocation invocation) { | 
|  |