Handle metadata annotations in parameter lists with trailing commas.

Fix #520.

R=nweiz@google.com

Review URL: https://codereview.chromium.org//2298993002 .
diff --git a/CHANGELOG.md b/CHANGELOG.md
index df88585..da338c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
 # 0.2.10
 
+* Handle metadata annotations before parameters with trailing commas (#520). 
 * Always split enum declarations if they end in a trailing comma (#529). 
 
 # 0.2.9
diff --git a/lib/src/source_visitor.dart b/lib/src/source_visitor.dart
index 5f6e064..73f10ab 100644
--- a/lib/src/source_visitor.dart
+++ b/lib/src/source_visitor.dart
@@ -2043,6 +2043,8 @@
     // Can't have a trailing comma if there are no parameters.
     assert(parameters.parameters.isNotEmpty);
 
+    _metadataRules.add(new MetadataRule());
+
     // Always split the parameters.
     builder.startRule(new Rule.hard());
 
@@ -2067,7 +2069,6 @@
     builder = builder.startBlock(null);
 
     for (var parameter in parameters.parameters) {
-      builder.nestExpression();
       visit(parameter);
 
       // The comma after the parameter.
@@ -2083,7 +2084,6 @@
         lastRequired = null;
       }
 
-      builder.unnest();
       newline();
     }
 
@@ -2094,6 +2094,8 @@
     builder = builder.endBlock(null, forceSplit: true);
     builder.endRule();
 
+    _metadataRules.removeLast();
+
     // Now write the delimiter itself.
     _writeText(firstDelimiter.lexeme, firstDelimiter.offset);
     if (firstDelimiter != parameters.rightParenthesis) {
diff --git a/test/regression/0500/0520.unit b/test/regression/0500/0520.unit
new file mode 100644
index 0000000..a7c2817
--- /dev/null
+++ b/test/regression/0500/0520.unit
@@ -0,0 +1,18 @@
+>>>
+import 'package:meta/meta.dart';
+
+class Foo {
+  final int bar;
+  Foo({
+    @required this.bar,
+  });
+}
+<<<
+import 'package:meta/meta.dart';
+
+class Foo {
+  final int bar;
+  Foo({
+    @required this.bar,
+  });
+}
\ No newline at end of file
diff --git a/test/whitespace/metadata.unit b/test/whitespace/metadata.unit
index 0c73076..08a3966 100644
--- a/test/whitespace/metadata.unit
+++ b/test/whitespace/metadata.unit
@@ -209,8 +209,26 @@
 positional([@foo bar]) {}
 named({@foo bar}) {}
 >>> split between metadata and parameter indents
-function(@VeryLongMetadataAnnotation longParameter) {}
+function(@Annotation @VeryLongMetadataAnnotation longParameter) {}
 <<<
 function(
+    @Annotation
     @VeryLongMetadataAnnotation
-        longParameter) {}
\ No newline at end of file
+        longParameter) {}
+>>> unsplit with trailing commas
+function(@Annotation longParameter,@Annotation @Other longParameter2,) {}
+<<<
+function(
+  @Annotation longParameter,
+  @Annotation @Other longParameter2,
+) {}
+>>> split with trailing commas
+function(@Annotation longParameter,@Annotation @Other @Third longParameter2,) {}
+<<<
+function(
+  @Annotation longParameter,
+  @Annotation
+  @Other
+  @Third
+      longParameter2,
+) {}
\ No newline at end of file