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