Fix following comma detection in code completion (#29503).

BUG=
R=brianwilkerson@google.com

Fixes: https://github.com/dart-lang/sdk/issues/29503
Review-Url: https://codereview.chromium.org/2849703002 .
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
index 01775a3..59fc1c0 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
@@ -330,10 +330,17 @@
   }
 
   bool _isFollowedByAComma(DartCompletionRequest request) {
+    // new A(^); NO
+    // new A(one: 1, ^); NO
+    // new A(^ , one: 1); YES
+    // new A(^), ... NO
+
+    var containingNode = request.target.containingNode;
     var entity = request.target.entity;
     Token token =
         entity is AstNode ? entity.endToken : entity is Token ? entity : null;
-    return token?.next?.type == TokenType.COMMA;
+    return (token != containingNode?.endToken) &&
+        token?.next?.type == TokenType.COMMA;
   }
 
   bool _isInFlutterCreation(DartCompletionRequest request) {
diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index 1fd8852..31f5725 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -892,6 +892,31 @@
         selectionOffset: 10);
   }
 
+  test_ArgumentList_Flutter_InstanceCreationExpression_01() async {
+    configureFlutterPkg({
+      'src/widgets/framework.dart': flutter_framework_code,
+    });
+
+    addTestSource('''
+import 'package:flutter/src/widgets/framework.dart';
+
+  build() => new Scaffold(
+        appBar: new AppBar(
+          ^
+        ),
+  );
+''');
+
+    // Don't generate children boilerplate.
+    await computeSuggestions();
+
+    assertSuggest('color: ,',
+        csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
+        relevance: DART_RELEVANCE_NAMED_PARAMETER,
+        defaultArgListString: null, // No default values.
+        selectionOffset: 7);
+  }
+
   test_ArgumentList_Flutter_InstanceCreationExpression_1() async {
     configureFlutterPkg({
       'src/widgets/framework.dart': flutter_framework_code,
diff --git a/pkg/analysis_server/test/services/correction/flutter_util.dart b/pkg/analysis_server/test/services/correction/flutter_util.dart
index a15dd90..100f1b0 100644
--- a/pkg/analysis_server/test/services/correction/flutter_util.dart
+++ b/pkg/analysis_server/test/services/correction/flutter_util.dart
@@ -10,6 +10,7 @@
 class Widget {}
 class RenderObjectWidget extends Widget {}
 class StatelessWidget extends Widget {}
+abstract class StatefulWidget extends Widget { }
 class SingleChildRenderObjectWidget extends RenderObjectWidget {}
 class Transform extends SingleChildRenderObjectWidget {}
 class ClipRect extends SingleChildRenderObjectWidget { ClipRect.rect(){} }
@@ -19,5 +20,7 @@
 class DefaultTextStyle extends StatelessWidget { DefaultTextStyle({child: null}){}}
 class Row extends Widget { Row({List<Widget> children: null, key: null}){}}
 class GestureDetector extends SingleChildRenderObjectWidget { GestureDetector({child: null, onTap: null}){}}
-class Scaffold extends Widget { Scaffold({body: null}){}}
+class AppBar extends StatefulWidget implements PreferredSizeWidget { AppBar(title: null, color: null, key: null) }
+class Scaffold extends Widget { Scaffold({body: null, PreferredSizeWidget appBar: null}){}}
+class PreferredSizeWidget implements Widget {}
 ''';