| Index: pkg/analyzer/lib/dart/ast/ast.dart
 | 
| diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
 | 
| index 78b3c0668b5217a2130b381489b26bad25f2810d..c36925f0d17607544d5d16390d7632e0c63a3666 100644
 | 
| --- a/pkg/analyzer/lib/dart/ast/ast.dart
 | 
| +++ b/pkg/analyzer/lib/dart/ast/ast.dart
 | 
| @@ -40,6 +40,7 @@ import 'package:analyzer/dart/ast/syntactic_entity.dart';
 | 
|  import 'package:analyzer/dart/ast/token.dart';
 | 
|  import 'package:analyzer/dart/element/element.dart';
 | 
|  import 'package:analyzer/dart/element/type.dart';
 | 
| +import 'package:analyzer/src/dart/ast/ast.dart';
 | 
|  import 'package:analyzer/src/dart/element/element.dart' show AuxiliaryElements;
 | 
|  import 'package:analyzer/src/generated/java_engine.dart';
 | 
|  import 'package:analyzer/src/generated/source.dart' show LineInfo, Source;
 | 
| @@ -60,6 +61,12 @@ import 'package:analyzer/src/generated/utilities_dart.dart';
 | 
|   */
 | 
|  abstract class AdjacentStrings extends StringLiteral {
 | 
|    /**
 | 
| +   * Initialize a newly created list of adjacent strings. To be syntactically
 | 
| +   * valid, the list of [strings] must contain at least two elements.
 | 
| +   */
 | 
| +  factory AdjacentStrings(List<StringLiteral> strings) = AdjacentStringsImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the strings that are implicitly concatenated.
 | 
|     */
 | 
|    NodeList<StringLiteral> get strings;
 | 
| @@ -114,6 +121,16 @@ abstract class AnnotatedNode extends AstNode {
 | 
|   */
 | 
|  abstract class Annotation extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created annotation. Both the [period] and the
 | 
| +   * [constructorName] can be `null` if the annotation is not referencing a
 | 
| +   * named constructor. The [arguments] can be `null` if the annotation is not
 | 
| +   * referencing a constructor.
 | 
| +   */
 | 
| +  factory Annotation(Token atSign, Identifier name, Token period,
 | 
| +          SimpleIdentifier constructorName, ArgumentList arguments) =>
 | 
| +      new AnnotationImpl(atSign, name, period, constructorName, arguments);
 | 
| +
 | 
| +  /**
 | 
|     * Return the arguments to the constructor being invoked, or `null` if this
 | 
|     * annotation is not the invocation of a constructor.
 | 
|     */
 | 
| @@ -207,6 +224,13 @@ abstract class Annotation extends AstNode {
 | 
|   */
 | 
|  abstract class ArgumentList extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created list of arguments. The list of [arguments] can
 | 
| +   * be `null` if there are no arguments.
 | 
| +   */
 | 
| +  factory ArgumentList(Token leftParenthesis, List<Expression> arguments,
 | 
| +      Token rightParenthesis) = ArgumentListImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the expressions producing the values of the arguments. Although the
 | 
|     * language requires that positional arguments appear before named arguments,
 | 
|     * this class allows them to be intermixed.
 | 
| @@ -260,6 +284,13 @@ abstract class ArgumentList extends AstNode {
 | 
|   */
 | 
|  abstract class AsExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created as expression.
 | 
| +   */
 | 
| +  factory AsExpression(
 | 
| +          Expression expression, Token asOperator, TypeName type) =>
 | 
| +      new AsExpressionImpl(expression, asOperator, type);
 | 
| +
 | 
| +  /**
 | 
|     * Return the 'as' operator.
 | 
|     */
 | 
|    Token get asOperator;
 | 
| @@ -299,7 +330,21 @@ abstract class AsExpression extends Expression {
 | 
|   *
 | 
|   * Clients may not extend, implement or mix-in this class.
 | 
|   */
 | 
| -abstract class AssertInitializer implements Assertion, ConstructorInitializer {}
 | 
| +abstract class AssertInitializer implements Assertion, ConstructorInitializer {
 | 
| +  /**
 | 
| +   * Initialize a newly created assert initializer. The [comma] and [message]
 | 
| +   * can be `null` if there is no message.
 | 
| +   */
 | 
| +  factory AssertInitializer(
 | 
| +          Token assertKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          Expression condition,
 | 
| +          Token comma,
 | 
| +          Expression message,
 | 
| +          Token rightParenthesis) =>
 | 
| +      new AssertInitializerImpl(assertKeyword, leftParenthesis, condition,
 | 
| +          comma, message, rightParenthesis);
 | 
| +}
 | 
|  
 | 
|  /**
 | 
|   * An assertion, either in a block or in the initializer list of a constructor.
 | 
| @@ -383,6 +428,21 @@ abstract class Assertion implements AstNode {
 | 
|   */
 | 
|  abstract class AssertStatement implements Assertion, Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created assert statement. The [comma] and [message] can
 | 
| +   * be `null` if there is no message.
 | 
| +   */
 | 
| +  factory AssertStatement(
 | 
| +          Token assertKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          Expression condition,
 | 
| +          Token comma,
 | 
| +          Expression message,
 | 
| +          Token rightParenthesis,
 | 
| +          Token semicolon) =>
 | 
| +      new AssertStatementImpl(assertKeyword, leftParenthesis, condition, comma,
 | 
| +          message, rightParenthesis, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the semicolon terminating the statement.
 | 
|     */
 | 
|    Token get semicolon;
 | 
| @@ -404,6 +464,13 @@ abstract class AssertStatement implements Assertion, Statement {
 | 
|  abstract class AssignmentExpression extends Expression
 | 
|      implements MethodReferenceExpression {
 | 
|    /**
 | 
| +   * Initialize a newly created assignment expression.
 | 
| +   */
 | 
| +  factory AssignmentExpression(
 | 
| +          Expression leftHandSide, Token operator, Expression rightHandSide) =>
 | 
| +      new AssignmentExpressionImpl(leftHandSide, operator, rightHandSide);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression used to compute the left hand side.
 | 
|     */
 | 
|    Expression get leftHandSide;
 | 
| @@ -789,6 +856,12 @@ abstract class AstVisitor<R> {
 | 
|   */
 | 
|  abstract class AwaitExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created await expression.
 | 
| +   */
 | 
| +  factory AwaitExpression(Token awaitKeyword, Expression expression) =>
 | 
| +      new AwaitExpressionImpl(awaitKeyword, expression);
 | 
| +
 | 
| +  /**
 | 
|     * Return the 'await' keyword.
 | 
|     */
 | 
|    Token get awaitKeyword;
 | 
| @@ -820,6 +893,13 @@ abstract class AwaitExpression extends Expression {
 | 
|  abstract class BinaryExpression extends Expression
 | 
|      implements MethodReferenceExpression {
 | 
|    /**
 | 
| +   * Initialize a newly created binary expression.
 | 
| +   */
 | 
| +  factory BinaryExpression(
 | 
| +          Expression leftOperand, Token operator, Expression rightOperand) =>
 | 
| +      new BinaryExpressionImpl(leftOperand, operator, rightOperand);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression used to compute the left operand.
 | 
|     */
 | 
|    Expression get leftOperand;
 | 
| @@ -862,6 +942,13 @@ abstract class BinaryExpression extends Expression
 | 
|   */
 | 
|  abstract class Block extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created block of code.
 | 
| +   */
 | 
| +  factory Block(
 | 
| +          Token leftBracket, List<Statement> statements, Token rightBracket) =>
 | 
| +      new BlockImpl(leftBracket, statements, rightBracket);
 | 
| +
 | 
| +  /**
 | 
|     * Return the left curly bracket.
 | 
|     */
 | 
|    Token get leftBracket;
 | 
| @@ -897,6 +984,15 @@ abstract class Block extends Statement {
 | 
|   */
 | 
|  abstract class BlockFunctionBody extends FunctionBody {
 | 
|    /**
 | 
| +   * Initialize a newly created function body consisting of a block of
 | 
| +   * statements. The [keyword] can be `null` if there is no keyword specified
 | 
| +   * for the block. The [star] can be `null` if there is no star following the
 | 
| +   * keyword (and must be `null` if there is no keyword).
 | 
| +   */
 | 
| +  factory BlockFunctionBody(Token keyword, Token star, Block block) =>
 | 
| +      new BlockFunctionBodyImpl(keyword, star, block);
 | 
| +
 | 
| +  /**
 | 
|     * Return the block representing the body of the function.
 | 
|     */
 | 
|    Block get block;
 | 
| @@ -927,6 +1023,11 @@ abstract class BlockFunctionBody extends FunctionBody {
 | 
|   */
 | 
|  abstract class BooleanLiteral extends Literal {
 | 
|    /**
 | 
| +   * Initialize a newly created boolean literal.
 | 
| +   */
 | 
| +  factory BooleanLiteral(Token literal, bool value) = BooleanLiteralImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the literal.
 | 
|     */
 | 
|    Token get literal;
 | 
| @@ -952,6 +1053,14 @@ abstract class BooleanLiteral extends Literal {
 | 
|   */
 | 
|  abstract class BreakStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created break statement. The [label] can be `null` if
 | 
| +   * there is no label associated with the statement.
 | 
| +   */
 | 
| +  factory BreakStatement(
 | 
| +          Token breakKeyword, SimpleIdentifier label, Token semicolon) =>
 | 
| +      new BreakStatementImpl(breakKeyword, label, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'break' keyword.
 | 
|     */
 | 
|    Token get breakKeyword;
 | 
| @@ -1020,6 +1129,14 @@ abstract class BreakStatement extends Statement {
 | 
|   */
 | 
|  abstract class CascadeExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created cascade expression. The list of
 | 
| +   * [cascadeSections] must contain at least one element.
 | 
| +   */
 | 
| +  factory CascadeExpression(
 | 
| +          Expression target, List<Expression> cascadeSections) =>
 | 
| +      new CascadeExpressionImpl(target, cascadeSections);
 | 
| +
 | 
| +  /**
 | 
|     * Return the cascade sections sharing the common target.
 | 
|     */
 | 
|    NodeList<Expression> get cascadeSections;
 | 
| @@ -1049,6 +1166,33 @@ abstract class CascadeExpression extends Expression {
 | 
|   */
 | 
|  abstract class CatchClause extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created catch clause. The [onKeyword] and
 | 
| +   * [exceptionType] can be `null` if the clause will catch all exceptions. The
 | 
| +   * [comma] and [stackTraceParameter] can be `null` if the stack trace
 | 
| +   * parameter is not defined.
 | 
| +   */
 | 
| +  factory CatchClause(
 | 
| +          Token onKeyword,
 | 
| +          TypeName exceptionType,
 | 
| +          Token catchKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          SimpleIdentifier exceptionParameter,
 | 
| +          Token comma,
 | 
| +          SimpleIdentifier stackTraceParameter,
 | 
| +          Token rightParenthesis,
 | 
| +          Block body) =>
 | 
| +      new CatchClauseImpl(
 | 
| +          onKeyword,
 | 
| +          exceptionType,
 | 
| +          catchKeyword,
 | 
| +          leftParenthesis,
 | 
| +          exceptionParameter,
 | 
| +          comma,
 | 
| +          stackTraceParameter,
 | 
| +          rightParenthesis,
 | 
| +          body);
 | 
| +
 | 
| +  /**
 | 
|     * Return the body of the catch block.
 | 
|     */
 | 
|    Block get body;
 | 
| @@ -1162,6 +1306,43 @@ abstract class CatchClause extends AstNode {
 | 
|   */
 | 
|  abstract class ClassDeclaration extends NamedCompilationUnitMember {
 | 
|    /**
 | 
| +   * Initialize a newly created class declaration. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the class does not have the
 | 
| +   * corresponding attribute. The [abstractKeyword] can be `null` if the class
 | 
| +   * is not abstract. The [typeParameters] can be `null` if the class does not
 | 
| +   * have any type parameters. Any or all of the [extendsClause], [withClause],
 | 
| +   * and [implementsClause] can be `null` if the class does not have the
 | 
| +   * corresponding clause. The list of [members] can be `null` if the class does
 | 
| +   * not have any members.
 | 
| +   */
 | 
| +  factory ClassDeclaration(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token abstractKeyword,
 | 
| +          Token classKeyword,
 | 
| +          SimpleIdentifier name,
 | 
| +          TypeParameterList typeParameters,
 | 
| +          ExtendsClause extendsClause,
 | 
| +          WithClause withClause,
 | 
| +          ImplementsClause implementsClause,
 | 
| +          Token leftBracket,
 | 
| +          List<ClassMember> members,
 | 
| +          Token rightBracket) =>
 | 
| +      new ClassDeclarationImpl(
 | 
| +          comment,
 | 
| +          metadata,
 | 
| +          abstractKeyword,
 | 
| +          classKeyword,
 | 
| +          name,
 | 
| +          typeParameters,
 | 
| +          extendsClause,
 | 
| +          withClause,
 | 
| +          implementsClause,
 | 
| +          leftBracket,
 | 
| +          members,
 | 
| +          rightBracket);
 | 
| +
 | 
| +  /**
 | 
|     * Return the 'abstract' keyword, or `null` if the keyword was absent.
 | 
|     */
 | 
|    Token get abstractKeyword;
 | 
| @@ -1309,6 +1490,39 @@ abstract class ClassMember extends Declaration {}
 | 
|   */
 | 
|  abstract class ClassTypeAlias extends TypeAlias {
 | 
|    /**
 | 
| +   * Initialize a newly created class type alias. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the class type alias does not
 | 
| +   * have the corresponding attribute. The [typeParameters] can be `null` if the
 | 
| +   * class does not have any type parameters. The [abstractKeyword] can be
 | 
| +   * `null` if the class is not abstract. The [implementsClause] can be `null`
 | 
| +   * if the class does not implement any interfaces.
 | 
| +   */
 | 
| +  factory ClassTypeAlias(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token keyword,
 | 
| +          SimpleIdentifier name,
 | 
| +          TypeParameterList typeParameters,
 | 
| +          Token equals,
 | 
| +          Token abstractKeyword,
 | 
| +          TypeName superclass,
 | 
| +          WithClause withClause,
 | 
| +          ImplementsClause implementsClause,
 | 
| +          Token semicolon) =>
 | 
| +      new ClassTypeAliasImpl(
 | 
| +          comment,
 | 
| +          metadata,
 | 
| +          keyword,
 | 
| +          name,
 | 
| +          typeParameters,
 | 
| +          equals,
 | 
| +          abstractKeyword,
 | 
| +          superclass,
 | 
| +          withClause,
 | 
| +          implementsClause,
 | 
| +          semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token for the 'abstract' keyword, or `null` if this is not
 | 
|     * defining an abstract class.
 | 
|     */
 | 
| @@ -1424,6 +1638,15 @@ abstract class Combinator extends AstNode {
 | 
|   */
 | 
|  abstract class Comment extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created comment. The list of [tokens] must contain at
 | 
| +   * least one token. The [type] is the type of the comment. The list of
 | 
| +   * [references] can be empty if the comment does not contain any embedded
 | 
| +   * references.
 | 
| +   */
 | 
| +  factory Comment(List<Token> tokens, CommentType type,
 | 
| +      List<CommentReference> references) = CommentImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return `true` if this is a block comment.
 | 
|     */
 | 
|    bool get isBlock;
 | 
| @@ -1447,6 +1670,32 @@ abstract class Comment extends AstNode {
 | 
|     * Return the tokens representing the comment.
 | 
|     */
 | 
|    List<Token> get tokens;
 | 
| +
 | 
| +  /**
 | 
| +   * Create a block comment consisting of the given [tokens].
 | 
| +   */
 | 
| +  static Comment createBlockComment(List<Token> tokens) =>
 | 
| +      CommentImpl.createBlockComment(tokens);
 | 
| +
 | 
| +  /**
 | 
| +   * Create a documentation comment consisting of the given [tokens].
 | 
| +   */
 | 
| +  static Comment createDocumentationComment(List<Token> tokens) =>
 | 
| +      CommentImpl.createDocumentationComment(tokens);
 | 
| +
 | 
| +  /**
 | 
| +   * Create a documentation comment consisting of the given [tokens] and having
 | 
| +   * the given [references] embedded within it.
 | 
| +   */
 | 
| +  static Comment createDocumentationCommentWithReferences(
 | 
| +          List<Token> tokens, List<CommentReference> references) =>
 | 
| +      CommentImpl.createDocumentationCommentWithReferences(tokens, references);
 | 
| +
 | 
| +  /**
 | 
| +   * Create an end-of-line comment consisting of the given [tokens].
 | 
| +   */
 | 
| +  static Comment createEndOfLineComment(List<Token> tokens) =>
 | 
| +      CommentImpl.createEndOfLineComment(tokens);
 | 
|  }
 | 
|  
 | 
|  /**
 | 
| @@ -1459,6 +1708,13 @@ abstract class Comment extends AstNode {
 | 
|   */
 | 
|  abstract class CommentReference extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created reference to a Dart element. The [newKeyword]
 | 
| +   * can be `null` if the reference is not to a constructor.
 | 
| +   */
 | 
| +  factory CommentReference(Token newKeyword, Identifier identifier) =>
 | 
| +      new CommentReferenceImpl(newKeyword, identifier);
 | 
| +
 | 
| +  /**
 | 
|     * Return the identifier being referenced.
 | 
|     */
 | 
|    Identifier get identifier;
 | 
| @@ -1507,6 +1763,22 @@ abstract class CommentReference extends AstNode {
 | 
|   */
 | 
|  abstract class CompilationUnit extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created compilation unit to have the given directives
 | 
| +   * and declarations. The [scriptTag] can be `null` if there is no script tag
 | 
| +   * in the compilation unit. The list of [directives] can be `null` if there
 | 
| +   * are no directives in the compilation unit. The list of [declarations] can
 | 
| +   * be `null` if there are no declarations in the compilation unit.
 | 
| +   */
 | 
| +  factory CompilationUnit(
 | 
| +          Token beginToken,
 | 
| +          ScriptTag scriptTag,
 | 
| +          List<Directive> directives,
 | 
| +          List<CompilationUnitMember> declarations,
 | 
| +          Token endToken) =>
 | 
| +      new CompilationUnitImpl(
 | 
| +          beginToken, scriptTag, directives, declarations, endToken);
 | 
| +
 | 
| +  /**
 | 
|     * Set the first token included in this node's source range to the given
 | 
|     * [token].
 | 
|     */
 | 
| @@ -1595,6 +1867,14 @@ abstract class CompilationUnitMember extends Declaration {}
 | 
|   */
 | 
|  abstract class ConditionalExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created conditional expression.
 | 
| +   */
 | 
| +  factory ConditionalExpression(Expression condition, Token question,
 | 
| +          Expression thenExpression, Token colon, Expression elseExpression) =>
 | 
| +      new ConditionalExpressionImpl(
 | 
| +          condition, question, thenExpression, colon, elseExpression);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token used to separate the then expression from the else
 | 
|     * expression.
 | 
|     */
 | 
| @@ -1670,6 +1950,20 @@ abstract class ConditionalExpression extends Expression {
 | 
|   */
 | 
|  abstract class Configuration extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created configuration.
 | 
| +   */
 | 
| +  factory Configuration(
 | 
| +          Token ifKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          DottedName name,
 | 
| +          Token equalToken,
 | 
| +          StringLiteral value,
 | 
| +          Token rightParenthesis,
 | 
| +          StringLiteral libraryUri) =>
 | 
| +      new ConfigurationImpl(ifKeyword, leftParenthesis, name, equalToken, value,
 | 
| +          rightParenthesis, libraryUri);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token for the equal operator, or `null` if the condition does
 | 
|     * not include an equality test.
 | 
|     */
 | 
| @@ -1796,6 +2090,50 @@ abstract class Configuration extends AstNode {
 | 
|   */
 | 
|  abstract class ConstructorDeclaration extends ClassMember {
 | 
|    /**
 | 
| +   * Initialize a newly created constructor declaration. The [externalKeyword]
 | 
| +   * can be `null` if the constructor is not external. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the constructor does not have the
 | 
| +   * corresponding attribute. The [constKeyword] can be `null` if the
 | 
| +   * constructor cannot be used to create a constant. The [factoryKeyword] can
 | 
| +   * be `null` if the constructor is not a factory. The [period] and [name] can
 | 
| +   * both be `null` if the constructor is not a named constructor. The
 | 
| +   * [separator] can be `null` if the constructor does not have any initializers
 | 
| +   * and does not redirect to a different constructor. The list of
 | 
| +   * [initializers] can be `null` if the constructor does not have any
 | 
| +   * initializers. The [redirectedConstructor] can be `null` if the constructor
 | 
| +   * does not redirect to a different constructor. The [body] can be `null` if
 | 
| +   * the constructor does not have a body.
 | 
| +   */
 | 
| +  factory ConstructorDeclaration(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token externalKeyword,
 | 
| +          Token constKeyword,
 | 
| +          Token factoryKeyword,
 | 
| +          Identifier returnType,
 | 
| +          Token period,
 | 
| +          SimpleIdentifier name,
 | 
| +          FormalParameterList parameters,
 | 
| +          Token separator,
 | 
| +          List<ConstructorInitializer> initializers,
 | 
| +          ConstructorName redirectedConstructor,
 | 
| +          FunctionBody body) =>
 | 
| +      new ConstructorDeclarationImpl(
 | 
| +          comment,
 | 
| +          metadata,
 | 
| +          externalKeyword,
 | 
| +          constKeyword,
 | 
| +          factoryKeyword,
 | 
| +          returnType,
 | 
| +          period,
 | 
| +          name,
 | 
| +          parameters,
 | 
| +          separator,
 | 
| +          initializers,
 | 
| +          redirectedConstructor,
 | 
| +          body);
 | 
| +
 | 
| +  /**
 | 
|     * Return the body of the constructor, or `null` if the constructor does not
 | 
|     * have a body.
 | 
|     */
 | 
| @@ -1933,6 +2271,16 @@ abstract class ConstructorDeclaration extends ClassMember {
 | 
|   */
 | 
|  abstract class ConstructorFieldInitializer extends ConstructorInitializer {
 | 
|    /**
 | 
| +   * Initialize a newly created field initializer to initialize the field with
 | 
| +   * the given name to the value of the given expression. The [thisKeyword] and
 | 
| +   * [period] can be `null` if the 'this' keyword was not specified.
 | 
| +   */
 | 
| +  factory ConstructorFieldInitializer(Token thisKeyword, Token period,
 | 
| +          SimpleIdentifier fieldName, Token equals, Expression expression) =>
 | 
| +      new ConstructorFieldInitializerImpl(
 | 
| +          thisKeyword, period, fieldName, equals, expression);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token for the equal sign between the field name and the
 | 
|     * expression.
 | 
|     */
 | 
| @@ -2012,6 +2360,13 @@ abstract class ConstructorInitializer extends AstNode {}
 | 
|  abstract class ConstructorName extends AstNode
 | 
|      implements ConstructorReferenceNode {
 | 
|    /**
 | 
| +   * Initialize a newly created constructor name. The [period] and [name] can be
 | 
| +   * `null` if the constructor being named is the unnamed constructor.
 | 
| +   */
 | 
| +  factory ConstructorName(TypeName type, Token period, SimpleIdentifier name) =>
 | 
| +      new ConstructorNameImpl(type, period, name);
 | 
| +
 | 
| +  /**
 | 
|     * Return the name of the constructor, or `null` if the specified constructor
 | 
|     * is the unnamed constructor.
 | 
|     */
 | 
| @@ -2075,6 +2430,14 @@ abstract class ConstructorReferenceNode {
 | 
|   */
 | 
|  abstract class ContinueStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created continue statement. The [label] can be `null` if
 | 
| +   * there is no label associated with the statement.
 | 
| +   */
 | 
| +  factory ContinueStatement(
 | 
| +          Token continueKeyword, SimpleIdentifier label, Token semicolon) =>
 | 
| +      new ContinueStatementImpl(continueKeyword, label, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'continue' keyword.
 | 
|     */
 | 
|    Token get continueKeyword;
 | 
| @@ -2146,6 +2509,16 @@ abstract class Declaration extends AnnotatedNode {
 | 
|   * Clients may not extend, implement or mix-in this class.
 | 
|   */
 | 
|  abstract class DeclaredIdentifier extends Declaration {
 | 
| +  /**
 | 
| +   * Initialize a newly created formal parameter. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the declaration does not have the
 | 
| +   * corresponding attribute. The [keyword] can be `null` if a type name is
 | 
| +   * given. The [type] must be `null` if the keyword is 'var'.
 | 
| +   */
 | 
| +  factory DeclaredIdentifier(Comment comment, List<Annotation> metadata,
 | 
| +          Token keyword, TypeName type, SimpleIdentifier identifier) =>
 | 
| +      new DeclaredIdentifierImpl(comment, metadata, keyword, type, identifier);
 | 
| +
 | 
|    @override
 | 
|    LocalVariableElement get element;
 | 
|  
 | 
| @@ -2210,6 +2583,14 @@ abstract class DeclaredIdentifier extends Declaration {
 | 
|   */
 | 
|  abstract class DefaultFormalParameter extends FormalParameter {
 | 
|    /**
 | 
| +   * Initialize a newly created default formal parameter. The [separator] and
 | 
| +   * [defaultValue] can be `null` if there is no default value.
 | 
| +   */
 | 
| +  factory DefaultFormalParameter(NormalFormalParameter parameter,
 | 
| +          ParameterKind kind, Token separator, Expression defaultValue) =>
 | 
| +      new DefaultFormalParameterImpl(parameter, kind, separator, defaultValue);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression computing the default value for the parameter, or
 | 
|     * `null` if there is no default value.
 | 
|     */
 | 
| @@ -2291,6 +2672,20 @@ abstract class Directive extends AnnotatedNode {
 | 
|   */
 | 
|  abstract class DoStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created do loop.
 | 
| +   */
 | 
| +  factory DoStatement(
 | 
| +          Token doKeyword,
 | 
| +          Statement body,
 | 
| +          Token whileKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          Expression condition,
 | 
| +          Token rightParenthesis,
 | 
| +          Token semicolon) =>
 | 
| +      new DoStatementImpl(doKeyword, body, whileKeyword, leftParenthesis,
 | 
| +          condition, rightParenthesis, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the body of the loop.
 | 
|     */
 | 
|    Statement get body;
 | 
| @@ -2372,6 +2767,11 @@ abstract class DoStatement extends Statement {
 | 
|   */
 | 
|  abstract class DottedName extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created dotted name.
 | 
| +   */
 | 
| +  factory DottedName(List<SimpleIdentifier> components) = DottedNameImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the components of the identifier.
 | 
|     */
 | 
|    NodeList<SimpleIdentifier> get components;
 | 
| @@ -2391,6 +2791,11 @@ abstract class DottedName extends AstNode {
 | 
|   */
 | 
|  abstract class DoubleLiteral extends Literal {
 | 
|    /**
 | 
| +   * Initialize a newly created floating point literal.
 | 
| +   */
 | 
| +  factory DoubleLiteral(Token literal, double value) = DoubleLiteralImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the literal.
 | 
|     */
 | 
|    Token get literal;
 | 
| @@ -2422,6 +2827,11 @@ abstract class DoubleLiteral extends Literal {
 | 
|   */
 | 
|  abstract class EmptyFunctionBody extends FunctionBody {
 | 
|    /**
 | 
| +   * Initialize a newly created function body.
 | 
| +   */
 | 
| +  factory EmptyFunctionBody(Token semicolon) = EmptyFunctionBodyImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the semicolon that marks the end of the
 | 
|     * function body.
 | 
|     */
 | 
| @@ -2444,6 +2854,11 @@ abstract class EmptyFunctionBody extends FunctionBody {
 | 
|   */
 | 
|  abstract class EmptyStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created empty statement.
 | 
| +   */
 | 
| +  factory EmptyStatement(Token semicolon) = EmptyStatementImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the semicolon terminating the statement.
 | 
|     */
 | 
|    Token get semicolon;
 | 
| @@ -2461,6 +2876,16 @@ abstract class EmptyStatement extends Statement {
 | 
|   */
 | 
|  abstract class EnumConstantDeclaration extends Declaration {
 | 
|    /**
 | 
| +   * Initialize a newly created enum constant declaration. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the constant does not have the
 | 
| +   * corresponding attribute. (Technically, enum constants cannot have metadata,
 | 
| +   * but we allow it for consistency.)
 | 
| +   */
 | 
| +  factory EnumConstantDeclaration(
 | 
| +          Comment comment, List<Annotation> metadata, SimpleIdentifier name) =>
 | 
| +      new EnumConstantDeclarationImpl(comment, metadata, name);
 | 
| +
 | 
| +  /**
 | 
|     * Return the name of the constant.
 | 
|     */
 | 
|    SimpleIdentifier get name;
 | 
| @@ -2481,6 +2906,23 @@ abstract class EnumConstantDeclaration extends Declaration {
 | 
|   */
 | 
|  abstract class EnumDeclaration extends NamedCompilationUnitMember {
 | 
|    /**
 | 
| +   * Initialize a newly created enumeration declaration. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the declaration does not have the
 | 
| +   * corresponding attribute. The list of [constants] must contain at least one
 | 
| +   * value.
 | 
| +   */
 | 
| +  factory EnumDeclaration(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token enumKeyword,
 | 
| +          SimpleIdentifier name,
 | 
| +          Token leftBracket,
 | 
| +          List<EnumConstantDeclaration> constants,
 | 
| +          Token rightBracket) =>
 | 
| +      new EnumDeclarationImpl(comment, metadata, enumKeyword, name, leftBracket,
 | 
| +          constants, rightBracket);
 | 
| +
 | 
| +  /**
 | 
|     * Return the enumeration constants being declared.
 | 
|     */
 | 
|    NodeList<EnumConstantDeclaration> get constants;
 | 
| @@ -2527,7 +2969,24 @@ abstract class EnumDeclaration extends NamedCompilationUnitMember {
 | 
|   *
 | 
|   * Clients may not extend, implement or mix-in this class.
 | 
|   */
 | 
| -abstract class ExportDirective extends NamespaceDirective {}
 | 
| +abstract class ExportDirective extends NamespaceDirective {
 | 
| +  /**
 | 
| +   * Initialize a newly created export directive. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the directive does not have the
 | 
| +   * corresponding attribute. The list of [combinators] can be `null` if there
 | 
| +   * are no combinators.
 | 
| +   */
 | 
| +  factory ExportDirective(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token keyword,
 | 
| +          StringLiteral libraryUri,
 | 
| +          List<Configuration> configurations,
 | 
| +          List<Combinator> combinators,
 | 
| +          Token semicolon) =>
 | 
| +      new ExportDirectiveImpl(comment, metadata, keyword, libraryUri,
 | 
| +          configurations, combinators, semicolon);
 | 
| +}
 | 
|  
 | 
|  /**
 | 
|   * A node that represents an expression.
 | 
| @@ -2640,6 +3099,16 @@ abstract class Expression extends AstNode {
 | 
|   */
 | 
|  abstract class ExpressionFunctionBody extends FunctionBody {
 | 
|    /**
 | 
| +   * Initialize a newly created function body consisting of a block of
 | 
| +   * statements. The [keyword] can be `null` if the function body is not an
 | 
| +   * async function body.
 | 
| +   */
 | 
| +  factory ExpressionFunctionBody(Token keyword, Token functionDefinition,
 | 
| +          Expression expression, Token semicolon) =>
 | 
| +      new ExpressionFunctionBodyImpl(
 | 
| +          keyword, functionDefinition, expression, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression representing the body of the function.
 | 
|     */
 | 
|    Expression get expression;
 | 
| @@ -2688,6 +3157,12 @@ abstract class ExpressionFunctionBody extends FunctionBody {
 | 
|   */
 | 
|  abstract class ExpressionStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created expression statement.
 | 
| +   */
 | 
| +  factory ExpressionStatement(Expression expression, Token semicolon) =>
 | 
| +      new ExpressionStatementImpl(expression, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression that comprises the statement.
 | 
|     */
 | 
|    Expression get expression;
 | 
| @@ -2719,6 +3194,12 @@ abstract class ExpressionStatement extends Statement {
 | 
|   */
 | 
|  abstract class ExtendsClause extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created extends clause.
 | 
| +   */
 | 
| +  factory ExtendsClause(Token extendsKeyword, TypeName superclass) =>
 | 
| +      new ExtendsClauseImpl(extendsKeyword, superclass);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'extends' keyword.
 | 
|     */
 | 
|    Token get extendsKeyword;
 | 
| @@ -2749,6 +3230,21 @@ abstract class ExtendsClause extends AstNode {
 | 
|   */
 | 
|  abstract class FieldDeclaration extends ClassMember {
 | 
|    /**
 | 
| +   * Initialize a newly created field declaration. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the declaration does not have the
 | 
| +   * corresponding attribute. The [staticKeyword] can be `null` if the field is
 | 
| +   * not a static field.
 | 
| +   */
 | 
| +  factory FieldDeclaration(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token staticKeyword,
 | 
| +          VariableDeclarationList fieldList,
 | 
| +          Token semicolon) =>
 | 
| +      new FieldDeclarationImpl(
 | 
| +          comment, metadata, staticKeyword, fieldList, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the fields being declared.
 | 
|     */
 | 
|    VariableDeclarationList get fields;
 | 
| @@ -2796,6 +3292,28 @@ abstract class FieldDeclaration extends ClassMember {
 | 
|   */
 | 
|  abstract class FieldFormalParameter extends NormalFormalParameter {
 | 
|    /**
 | 
| +   * Initialize a newly created formal parameter. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the parameter does not have the
 | 
| +   * corresponding attribute. The [keyword] can be `null` if there is a type.
 | 
| +   * The [type] must be `null` if the keyword is 'var'. The [thisKeyword] and
 | 
| +   * [period] can be `null` if the keyword 'this' was not provided.  The
 | 
| +   * [parameters] can be `null` if this is not a function-typed field formal
 | 
| +   * parameter.
 | 
| +   */
 | 
| +  factory FieldFormalParameter(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token keyword,
 | 
| +          TypeName type,
 | 
| +          Token thisKeyword,
 | 
| +          Token period,
 | 
| +          SimpleIdentifier identifier,
 | 
| +          TypeParameterList typeParameters,
 | 
| +          FormalParameterList parameters) =>
 | 
| +      new FieldFormalParameterImpl(comment, metadata, keyword, type,
 | 
| +          thisKeyword, period, identifier, typeParameters, parameters);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing either the 'final', 'const' or 'var' keyword,
 | 
|     * or `null` if no keyword was used.
 | 
|     */
 | 
| @@ -2876,6 +3394,54 @@ abstract class FieldFormalParameter extends NormalFormalParameter {
 | 
|   */
 | 
|  abstract class ForEachStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created for-each statement whose loop control variable
 | 
| +   * is declared internally (in the for-loop part). The [awaitKeyword] can be
 | 
| +   * `null` if this is not an asynchronous for loop.
 | 
| +   */
 | 
| +  factory ForEachStatement.withDeclaration(
 | 
| +          Token awaitKeyword,
 | 
| +          Token forKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          DeclaredIdentifier loopVariable,
 | 
| +          Token inKeyword,
 | 
| +          Expression iterator,
 | 
| +          Token rightParenthesis,
 | 
| +          Statement body) =>
 | 
| +      new ForEachStatementImpl.withDeclaration(
 | 
| +          awaitKeyword,
 | 
| +          forKeyword,
 | 
| +          leftParenthesis,
 | 
| +          loopVariable,
 | 
| +          inKeyword,
 | 
| +          iterator,
 | 
| +          rightParenthesis,
 | 
| +          body);
 | 
| +
 | 
| +  /**
 | 
| +   * Initialize a newly created for-each statement whose loop control variable
 | 
| +   * is declared outside the for loop. The [awaitKeyword] can be `null` if this
 | 
| +   * is not an asynchronous for loop.
 | 
| +   */
 | 
| +  factory ForEachStatement.withReference(
 | 
| +          Token awaitKeyword,
 | 
| +          Token forKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          SimpleIdentifier identifier,
 | 
| +          Token inKeyword,
 | 
| +          Expression iterator,
 | 
| +          Token rightParenthesis,
 | 
| +          Statement body) =>
 | 
| +      new ForEachStatementImpl.withReference(
 | 
| +          awaitKeyword,
 | 
| +          forKeyword,
 | 
| +          leftParenthesis,
 | 
| +          identifier,
 | 
| +          inKeyword,
 | 
| +          iterator,
 | 
| +          rightParenthesis,
 | 
| +          body);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'await' keyword, or `null` if there is no
 | 
|     * 'await' keyword.
 | 
|     */
 | 
| @@ -3046,6 +3612,18 @@ abstract class FormalParameter extends AstNode {
 | 
|   */
 | 
|  abstract class FormalParameterList extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created parameter list. The list of [parameters] can be
 | 
| +   * `null` if there are no parameters. The [leftDelimiter] and [rightDelimiter]
 | 
| +   * can be `null` if there are no optional parameters.
 | 
| +   */
 | 
| +  factory FormalParameterList(
 | 
| +      Token leftParenthesis,
 | 
| +      List<FormalParameter> parameters,
 | 
| +      Token leftDelimiter,
 | 
| +      Token rightDelimiter,
 | 
| +      Token rightParenthesis) = FormalParameterListImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the left square bracket ('[') or left curly brace ('{') introducing
 | 
|     * the optional parameters, or `null` if there are no optional parameters.
 | 
|     */
 | 
| @@ -3119,6 +3697,35 @@ abstract class FormalParameterList extends AstNode {
 | 
|   */
 | 
|  abstract class ForStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created for statement. Either the [variableList] or the
 | 
| +   * [initialization] must be `null`. Either the [condition] and the list of
 | 
| +   * [updaters] can be `null` if the loop does not have the corresponding
 | 
| +   * attribute.
 | 
| +   */
 | 
| +  factory ForStatement(
 | 
| +          Token forKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          VariableDeclarationList variableList,
 | 
| +          Expression initialization,
 | 
| +          Token leftSeparator,
 | 
| +          Expression condition,
 | 
| +          Token rightSeparator,
 | 
| +          List<Expression> updaters,
 | 
| +          Token rightParenthesis,
 | 
| +          Statement body) =>
 | 
| +      new ForStatementImpl(
 | 
| +          forKeyword,
 | 
| +          leftParenthesis,
 | 
| +          variableList,
 | 
| +          initialization,
 | 
| +          leftSeparator,
 | 
| +          condition,
 | 
| +          rightSeparator,
 | 
| +          updaters,
 | 
| +          rightParenthesis,
 | 
| +          body);
 | 
| +
 | 
| +  /**
 | 
|     * Return the body of the loop.
 | 
|     */
 | 
|    Statement get body;
 | 
| @@ -3298,6 +3905,25 @@ abstract class FunctionBody extends AstNode {
 | 
|   * Clients may not extend, implement or mix-in this class.
 | 
|   */
 | 
|  abstract class FunctionDeclaration extends NamedCompilationUnitMember {
 | 
| +  /**
 | 
| +   * Initialize a newly created function declaration. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the function does not have the
 | 
| +   * corresponding attribute. The [externalKeyword] can be `null` if the
 | 
| +   * function is not an external function. The [returnType] can be `null` if no
 | 
| +   * return type was specified. The [propertyKeyword] can be `null` if the
 | 
| +   * function is neither a getter or a setter.
 | 
| +   */
 | 
| +  factory FunctionDeclaration(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token externalKeyword,
 | 
| +          TypeName returnType,
 | 
| +          Token propertyKeyword,
 | 
| +          SimpleIdentifier name,
 | 
| +          FunctionExpression functionExpression) =>
 | 
| +      new FunctionDeclarationImpl(comment, metadata, externalKeyword,
 | 
| +          returnType, propertyKeyword, name, functionExpression);
 | 
| +
 | 
|    @override
 | 
|    ExecutableElement get element;
 | 
|  
 | 
| @@ -3363,6 +3989,13 @@ abstract class FunctionDeclaration extends NamedCompilationUnitMember {
 | 
|   */
 | 
|  abstract class FunctionDeclarationStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created function declaration statement.
 | 
| +   */
 | 
| +  factory FunctionDeclarationStatement(
 | 
| +          FunctionDeclaration functionDeclaration) =
 | 
| +      FunctionDeclarationStatementImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the function declaration being wrapped.
 | 
|     */
 | 
|    FunctionDeclaration get functionDeclaration;
 | 
| @@ -3384,6 +4017,13 @@ abstract class FunctionDeclarationStatement extends Statement {
 | 
|   */
 | 
|  abstract class FunctionExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created function declaration.
 | 
| +   */
 | 
| +  factory FunctionExpression(TypeParameterList typeParameters,
 | 
| +          FormalParameterList parameters, FunctionBody body) =>
 | 
| +      new FunctionExpressionImpl(typeParameters, parameters, body);
 | 
| +
 | 
| +  /**
 | 
|     * Return the body of the function, or `null` if this is an external function.
 | 
|     */
 | 
|    FunctionBody get body;
 | 
| @@ -3441,6 +4081,14 @@ abstract class FunctionExpression extends Expression {
 | 
|   */
 | 
|  abstract class FunctionExpressionInvocation extends InvocationExpression {
 | 
|    /**
 | 
| +   * Initialize a newly created function expression invocation.
 | 
| +   */
 | 
| +  factory FunctionExpressionInvocation(Expression function,
 | 
| +          TypeArgumentList typeArguments, ArgumentList argumentList) =>
 | 
| +      new FunctionExpressionInvocationImpl(
 | 
| +          function, typeArguments, argumentList);
 | 
| +
 | 
| +  /**
 | 
|     * Set the list of arguments to the method to the given [argumentList].
 | 
|     */
 | 
|    void set argumentList(ArgumentList argumentList);
 | 
| @@ -3512,6 +4160,25 @@ abstract class FunctionExpressionInvocation extends InvocationExpression {
 | 
|   */
 | 
|  abstract class FunctionTypeAlias extends TypeAlias {
 | 
|    /**
 | 
| +   * Initialize a newly created function type alias. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the function does not have the
 | 
| +   * corresponding attribute. The [returnType] can be `null` if no return type
 | 
| +   * was specified. The [typeParameters] can be `null` if the function has no
 | 
| +   * type parameters.
 | 
| +   */
 | 
| +  factory FunctionTypeAlias(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token keyword,
 | 
| +          TypeName returnType,
 | 
| +          SimpleIdentifier name,
 | 
| +          TypeParameterList typeParameters,
 | 
| +          FormalParameterList parameters,
 | 
| +          Token semicolon) =>
 | 
| +      new FunctionTypeAliasImpl(comment, metadata, keyword, returnType, name,
 | 
| +          typeParameters, parameters, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the parameters associated with the function type.
 | 
|     */
 | 
|    FormalParameterList get parameters;
 | 
| @@ -3557,6 +4224,23 @@ abstract class FunctionTypeAlias extends TypeAlias {
 | 
|   */
 | 
|  abstract class FunctionTypedFormalParameter extends NormalFormalParameter {
 | 
|    /**
 | 
| +   * Initialize a newly created formal parameter. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the parameter does not have the
 | 
| +   * corresponding attribute. The [returnType] can be `null` if no return type
 | 
| +   * was specified.
 | 
| +   */
 | 
| +  factory FunctionTypedFormalParameter(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          TypeName returnType,
 | 
| +          SimpleIdentifier identifier,
 | 
| +          TypeParameterList typeParameters,
 | 
| +          FormalParameterList parameters,
 | 
| +          {Token question: null}) =>
 | 
| +      new FunctionTypedFormalParameterImpl(comment, metadata, returnType,
 | 
| +          identifier, typeParameters, parameters, question);
 | 
| +
 | 
| +  /**
 | 
|     * Return the parameters of the function-typed parameter.
 | 
|     */
 | 
|    FormalParameterList get parameters;
 | 
| @@ -3614,6 +4298,12 @@ abstract class FunctionTypedFormalParameter extends NormalFormalParameter {
 | 
|   */
 | 
|  abstract class HideCombinator extends Combinator {
 | 
|    /**
 | 
| +   * Initialize a newly created import show combinator.
 | 
| +   */
 | 
| +  factory HideCombinator(Token keyword, List<SimpleIdentifier> hiddenNames) =
 | 
| +      HideCombinatorImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the list of names from the library that are hidden by this
 | 
|     * combinator.
 | 
|     */
 | 
| @@ -3678,6 +4368,21 @@ abstract class Identifier extends Expression {
 | 
|   */
 | 
|  abstract class IfStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created if statement. The [elseKeyword] and
 | 
| +   * [elseStatement] can be `null` if there is no else clause.
 | 
| +   */
 | 
| +  factory IfStatement(
 | 
| +          Token ifKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          Expression condition,
 | 
| +          Token rightParenthesis,
 | 
| +          Statement thenStatement,
 | 
| +          Token elseKeyword,
 | 
| +          Statement elseStatement) =>
 | 
| +      new IfStatementImpl(ifKeyword, leftParenthesis, condition,
 | 
| +          rightParenthesis, thenStatement, elseKeyword, elseStatement);
 | 
| +
 | 
| +  /**
 | 
|     * Return the condition used to determine which of the statements is executed
 | 
|     * next.
 | 
|     */
 | 
| @@ -3764,6 +4469,12 @@ abstract class IfStatement extends Statement {
 | 
|   */
 | 
|  abstract class ImplementsClause extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created implements clause.
 | 
| +   */
 | 
| +  factory ImplementsClause(Token implementsKeyword, List<TypeName> interfaces) =
 | 
| +      ImplementsClauseImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'implements' keyword.
 | 
|     */
 | 
|    Token get implementsKeyword;
 | 
| @@ -3894,6 +4605,38 @@ abstract class ImportDirective extends NamespaceDirective {
 | 
|      }
 | 
|      return 0;
 | 
|    };
 | 
| +
 | 
| +  /**
 | 
| +   * Initialize a newly created import directive. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the function does not have the
 | 
| +   * corresponding attribute. The [deferredKeyword] can be `null` if the import
 | 
| +   * is not deferred. The [asKeyword] and [prefix] can be `null` if the import
 | 
| +   * does not specify a prefix. The list of [combinators] can be `null` if there
 | 
| +   * are no combinators.
 | 
| +   */
 | 
| +  factory ImportDirective(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token keyword,
 | 
| +          StringLiteral libraryUri,
 | 
| +          List<Configuration> configurations,
 | 
| +          Token deferredKeyword,
 | 
| +          Token asKeyword,
 | 
| +          SimpleIdentifier prefix,
 | 
| +          List<Combinator> combinators,
 | 
| +          Token semicolon) =>
 | 
| +      new ImportDirectiveImpl(
 | 
| +          comment,
 | 
| +          metadata,
 | 
| +          keyword,
 | 
| +          libraryUri,
 | 
| +          configurations,
 | 
| +          deferredKeyword,
 | 
| +          asKeyword,
 | 
| +          prefix,
 | 
| +          combinators,
 | 
| +          semicolon);
 | 
| +
 | 
|    /**
 | 
|     * Return the token representing the 'as' keyword, or `null` if the imported
 | 
|     * names are not prefixed.
 | 
| @@ -3939,6 +4682,22 @@ abstract class ImportDirective extends NamespaceDirective {
 | 
|  abstract class IndexExpression extends Expression
 | 
|      implements MethodReferenceExpression {
 | 
|    /**
 | 
| +   * Initialize a newly created index expression.
 | 
| +   */
 | 
| +  factory IndexExpression.forCascade(Token period, Token leftBracket,
 | 
| +          Expression index, Token rightBracket) =>
 | 
| +      new IndexExpressionImpl.forCascade(
 | 
| +          period, leftBracket, index, rightBracket);
 | 
| +
 | 
| +  /**
 | 
| +   * Initialize a newly created index expression.
 | 
| +   */
 | 
| +  factory IndexExpression.forTarget(Expression target, Token leftBracket,
 | 
| +          Expression index, Token rightBracket) =>
 | 
| +      new IndexExpressionImpl.forTarget(
 | 
| +          target, leftBracket, index, rightBracket);
 | 
| +
 | 
| +  /**
 | 
|     * Return the auxiliary elements associated with this identifier, or `null` if
 | 
|     * this identifier is not in both a getter and setter context. The auxiliary
 | 
|     * elements hold the static and propagated elements associated with the getter
 | 
| @@ -4057,6 +4816,14 @@ abstract class IndexExpression extends Expression
 | 
|  abstract class InstanceCreationExpression extends Expression
 | 
|      implements ConstructorReferenceNode {
 | 
|    /**
 | 
| +   * Initialize a newly created instance creation expression.
 | 
| +   */
 | 
| +  factory InstanceCreationExpression(Token keyword,
 | 
| +          ConstructorName constructorName, ArgumentList argumentList) =>
 | 
| +      new InstanceCreationExpressionImpl(
 | 
| +          keyword, constructorName, argumentList);
 | 
| +
 | 
| +  /**
 | 
|     * Return the list of arguments to the constructor.
 | 
|     */
 | 
|    ArgumentList get argumentList;
 | 
| @@ -4113,6 +4880,11 @@ abstract class InstanceCreationExpression extends Expression
 | 
|   */
 | 
|  abstract class IntegerLiteral extends Literal {
 | 
|    /**
 | 
| +   * Initialize a newly created integer literal.
 | 
| +   */
 | 
| +  factory IntegerLiteral(Token literal, int value) = IntegerLiteralImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the literal.
 | 
|     */
 | 
|    Token get literal;
 | 
| @@ -4155,6 +4927,13 @@ abstract class InterpolationElement extends AstNode {}
 | 
|   */
 | 
|  abstract class InterpolationExpression extends InterpolationElement {
 | 
|    /**
 | 
| +   * Initialize a newly created interpolation expression.
 | 
| +   */
 | 
| +  factory InterpolationExpression(
 | 
| +          Token leftBracket, Expression expression, Token rightBracket) =>
 | 
| +      new InterpolationExpressionImpl(leftBracket, expression, rightBracket);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression to be evaluated for the value to be converted into a
 | 
|     * string.
 | 
|     */
 | 
| @@ -4202,6 +4981,13 @@ abstract class InterpolationExpression extends InterpolationElement {
 | 
|   */
 | 
|  abstract class InterpolationString extends InterpolationElement {
 | 
|    /**
 | 
| +   * Initialize a newly created string of characters that are part of a string
 | 
| +   * interpolation.
 | 
| +   */
 | 
| +  factory InterpolationString(Token contents, String value) =
 | 
| +      InterpolationStringImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the characters that will be added to the string.
 | 
|     */
 | 
|    Token get contents;
 | 
| @@ -4309,6 +5095,14 @@ abstract class InvocationExpression extends Expression {
 | 
|   */
 | 
|  abstract class IsExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created is expression. The [notOperator] can be `null`
 | 
| +   * if the sense of the test is not negated.
 | 
| +   */
 | 
| +  factory IsExpression(Expression expression, Token isOperator,
 | 
| +          Token notOperator, TypeName type) =>
 | 
| +      new IsExpressionImpl(expression, isOperator, notOperator, type);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression used to compute the value whose type is being tested.
 | 
|     */
 | 
|    Expression get expression;
 | 
| @@ -4360,6 +5154,12 @@ abstract class IsExpression extends Expression {
 | 
|   */
 | 
|  abstract class Label extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created label.
 | 
| +   */
 | 
| +  factory Label(SimpleIdentifier label, Token colon) =>
 | 
| +      new LabelImpl(label, colon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the colon that separates the label from the statement.
 | 
|     */
 | 
|    Token get colon;
 | 
| @@ -4391,6 +5191,12 @@ abstract class Label extends AstNode {
 | 
|   */
 | 
|  abstract class LabeledStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created labeled statement.
 | 
| +   */
 | 
| +  factory LabeledStatement(List<Label> labels, Statement statement) =>
 | 
| +      new LabeledStatementImpl(labels, statement);
 | 
| +
 | 
| +  /**
 | 
|     * Return the labels being associated with the statement.
 | 
|     */
 | 
|    NodeList<Label> get labels;
 | 
| @@ -4417,6 +5223,16 @@ abstract class LabeledStatement extends Statement {
 | 
|   */
 | 
|  abstract class LibraryDirective extends Directive {
 | 
|    /**
 | 
| +   * Initialize a newly created library directive. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the directive does not have the
 | 
| +   * corresponding attribute.
 | 
| +   */
 | 
| +  factory LibraryDirective(Comment comment, List<Annotation> metadata,
 | 
| +          Token libraryKeyword, LibraryIdentifier name, Token semicolon) =>
 | 
| +      new LibraryDirectiveImpl(
 | 
| +          comment, metadata, libraryKeyword, name, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'library' keyword.
 | 
|     */
 | 
|    Token get libraryKeyword;
 | 
| @@ -4457,6 +5273,12 @@ abstract class LibraryDirective extends Directive {
 | 
|   */
 | 
|  abstract class LibraryIdentifier extends Identifier {
 | 
|    /**
 | 
| +   * Initialize a newly created prefixed identifier.
 | 
| +   */
 | 
| +  factory LibraryIdentifier(List<SimpleIdentifier> components) =
 | 
| +      LibraryIdentifierImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the components of the identifier.
 | 
|     */
 | 
|    NodeList<SimpleIdentifier> get components;
 | 
| @@ -4472,6 +5294,19 @@ abstract class LibraryIdentifier extends Identifier {
 | 
|   */
 | 
|  abstract class ListLiteral extends TypedLiteral {
 | 
|    /**
 | 
| +   * Initialize a newly created list literal. The [constKeyword] can be `null`
 | 
| +   * if the literal is not a constant. The [typeArguments] can be `null` if no
 | 
| +   * type arguments were declared. The list of [elements] can be `null` if the
 | 
| +   * list is empty.
 | 
| +   */
 | 
| +  factory ListLiteral(
 | 
| +      Token constKeyword,
 | 
| +      TypeArgumentList typeArguments,
 | 
| +      Token leftBracket,
 | 
| +      List<Expression> elements,
 | 
| +      Token rightBracket) = ListLiteralImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the expressions used to compute the elements of the list.
 | 
|     */
 | 
|    NodeList<Expression> get elements;
 | 
| @@ -4524,6 +5359,18 @@ abstract class Literal extends Expression {}
 | 
|   */
 | 
|  abstract class MapLiteral extends TypedLiteral {
 | 
|    /**
 | 
| +   * Initialize a newly created map literal. The [constKeyword] can be `null` if
 | 
| +   * the literal is not a constant. The [typeArguments] can be `null` if no type
 | 
| +   * arguments were declared. The [entries] can be `null` if the map is empty.
 | 
| +   */
 | 
| +  factory MapLiteral(
 | 
| +      Token constKeyword,
 | 
| +      TypeArgumentList typeArguments,
 | 
| +      Token leftBracket,
 | 
| +      List<MapLiteralEntry> entries,
 | 
| +      Token rightBracket) = MapLiteralImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the entries in the map.
 | 
|     */
 | 
|    NodeList<MapLiteralEntry> get entries;
 | 
| @@ -4559,6 +5406,12 @@ abstract class MapLiteral extends TypedLiteral {
 | 
|   */
 | 
|  abstract class MapLiteralEntry extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created map literal entry.
 | 
| +   */
 | 
| +  factory MapLiteralEntry(Expression key, Token separator, Expression value) =>
 | 
| +      new MapLiteralEntryImpl(key, separator, value);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression computing the key with which the value will be
 | 
|     * associated.
 | 
|     */
 | 
| @@ -4611,6 +5464,42 @@ abstract class MapLiteralEntry extends AstNode {
 | 
|   */
 | 
|  abstract class MethodDeclaration extends ClassMember {
 | 
|    /**
 | 
| +   * Initialize a newly created method declaration. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the declaration does not have the
 | 
| +   * corresponding attribute. The [externalKeyword] can be `null` if the method
 | 
| +   * is not external. The [modifierKeyword] can be `null` if the method is
 | 
| +   * neither abstract nor static. The [returnType] can be `null` if no return
 | 
| +   * type was specified. The [propertyKeyword] can be `null` if the method is
 | 
| +   * neither a getter or a setter. The [operatorKeyword] can be `null` if the
 | 
| +   * method does not implement an operator. The [parameters] must be `null` if
 | 
| +   * this method declares a getter.
 | 
| +   */
 | 
| +  factory MethodDeclaration(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token externalKeyword,
 | 
| +          Token modifierKeyword,
 | 
| +          TypeName returnType,
 | 
| +          Token propertyKeyword,
 | 
| +          Token operatorKeyword,
 | 
| +          SimpleIdentifier name,
 | 
| +          TypeParameterList typeParameters,
 | 
| +          FormalParameterList parameters,
 | 
| +          FunctionBody body) =>
 | 
| +      new MethodDeclarationImpl(
 | 
| +          comment,
 | 
| +          metadata,
 | 
| +          externalKeyword,
 | 
| +          modifierKeyword,
 | 
| +          returnType,
 | 
| +          propertyKeyword,
 | 
| +          operatorKeyword,
 | 
| +          name,
 | 
| +          typeParameters,
 | 
| +          parameters,
 | 
| +          body);
 | 
| +
 | 
| +  /**
 | 
|     * Return the body of the method.
 | 
|     */
 | 
|    FunctionBody get body;
 | 
| @@ -4752,6 +5641,19 @@ abstract class MethodDeclaration extends ClassMember {
 | 
|   */
 | 
|  abstract class MethodInvocation extends InvocationExpression {
 | 
|    /**
 | 
| +   * Initialize a newly created method invocation. The [target] and [operator]
 | 
| +   * can be `null` if there is no target.
 | 
| +   */
 | 
| +  factory MethodInvocation(
 | 
| +          Expression target,
 | 
| +          Token operator,
 | 
| +          SimpleIdentifier methodName,
 | 
| +          TypeArgumentList typeArguments,
 | 
| +          ArgumentList argumentList) =>
 | 
| +      new MethodInvocationImpl(
 | 
| +          target, operator, methodName, typeArguments, argumentList);
 | 
| +
 | 
| +  /**
 | 
|     * Set the list of arguments to the method to the given [argumentList].
 | 
|     */
 | 
|    void set argumentList(ArgumentList argumentList);
 | 
| @@ -4892,6 +5794,12 @@ abstract class NamedCompilationUnitMember extends CompilationUnitMember {
 | 
|   */
 | 
|  abstract class NamedExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created named expression..
 | 
| +   */
 | 
| +  factory NamedExpression(Label name, Expression expression) =>
 | 
| +      new NamedExpressionImpl(name, expression);
 | 
| +
 | 
| +  /**
 | 
|     * Return the element representing the parameter being named by this
 | 
|     * expression, or `null` if the AST structure has not been resolved or if
 | 
|     * there is no parameter with the same name as this expression.
 | 
| @@ -4984,6 +5892,12 @@ abstract class NamespaceDirective extends UriBasedDirective {
 | 
|   */
 | 
|  abstract class NativeClause extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created native clause.
 | 
| +   */
 | 
| +  factory NativeClause(Token nativeKeyword, StringLiteral name) =>
 | 
| +      new NativeClauseImpl(nativeKeyword, name);
 | 
| +
 | 
| +  /**
 | 
|     * Return the name of the native object that implements the class.
 | 
|     */
 | 
|    StringLiteral get name;
 | 
| @@ -5016,6 +5930,14 @@ abstract class NativeClause extends AstNode {
 | 
|   */
 | 
|  abstract class NativeFunctionBody extends FunctionBody {
 | 
|    /**
 | 
| +   * Initialize a newly created function body consisting of the 'native' token,
 | 
| +   * a string literal, and a semicolon.
 | 
| +   */
 | 
| +  factory NativeFunctionBody(
 | 
| +          Token nativeKeyword, StringLiteral stringLiteral, Token semicolon) =>
 | 
| +      new NativeFunctionBodyImpl(nativeKeyword, stringLiteral, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing 'native' that marks the start of the function
 | 
|     * body.
 | 
|     */
 | 
| @@ -5058,6 +5980,14 @@ abstract class NativeFunctionBody extends FunctionBody {
 | 
|   */
 | 
|  abstract class NodeList<E extends AstNode> implements List<E> {
 | 
|    /**
 | 
| +   * Initialize a newly created list of nodes such that all of the nodes that
 | 
| +   * are added to the list will have their parent set to the given [owner]. The
 | 
| +   * list will initially be populated with the given [elements].
 | 
| +   */
 | 
| +  factory NodeList(AstNode owner, [List<E> elements]) =>
 | 
| +      new NodeListImpl<E>(owner as AstNodeImpl, elements);
 | 
| +
 | 
| +  /**
 | 
|     * Return the first token included in this node list's source range, or `null`
 | 
|     * if the list is empty.
 | 
|     */
 | 
| @@ -5151,6 +6081,11 @@ abstract class NormalFormalParameter extends FormalParameter {
 | 
|   */
 | 
|  abstract class NullLiteral extends Literal {
 | 
|    /**
 | 
| +   * Initialize a newly created null literal.
 | 
| +   */
 | 
| +  factory NullLiteral(Token literal) = NullLiteralImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the literal.
 | 
|     */
 | 
|    Token get literal;
 | 
| @@ -5171,6 +6106,14 @@ abstract class NullLiteral extends Literal {
 | 
|   */
 | 
|  abstract class ParenthesizedExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created parenthesized expression.
 | 
| +   */
 | 
| +  factory ParenthesizedExpression(Token leftParenthesis, Expression expression,
 | 
| +          Token rightParenthesis) =>
 | 
| +      new ParenthesizedExpressionImpl(
 | 
| +          leftParenthesis, expression, rightParenthesis);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression within the parentheses.
 | 
|     */
 | 
|    Expression get expression;
 | 
| @@ -5211,6 +6154,18 @@ abstract class ParenthesizedExpression extends Expression {
 | 
|   */
 | 
|  abstract class PartDirective extends UriBasedDirective {
 | 
|    /**
 | 
| +   * Initialize a newly created part directive. Either or both of the [comment]
 | 
| +   * and [metadata] can be `null` if the directive does not have the
 | 
| +   * corresponding attribute.
 | 
| +   */
 | 
| +  factory PartDirective(
 | 
| +      Comment comment,
 | 
| +      List<Annotation> metadata,
 | 
| +      Token partKeyword,
 | 
| +      StringLiteral partUri,
 | 
| +      Token semicolon) = PartDirectiveImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'part' keyword.
 | 
|     */
 | 
|    Token get partKeyword;
 | 
| @@ -5241,6 +6196,23 @@ abstract class PartDirective extends UriBasedDirective {
 | 
|   */
 | 
|  abstract class PartOfDirective extends Directive {
 | 
|    /**
 | 
| +   * Initialize a newly created part-of directive. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the directive does not have the
 | 
| +   * corresponding attribute. Only one of the [uri] and [libraryName] should be
 | 
| +   * provided.
 | 
| +   */
 | 
| +  factory PartOfDirective(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          Token partKeyword,
 | 
| +          Token ofKeyword,
 | 
| +          StringLiteral uri,
 | 
| +          LibraryIdentifier libraryName,
 | 
| +          Token semicolon) =>
 | 
| +      new PartOfDirectiveImpl(comment, metadata, partKeyword, ofKeyword, uri,
 | 
| +          libraryName, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the name of the library that the containing compilation unit is part
 | 
|     * of.
 | 
|     */
 | 
| @@ -5308,6 +6280,12 @@ abstract class PartOfDirective extends Directive {
 | 
|  abstract class PostfixExpression extends Expression
 | 
|      implements MethodReferenceExpression {
 | 
|    /**
 | 
| +   * Initialize a newly created postfix expression.
 | 
| +   */
 | 
| +  factory PostfixExpression(Expression operand, Token operator) =>
 | 
| +      new PostfixExpressionImpl(operand, operator);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression computing the operand for the operator.
 | 
|     */
 | 
|    Expression get operand;
 | 
| @@ -5340,6 +6318,13 @@ abstract class PostfixExpression extends Expression
 | 
|   */
 | 
|  abstract class PrefixedIdentifier extends Identifier {
 | 
|    /**
 | 
| +   * Initialize a newly created prefixed identifier.
 | 
| +   */
 | 
| +  factory PrefixedIdentifier(
 | 
| +          SimpleIdentifier prefix, Token period, SimpleIdentifier identifier) =>
 | 
| +      new PrefixedIdentifierImpl(prefix, period, identifier);
 | 
| +
 | 
| +  /**
 | 
|     * Return the identifier being prefixed.
 | 
|     */
 | 
|    SimpleIdentifier get identifier;
 | 
| @@ -5393,6 +6378,12 @@ abstract class PrefixedIdentifier extends Identifier {
 | 
|  abstract class PrefixExpression extends Expression
 | 
|      implements MethodReferenceExpression {
 | 
|    /**
 | 
| +   * Initialize a newly created prefix expression.
 | 
| +   */
 | 
| +  factory PrefixExpression(Token operator, Expression operand) =>
 | 
| +      new PrefixExpressionImpl(operator, operand);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression computing the operand for the operator.
 | 
|     */
 | 
|    Expression get operand;
 | 
| @@ -5428,6 +6419,13 @@ abstract class PrefixExpression extends Expression
 | 
|   */
 | 
|  abstract class PropertyAccess extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created property access expression.
 | 
| +   */
 | 
| +  factory PropertyAccess(
 | 
| +          Expression target, Token operator, SimpleIdentifier propertyName) =>
 | 
| +      new PropertyAccessImpl(target, operator, propertyName);
 | 
| +
 | 
| +  /**
 | 
|     * Return `true` if this expression is cascaded. If it is, then the target of
 | 
|     * this expression is not stored locally but is stored in the nearest ancestor
 | 
|     * that is a [CascadeExpression].
 | 
| @@ -5490,6 +6488,16 @@ abstract class PropertyAccess extends Expression {
 | 
|  abstract class RedirectingConstructorInvocation extends ConstructorInitializer
 | 
|      implements ConstructorReferenceNode {
 | 
|    /**
 | 
| +   * Initialize a newly created redirecting invocation to invoke the constructor
 | 
| +   * with the given name with the given arguments. The [constructorName] can be
 | 
| +   * `null` if the constructor being invoked is the unnamed constructor.
 | 
| +   */
 | 
| +  factory RedirectingConstructorInvocation(Token thisKeyword, Token period,
 | 
| +          SimpleIdentifier constructorName, ArgumentList argumentList) =>
 | 
| +      new RedirectingConstructorInvocationImpl(
 | 
| +          thisKeyword, period, constructorName, argumentList);
 | 
| +
 | 
| +  /**
 | 
|     * Return the list of arguments to the constructor.
 | 
|     */
 | 
|    ArgumentList get argumentList;
 | 
| @@ -5544,6 +6552,11 @@ abstract class RedirectingConstructorInvocation extends ConstructorInitializer
 | 
|   */
 | 
|  abstract class RethrowExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created rethrow expression.
 | 
| +   */
 | 
| +  factory RethrowExpression(Token rethrowKeyword) = RethrowExpressionImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'rethrow' keyword.
 | 
|     */
 | 
|    Token get rethrowKeyword;
 | 
| @@ -5564,6 +6577,14 @@ abstract class RethrowExpression extends Expression {
 | 
|   */
 | 
|  abstract class ReturnStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created return statement. The [expression] can be `null`
 | 
| +   * if no explicit value was provided.
 | 
| +   */
 | 
| +  factory ReturnStatement(
 | 
| +          Token returnKeyword, Expression expression, Token semicolon) =>
 | 
| +      new ReturnStatementImpl(returnKeyword, expression, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression computing the value to be returned, or `null` if no
 | 
|     * explicit value was provided.
 | 
|     */
 | 
| @@ -5606,6 +6627,11 @@ abstract class ReturnStatement extends Statement {
 | 
|   */
 | 
|  abstract class ScriptTag extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created script tag.
 | 
| +   */
 | 
| +  factory ScriptTag(Token scriptTag) = ScriptTagImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing this script tag.
 | 
|     */
 | 
|    Token get scriptTag;
 | 
| @@ -5626,6 +6652,12 @@ abstract class ScriptTag extends AstNode {
 | 
|   */
 | 
|  abstract class ShowCombinator extends Combinator {
 | 
|    /**
 | 
| +   * Initialize a newly created import show combinator.
 | 
| +   */
 | 
| +  factory ShowCombinator(Token keyword, List<SimpleIdentifier> shownNames) =
 | 
| +      ShowCombinatorImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the list of names from the library that are made visible by this
 | 
|     * combinator.
 | 
|     */
 | 
| @@ -5642,6 +6674,17 @@ abstract class ShowCombinator extends Combinator {
 | 
|   */
 | 
|  abstract class SimpleFormalParameter extends NormalFormalParameter {
 | 
|    /**
 | 
| +   * Initialize a newly created formal parameter. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the parameter does not have the
 | 
| +   * corresponding attribute. The [keyword] can be `null` if a type was
 | 
| +   * specified. The [type] must be `null` if the keyword is 'var'.
 | 
| +   */
 | 
| +  factory SimpleFormalParameter(Comment comment, List<Annotation> metadata,
 | 
| +          Token keyword, TypeName type, SimpleIdentifier identifier) =>
 | 
| +      new SimpleFormalParameterImpl(
 | 
| +          comment, metadata, keyword, type, identifier);
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing either the 'final', 'const' or 'var' keyword,
 | 
|     * or `null` if no keyword was used.
 | 
|     */
 | 
| @@ -5679,6 +6722,16 @@ abstract class SimpleFormalParameter extends NormalFormalParameter {
 | 
|   */
 | 
|  abstract class SimpleIdentifier extends Identifier {
 | 
|    /**
 | 
| +   * Initialize a newly created identifier.
 | 
| +   */
 | 
| +  factory SimpleIdentifier(Token token, {bool isDeclaration: false}) {
 | 
| +    if (isDeclaration) {
 | 
| +      return new DeclaredSimpleIdentifier(token);
 | 
| +    }
 | 
| +    return new SimpleIdentifierImpl(token);
 | 
| +  }
 | 
| +
 | 
| +  /**
 | 
|     * Return the auxiliary elements associated with this identifier, or `null` if
 | 
|     * this identifier is not in both a getter and setter context. The auxiliary
 | 
|     * elements hold the static and propagated elements associated with the getter
 | 
| @@ -5776,6 +6829,12 @@ abstract class SimpleIdentifier extends Identifier {
 | 
|   */
 | 
|  abstract class SimpleStringLiteral extends SingleStringLiteral {
 | 
|    /**
 | 
| +   * Initialize a newly created simple string literal.
 | 
| +   */
 | 
| +  factory SimpleStringLiteral(Token literal, String value) =
 | 
| +      SimpleStringLiteralImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the literal.
 | 
|     */
 | 
|    Token get literal;
 | 
| @@ -5874,6 +6933,12 @@ abstract class Statement extends AstNode {
 | 
|   */
 | 
|  abstract class StringInterpolation extends SingleStringLiteral {
 | 
|    /**
 | 
| +   * Initialize a newly created string interpolation expression.
 | 
| +   */
 | 
| +  factory StringInterpolation(List<InterpolationElement> elements) =
 | 
| +      StringInterpolationImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the elements that will be composed to produce the resulting string.
 | 
|     */
 | 
|    NodeList<InterpolationElement> get elements;
 | 
| @@ -5909,6 +6974,17 @@ abstract class StringLiteral extends Literal {
 | 
|  abstract class SuperConstructorInvocation extends ConstructorInitializer
 | 
|      implements ConstructorReferenceNode {
 | 
|    /**
 | 
| +   * Initialize a newly created super invocation to invoke the inherited
 | 
| +   * constructor with the given name with the given arguments. The [period] and
 | 
| +   * [constructorName] can be `null` if the constructor being invoked is the
 | 
| +   * unnamed constructor.
 | 
| +   */
 | 
| +  factory SuperConstructorInvocation(Token superKeyword, Token period,
 | 
| +          SimpleIdentifier constructorName, ArgumentList argumentList) =>
 | 
| +      new SuperConstructorInvocationImpl(
 | 
| +          superKeyword, period, constructorName, argumentList);
 | 
| +
 | 
| +  /**
 | 
|     * Return the list of arguments to the constructor.
 | 
|     */
 | 
|    ArgumentList get argumentList;
 | 
| @@ -5963,6 +7039,11 @@ abstract class SuperConstructorInvocation extends ConstructorInitializer
 | 
|   */
 | 
|  abstract class SuperExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created super expression.
 | 
| +   */
 | 
| +  factory SuperExpression(Token superKeyword) = SuperExpressionImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'super' keyword.
 | 
|     */
 | 
|    Token get superKeyword;
 | 
| @@ -5983,6 +7064,14 @@ abstract class SuperExpression extends Expression {
 | 
|   */
 | 
|  abstract class SwitchCase extends SwitchMember {
 | 
|    /**
 | 
| +   * Initialize a newly created switch case. The list of [labels] can be `null`
 | 
| +   * if there are no labels.
 | 
| +   */
 | 
| +  factory SwitchCase(List<Label> labels, Token keyword, Expression expression,
 | 
| +          Token colon, List<Statement> statements) =>
 | 
| +      new SwitchCaseImpl(labels, keyword, expression, colon, statements);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression controlling whether the statements will be executed.
 | 
|     */
 | 
|    Expression get expression;
 | 
| @@ -6002,7 +7091,14 @@ abstract class SwitchCase extends SwitchMember {
 | 
|   *
 | 
|   * Clients may not extend, implement or mix-in this class.
 | 
|   */
 | 
| -abstract class SwitchDefault extends SwitchMember {}
 | 
| +abstract class SwitchDefault extends SwitchMember {
 | 
| +  /**
 | 
| +   * Initialize a newly created switch default. The list of [labels] can be
 | 
| +   * `null` if there are no labels.
 | 
| +   */
 | 
| +  factory SwitchDefault(List<Label> labels, Token keyword, Token colon,
 | 
| +      List<Statement> statements) = SwitchDefaultImpl;
 | 
| +}
 | 
|  
 | 
|  /**
 | 
|   * An element within a switch statement.
 | 
| @@ -6059,6 +7155,21 @@ abstract class SwitchMember extends AstNode {
 | 
|   */
 | 
|  abstract class SwitchStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created switch statement. The list of [members] can be
 | 
| +   * `null` if there are no switch members.
 | 
| +   */
 | 
| +  factory SwitchStatement(
 | 
| +          Token switchKeyword,
 | 
| +          Token leftParenthesis,
 | 
| +          Expression expression,
 | 
| +          Token rightParenthesis,
 | 
| +          Token leftBracket,
 | 
| +          List<SwitchMember> members,
 | 
| +          Token rightBracket) =>
 | 
| +      new SwitchStatementImpl(switchKeyword, leftParenthesis, expression,
 | 
| +          rightParenthesis, leftBracket, members, rightBracket);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression used to determine which of the switch members will be
 | 
|     * selected.
 | 
|     */
 | 
| @@ -6136,6 +7247,12 @@ abstract class SwitchStatement extends Statement {
 | 
|   */
 | 
|  abstract class SymbolLiteral extends Literal {
 | 
|    /**
 | 
| +   * Initialize a newly created symbol literal.
 | 
| +   */
 | 
| +  factory SymbolLiteral(Token poundSign, List<Token> components) =
 | 
| +      SymbolLiteralImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the components of the literal.
 | 
|     */
 | 
|    List<Token> get components;
 | 
| @@ -6161,6 +7278,11 @@ abstract class SymbolLiteral extends Literal {
 | 
|   */
 | 
|  abstract class ThisExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created this expression.
 | 
| +   */
 | 
| +  factory ThisExpression(Token thisKeyword) = ThisExpressionImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the token representing the 'this' keyword.
 | 
|     */
 | 
|    Token get thisKeyword;
 | 
| @@ -6181,6 +7303,12 @@ abstract class ThisExpression extends Expression {
 | 
|   */
 | 
|  abstract class ThrowExpression extends Expression {
 | 
|    /**
 | 
| +   * Initialize a newly created throw expression.
 | 
| +   */
 | 
| +  factory ThrowExpression(Token throwKeyword, Expression expression) =>
 | 
| +      new ThrowExpressionImpl(throwKeyword, expression);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression computing the exception to be thrown.
 | 
|     */
 | 
|    Expression get expression;
 | 
| @@ -6213,6 +7341,19 @@ abstract class ThrowExpression extends Expression {
 | 
|   */
 | 
|  abstract class TopLevelVariableDeclaration extends CompilationUnitMember {
 | 
|    /**
 | 
| +   * Initialize a newly created top-level variable declaration. Either or both
 | 
| +   * of the [comment] and [metadata] can be `null` if the variable does not have
 | 
| +   * the corresponding attribute.
 | 
| +   */
 | 
| +  factory TopLevelVariableDeclaration(
 | 
| +          Comment comment,
 | 
| +          List<Annotation> metadata,
 | 
| +          VariableDeclarationList variableList,
 | 
| +          Token semicolon) =>
 | 
| +      new TopLevelVariableDeclarationImpl(
 | 
| +          comment, metadata, variableList, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the semicolon terminating the declaration.
 | 
|     */
 | 
|    Token get semicolon;
 | 
| @@ -6247,6 +7388,20 @@ abstract class TopLevelVariableDeclaration extends CompilationUnitMember {
 | 
|   */
 | 
|  abstract class TryStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created try statement. The list of [catchClauses] can be
 | 
| +   * `null` if there are no catch clauses. The [finallyKeyword] and
 | 
| +   * [finallyBlock] can be `null` if there is no finally clause.
 | 
| +   */
 | 
| +  factory TryStatement(
 | 
| +          Token tryKeyword,
 | 
| +          Block body,
 | 
| +          List<CatchClause> catchClauses,
 | 
| +          Token finallyKeyword,
 | 
| +          Block finallyBlock) =>
 | 
| +      new TryStatementImpl(
 | 
| +          tryKeyword, body, catchClauses, finallyKeyword, finallyBlock);
 | 
| +
 | 
| +  /**
 | 
|     * Return the body of the statement.
 | 
|     */
 | 
|    Block get body;
 | 
| @@ -6338,6 +7493,13 @@ abstract class TypeAlias extends NamedCompilationUnitMember {
 | 
|   */
 | 
|  abstract class TypeArgumentList extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created list of type arguments.
 | 
| +   */
 | 
| +  factory TypeArgumentList(
 | 
| +          Token leftBracket, List<TypeName> arguments, Token rightBracket) =
 | 
| +      TypeArgumentListImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the type arguments associated with the type.
 | 
|     */
 | 
|    NodeList<TypeName> get arguments;
 | 
| @@ -6407,6 +7569,14 @@ abstract class TypedLiteral extends Literal {
 | 
|   */
 | 
|  abstract class TypeName extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created type name. The [typeArguments] can be `null` if
 | 
| +   * there are no type arguments.
 | 
| +   */
 | 
| +  factory TypeName(Identifier name, TypeArgumentList typeArguments,
 | 
| +          {Token question: null}) =>
 | 
| +      new TypeNameImpl(name, typeArguments, question);
 | 
| +
 | 
| +  /**
 | 
|     * Return `true` if this type is a deferred type.
 | 
|     *
 | 
|     * 15.1 Static Types: A type <i>T</i> is deferred iff it is of the form
 | 
| @@ -6470,6 +7640,16 @@ abstract class TypeName extends AstNode {
 | 
|   */
 | 
|  abstract class TypeParameter extends Declaration {
 | 
|    /**
 | 
| +   * Initialize a newly created type parameter. Either or both of the [comment]
 | 
| +   * and [metadata] can be `null` if the parameter does not have the
 | 
| +   * corresponding attribute. The [extendsKeyword] and [bound] can be `null` if
 | 
| +   * the parameter does not have an upper bound.
 | 
| +   */
 | 
| +  factory TypeParameter(Comment comment, List<Annotation> metadata,
 | 
| +          SimpleIdentifier name, Token extendsKeyword, TypeName bound) =>
 | 
| +      new TypeParameterImpl(comment, metadata, name, extendsKeyword, bound);
 | 
| +
 | 
| +  /**
 | 
|     * Return the name of the upper bound for legal arguments, or `null` if there
 | 
|     * is no explicit upper bound.
 | 
|     */
 | 
| @@ -6513,6 +7693,14 @@ abstract class TypeParameter extends Declaration {
 | 
|   */
 | 
|  abstract class TypeParameterList extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created list of type parameters.
 | 
| +   */
 | 
| +  factory TypeParameterList(
 | 
| +      Token leftBracket,
 | 
| +      List<TypeParameter> typeParameters,
 | 
| +      Token rightBracket) = TypeParameterListImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the left angle bracket.
 | 
|     */
 | 
|    Token get leftBracket;
 | 
| @@ -6605,6 +7793,14 @@ abstract class UriBasedDirective extends Directive {
 | 
|   * Clients may not extend, implement or mix-in this class.
 | 
|   */
 | 
|  abstract class VariableDeclaration extends Declaration {
 | 
| +  /**
 | 
| +   * Initialize a newly created variable declaration. The [equals] and
 | 
| +   * [initializer] can be `null` if there is no initializer.
 | 
| +   */
 | 
| +  factory VariableDeclaration(
 | 
| +          SimpleIdentifier name, Token equals, Expression initializer) =>
 | 
| +      new VariableDeclarationImpl(name, equals, initializer);
 | 
| +
 | 
|    @override
 | 
|    VariableElement get element;
 | 
|  
 | 
| @@ -6671,6 +7867,17 @@ abstract class VariableDeclaration extends Declaration {
 | 
|   */
 | 
|  abstract class VariableDeclarationList extends AnnotatedNode {
 | 
|    /**
 | 
| +   * Initialize a newly created variable declaration list. Either or both of the
 | 
| +   * [comment] and [metadata] can be `null` if the variable list does not have
 | 
| +   * the corresponding attribute. The [keyword] can be `null` if a type was
 | 
| +   * specified. The [type] must be `null` if the keyword is 'var'.
 | 
| +   */
 | 
| +  factory VariableDeclarationList(Comment comment, List<Annotation> metadata,
 | 
| +          Token keyword, TypeName type, List<VariableDeclaration> variables) =>
 | 
| +      new VariableDeclarationListImpl(
 | 
| +          comment, metadata, keyword, type, variables);
 | 
| +
 | 
| +  /**
 | 
|     * Return `true` if the variables in this list were declared with the 'const'
 | 
|     * modifier.
 | 
|     */
 | 
| @@ -6724,6 +7931,13 @@ abstract class VariableDeclarationList extends AnnotatedNode {
 | 
|   */
 | 
|  abstract class VariableDeclarationStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created variable declaration statement.
 | 
| +   */
 | 
| +  factory VariableDeclarationStatement(
 | 
| +          VariableDeclarationList variableList, Token semicolon) =>
 | 
| +      new VariableDeclarationStatementImpl(variableList, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the semicolon terminating the statement.
 | 
|     */
 | 
|    Token get semicolon;
 | 
| @@ -6754,6 +7968,14 @@ abstract class VariableDeclarationStatement extends Statement {
 | 
|   */
 | 
|  abstract class WhileStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created while statement.
 | 
| +   */
 | 
| +  factory WhileStatement(Token whileKeyword, Token leftParenthesis,
 | 
| +          Expression condition, Token rightParenthesis, Statement body) =>
 | 
| +      new WhileStatementImpl(
 | 
| +          whileKeyword, leftParenthesis, condition, rightParenthesis, body);
 | 
| +
 | 
| +  /**
 | 
|     * Return the body of the loop.
 | 
|     */
 | 
|    Statement get body;
 | 
| @@ -6816,6 +8038,12 @@ abstract class WhileStatement extends Statement {
 | 
|   */
 | 
|  abstract class WithClause extends AstNode {
 | 
|    /**
 | 
| +   * Initialize a newly created with clause.
 | 
| +   */
 | 
| +  factory WithClause(Token withKeyword, List<TypeName> mixinTypes) =
 | 
| +      WithClauseImpl;
 | 
| +
 | 
| +  /**
 | 
|     * Return the names of the mixins that were specified.
 | 
|     */
 | 
|    NodeList<TypeName> get mixinTypes;
 | 
| @@ -6841,6 +8069,14 @@ abstract class WithClause extends AstNode {
 | 
|   */
 | 
|  abstract class YieldStatement extends Statement {
 | 
|    /**
 | 
| +   * Initialize a newly created yield expression. The [star] can be `null` if no
 | 
| +   * star was provided.
 | 
| +   */
 | 
| +  factory YieldStatement(Token yieldKeyword, Token star, Expression expression,
 | 
| +          Token semicolon) =>
 | 
| +      new YieldStatementImpl(yieldKeyword, star, expression, semicolon);
 | 
| +
 | 
| +  /**
 | 
|     * Return the expression whose value will be yielded.
 | 
|     */
 | 
|    Expression get expression;
 | 
| 
 |