Allow splitting in redirecting constructors.

Fix #475.

R=kevmoo@google.com

Review URL: https://codereview.chromium.org//1498283002 .
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b720884..28a7dd8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,6 +22,7 @@
 * Allow splitting before `get` and `set` (#462).
 * Add `--indent` to specify leading indent (#464).
 * Ensure collection elements line split separately (#474).
+* Allow redirecting constructors to wrap (#475).
 * Handle index expressions in the middle of call chains.
 * Optimize splitting lines with many rules.
 
diff --git a/lib/src/source_visitor.dart b/lib/src/source_visitor.dart
index 1cdd0be..0da60dd 100644
--- a/lib/src/source_visitor.dart
+++ b/lib/src/source_visitor.dart
@@ -538,10 +538,15 @@
     // ":" if the parameters and initialization list don't all fit on one line.
     builder.startRule();
 
+    // If the redirecting constructor happens to wrap, we want to make sure
+    // the parameter list gets more deeply indented.
+    if (node.redirectedConstructor != null) builder.nestExpression();
+
     _visitBody(node.parameters, node.body, () {
       // Check for redirects or initializer lists.
       if (node.redirectedConstructor != null) {
         _visitConstructorRedirects(node);
+        builder.unnest();
       } else if (node.initializers.isNotEmpty) {
         _visitConstructorInitializers(node);
       }
@@ -549,7 +554,8 @@
   }
 
   void _visitConstructorRedirects(ConstructorDeclaration node) {
-    token(node.separator /* = */, before: space, after: space);
+    token(node.separator /* = */, before: space);
+    soloSplit();
     visitCommaSeparatedNodes(node.initializers);
     visit(node.redirectedConstructor);
   }
diff --git a/test/regression/0400/0475.unit b/test/regression/0400/0475.unit
new file mode 100644
index 0000000..0240a3d
--- /dev/null
+++ b/test/regression/0400/0475.unit
@@ -0,0 +1,12 @@
+>>>
+class ListResultDescriptor {
+  factory ListResultDescriptor(String name, List<E> defaultValue,
+      {ResultCachingPolicy<
+          List<E>> cachingPolicy}) = ListResultDescriptorImpl<E>;
+}
+<<<
+class ListResultDescriptor {
+  factory ListResultDescriptor(String name, List<E> defaultValue,
+          {ResultCachingPolicy<List<E>> cachingPolicy}) =
+      ListResultDescriptorImpl<E>;
+}
\ No newline at end of file