| Index: pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
 | 
| diff --git a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
 | 
| index 51e088fd184912e17b64f9fad1ed52c7fefbc1cc..9b0802ce14b5697037edd348a24bd57a2a6d6c51 100644
 | 
| --- a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
 | 
| +++ b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
 | 
| @@ -500,19 +500,22 @@ class AstBuilder extends ScopeListener {
 | 
|      push(NullValue.ParameterDefaultValue);
 | 
|    }
 | 
|  
 | 
| -  void endFormalParameter(Token thisKeyword, FormalParameterType kind) {
 | 
| +  void endFormalParameter(
 | 
| +      Token covariantKeyword, Token thisKeyword, FormalParameterType kind) {
 | 
|      debugEvent("FormalParameter");
 | 
|      _ParameterDefaultValue defaultValue = pop();
 | 
|      SimpleIdentifier name = pop();
 | 
|      TypeName type = pop();
 | 
|      Token keyword = _popOptionalSingleModifier();
 | 
|      pop(); // TODO(paulberry): Metadata.
 | 
| -    // TODO(paulberry): handle covariant keyword.
 | 
|  
 | 
|      FormalParameter node;
 | 
|      if (thisKeyword == null) {
 | 
| -      node = ast.simpleFormalParameter(
 | 
| -          null, null, toAnalyzerToken(keyword), type, name);
 | 
| +      node = ast.simpleFormalParameter2(
 | 
| +          covariantKeyword: toAnalyzerToken(covariantKeyword),
 | 
| +          keyword: toAnalyzerToken(keyword),
 | 
| +          type: type,
 | 
| +          identifier: name);
 | 
|      } else {
 | 
|        // TODO(scheglov): Ideally the period token should be passed in.
 | 
|        Token period = identical('.', thisKeyword.next?.stringValue)
 | 
| @@ -520,16 +523,15 @@ class AstBuilder extends ScopeListener {
 | 
|            : null;
 | 
|        TypeParameterList typeParameters; // TODO(scheglov)
 | 
|        FormalParameterList formalParameters; // TODO(scheglov)
 | 
| -      node = ast.fieldFormalParameter(
 | 
| -          null,
 | 
| -          null,
 | 
| -          toAnalyzerToken(keyword),
 | 
| -          type,
 | 
| -          toAnalyzerToken(thisKeyword),
 | 
| -          toAnalyzerToken(period),
 | 
| -          name,
 | 
| -          typeParameters,
 | 
| -          formalParameters);
 | 
| +      node = ast.fieldFormalParameter2(
 | 
| +          covariantKeyword: toAnalyzerToken(covariantKeyword),
 | 
| +          keyword: toAnalyzerToken(keyword),
 | 
| +          type: type,
 | 
| +          thisKeyword: toAnalyzerToken(thisKeyword),
 | 
| +          period: toAnalyzerToken(period),
 | 
| +          identifier: name,
 | 
| +          typeParameters: typeParameters,
 | 
| +          parameters: formalParameters);
 | 
|      }
 | 
|  
 | 
|      if (defaultValue != null) {
 | 
| 
 |