Fix some constructor initializer code completion situations

Change-Id: Ibbe079d79889846e34ab98ccdc11ef6fcc788654
Reviewed-on: https://dart-review.googlesource.com/75600
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 48b395c..f8d4a77 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -180,7 +180,6 @@
     expect(suggestions, hasLength(2));
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor() async {
     addTestFile('class A {bool foo; A() : ^;}');
     await getSuggestions();
@@ -200,7 +199,6 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor3() async {
     addTestFile('class A {bool foo; A() : a=7,^;}');
     await getSuggestions();
@@ -230,7 +228,6 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor6() async {
     addTestFile('class A {bool foo; A() : a=7,^ void bar() {}}');
     await getSuggestions();
@@ -538,11 +535,11 @@
         relevance: DART_RELEVANCE_LOCAL_FUNCTION);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_inherited() {
-    newFile('/libA.dart', content: 'class A {m() {}}');
     addTestFile('''
-import ${convertPathForImport('/libA.dart')};
+class A {
+  m() {}
+}
 class B extends A {
   x() {^}
 }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart
index c61a1dc..63bb9aa 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart
@@ -20,7 +20,28 @@
               ParserErrorCode.MISSING_INITIALIZER,
               ParserErrorCode.MISSING_FUNCTION_BODY
             ],
-            'C() {}',
+            'C() : _s_ = _s_ {}',
+            adjustValidUnitBeforeComparison: setSeparator,
+            failing: ['methodNonVoid', 'getter', 'setter'],
+          ),
+          new TestDescriptor(
+            'colon_field',
+            'C() : f',
+            [
+              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER,
+              ParserErrorCode.MISSING_FUNCTION_BODY
+            ],
+            'C() : _s_ = f {}',
+            adjustValidUnitBeforeComparison: setSeparator,
+          ),
+          new TestDescriptor(
+            'colon_field_comma',
+            'C() : f = 0,',
+            [
+              ParserErrorCode.MISSING_INITIALIZER,
+              ParserErrorCode.MISSING_FUNCTION_BODY
+            ],
+            'C() : f = 0, _s_ = _s_ {}',
             adjustValidUnitBeforeComparison: setSeparator,
             failing: ['methodNonVoid', 'getter', 'setter'],
           ),
@@ -28,14 +49,14 @@
             'colon_block',
             'C() : {}',
             [ParserErrorCode.MISSING_INITIALIZER],
-            'C() {}',
+            'C() : _s_ = _s_ {}',
             adjustValidUnitBeforeComparison: setSeparator,
           ),
           new TestDescriptor(
             'colon_semicolon',
             'C() : ;',
             [ParserErrorCode.MISSING_INITIALIZER],
-            'C();',
+            'C() : _s_ = _s_ ;',
             adjustValidUnitBeforeComparison: setSeparator,
           ),
           new TestDescriptor(
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index bb2982e..dd3f1ce 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -2435,9 +2435,13 @@
       }
       // Fall through to recovery
     } else {
-      // Recovery
-      insertSyntheticIdentifier(token, IdentifierContext.fieldInitializer,
+      // Recovery: Insert a synthetic assignment.
+      token = insertSyntheticIdentifier(
+          token, IdentifierContext.fieldInitializer,
           message: fasta.messageExpectedAnInitializer, messageOnToken: token);
+      token = rewriter.insertToken(
+          token, new SyntheticToken(TokenType.EQ, token.offset));
+      token = rewriter.insertSyntheticIdentifier(token);
       return parseInitializerExpressionRest(beforeExpression);
     }
     // Recovery