Merge pull request #856 from dart-lang/fix-type

Fix crash on hanging property calls following block arguments.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4a2122e..b0832bf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 1.3.1
+
+* Fix crash in formatting complex method chains (#855).
+
 # 1.3.0
 
 * Add support for formatting extension methods (#830).
diff --git a/bin/format.dart b/bin/format.dart
index 45fd902..771d81b 100644
--- a/bin/format.dart
+++ b/bin/format.dart
@@ -15,7 +15,7 @@
 import 'package:dart_style/src/style_fix.dart';
 
 // Note: The following line of code is modified by tool/grind.dart.
-const version = "1.3.0";
+const version = "1.3.1";
 
 void main(List<String> args) {
   var parser = ArgParser(allowTrailingOptions: true);
diff --git a/lib/src/call_chain_visitor.dart b/lib/src/call_chain_visitor.dart
index ce40e72..3c04c59 100644
--- a/lib/src/call_chain_visitor.dart
+++ b/lib/src/call_chain_visitor.dart
@@ -96,7 +96,7 @@
   /// need to split before its `.` and this accommodates the common pattern of
   /// a trailing `toList()` or `toSet()` after a series of higher-order methods
   /// on an iterable.
-  final _MethodSelector _hangingCall;
+  final _Selector _hangingCall;
 
   /// Whether or not a [Rule] is currently active for the call chain.
   bool _ruleEnabled = false;
@@ -136,7 +136,7 @@
 
     // Separate out the block calls, if there are any.
     List<_MethodSelector> blockCalls;
-    _MethodSelector hangingCall;
+    _Selector hangingCall;
 
     var inBlockCalls = false;
     for (var call in calls) {
diff --git a/pubspec.yaml b/pubspec.yaml
index d210eb6..990ce7e 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
 name: dart_style
 # Note: See tool/grind.dart for how to bump the version.
-version: 1.3.1-dev
+version: 1.3.1
 author: Dart Team <misc@dartlang.org>
 description: >-
   Opinionated, automatic Dart source code formatter.
diff --git a/test/regression/0800/0855.unit b/test/regression/0800/0855.unit
new file mode 100644
index 0000000..992b0e9
--- /dev/null
+++ b/test/regression/0800/0855.unit
@@ -0,0 +1,46 @@
+>>>
+Method _main() => Method((b) => b
+  ..name = 'main'
+  ..modifier = MethodModifier.async
+  ..requiredParameters.add(Parameter((b) => b
+    ..name = 'args'
+    ..type = TypeReference((b) => b
+      ..symbol = 'List'
+      ..types.add(refer('String')))))
+  ..optionalParameters.add(Parameter((b) => b
+    ..name = 'sendPort'
+    ..type = refer('SendPort', 'dart:isolate')))
+  ..body = Block.of([
+    refer('run', 'package:build_runner/build_runner.dart')
+        .call([refer('args'), refer('_builders')])
+        .awaited
+        .assignVar('result')
+        .statement,
+    refer('sendPort')
+        .nullSafeProperty('send')
+        .call([refer('result')]).statement,
+    refer('exitCode', 'dart:io').assign(refer('result')).statement,
+  ]));
+<<<
+Method _main() => Method((b) => b
+  ..name = 'main'
+  ..modifier = MethodModifier.async
+  ..requiredParameters.add(Parameter((b) => b
+    ..name = 'args'
+    ..type = TypeReference((b) => b
+      ..symbol = 'List'
+      ..types.add(refer('String')))))
+  ..optionalParameters.add(Parameter((b) => b
+    ..name = 'sendPort'
+    ..type = refer('SendPort', 'dart:isolate')))
+  ..body = Block.of([
+    refer('run', 'package:build_runner/build_runner.dart')
+        .call([refer('args'), refer('_builders')])
+        .awaited
+        .assignVar('result')
+        .statement,
+    refer('sendPort')
+        .nullSafeProperty('send')
+        .call([refer('result')]).statement,
+    refer('exitCode', 'dart:io').assign(refer('result')).statement,
+  ]));
\ No newline at end of file