| Index: pkg/analyzer/lib/src/generated/testing/ast_factory.dart
 | 
| diff --git a/pkg/analyzer/lib/src/generated/testing/ast_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_factory.dart
 | 
| index d4328ca4b1e586fff66a6577e925784761cfe533..d761f82fc8659004c62cbaea3b7dddb02fef2f21 100644
 | 
| --- a/pkg/analyzer/lib/src/generated/testing/ast_factory.dart
 | 
| +++ b/pkg/analyzer/lib/src/generated/testing/ast_factory.dart
 | 
| @@ -26,13 +26,17 @@ import 'package:analyzer/src/generated/testing/token_factory.dart';
 | 
|   * 'identifier' rather than 'prefixedIdentifier', or 'integer' rather than 'integerLiteral'.
 | 
|   */
 | 
|  class AstFactory {
 | 
| -  static AdjacentStrings adjacentStrings(List<StringLiteral> strings) => new AdjacentStrings(list(strings));
 | 
| +  static AdjacentStrings adjacentStrings(List<StringLiteral> strings) => new AdjacentStrings(strings);
 | 
|  
 | 
|    static Annotation annotation(Identifier name) => new Annotation(TokenFactory.tokenFromType(TokenType.AT), name, null, null, null);
 | 
|  
 | 
|    static Annotation annotation2(Identifier name, SimpleIdentifier constructorName, ArgumentList arguments) => new Annotation(TokenFactory.tokenFromType(TokenType.AT), name, TokenFactory.tokenFromType(TokenType.PERIOD), constructorName, arguments);
 | 
|  
 | 
| -  static ArgumentList argumentList(List<Expression> arguments) => new ArgumentList(TokenFactory.tokenFromType(TokenType.OPEN_PAREN), list(arguments), TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
 | 
| +  static ArgumentList argumentList([List<Expression> arguments])
 | 
| +      => new ArgumentList(
 | 
| +          TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
 | 
| +          arguments,
 | 
| +          TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
 | 
|  
 | 
|    static AsExpression asExpression(Expression expression, TypeName type) => new AsExpression(expression, TokenFactory.tokenFromKeyword(Keyword.AS), type);
 | 
|  
 | 
| @@ -40,21 +44,35 @@ class AstFactory {
 | 
|  
 | 
|    static AssignmentExpression assignmentExpression(Expression leftHandSide, TokenType operator, Expression rightHandSide) => new AssignmentExpression(leftHandSide, TokenFactory.tokenFromType(operator), rightHandSide);
 | 
|  
 | 
| -  static BlockFunctionBody asyncBlockFunctionBody(List<Statement> statements) => new BlockFunctionBody(TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"), null, block(statements));
 | 
| +  static BlockFunctionBody asyncBlockFunctionBody([List<Statement> statements])
 | 
| +     => new BlockFunctionBody(
 | 
| +         TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
 | 
| +         null,
 | 
| +         block(statements));
 | 
|  
 | 
|    static ExpressionFunctionBody asyncExpressionFunctionBody(Expression expression) => new ExpressionFunctionBody(TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"), TokenFactory.tokenFromType(TokenType.FUNCTION), expression, TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
|  
 | 
| -  static BlockFunctionBody asyncGeneratorBlockFunctionBody(List<Statement> statements) => new BlockFunctionBody(TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"), TokenFactory.tokenFromType(TokenType.STAR), block(statements));
 | 
| +  static BlockFunctionBody asyncGeneratorBlockFunctionBody([List<Statement> statements])
 | 
| +     => new BlockFunctionBody(
 | 
| +         TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
 | 
| +          TokenFactory.tokenFromType(TokenType.STAR),
 | 
| +          block(statements));
 | 
|  
 | 
|    static AwaitExpression awaitExpression(Expression expression) => new AwaitExpression(TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "await"), expression);
 | 
|  
 | 
|    static BinaryExpression binaryExpression(Expression leftOperand, TokenType operator, Expression rightOperand) => new BinaryExpression(leftOperand, TokenFactory.tokenFromType(operator), rightOperand);
 | 
|  
 | 
| -  static Block block(List<Statement> statements) => new Block(TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), list(statements), TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
| +  static Block block([List<Statement> statements])
 | 
| +      => new Block(
 | 
| +          TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
 | 
| +          statements,
 | 
| +          TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
|  
 | 
| -  static BlockFunctionBody blockFunctionBody(Block block) => new BlockFunctionBody(null, null, block);
 | 
| +  static BlockFunctionBody blockFunctionBody(Block block)
 | 
| +      => new BlockFunctionBody(null, null, block);
 | 
|  
 | 
| -  static BlockFunctionBody blockFunctionBody2(List<Statement> statements) => new BlockFunctionBody(null, null, block(statements));
 | 
| +  static BlockFunctionBody blockFunctionBody2([List<Statement> statements])
 | 
| +      => new BlockFunctionBody(null, null, block(statements));
 | 
|  
 | 
|    static BooleanLiteral booleanLiteral(bool value) => new BooleanLiteral(value ? TokenFactory.tokenFromKeyword(Keyword.TRUE) : TokenFactory.tokenFromKeyword(Keyword.FALSE), value);
 | 
|  
 | 
| @@ -64,39 +82,72 @@ class AstFactory {
 | 
|  
 | 
|    static IndexExpression cascadedIndexExpression(Expression index) => new IndexExpression.forCascade(TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD), TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET), index, TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
 | 
|  
 | 
| -  static MethodInvocation cascadedMethodInvocation(String methodName, List<Expression> arguments) => new MethodInvocation(null, TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD), identifier3(methodName), argumentList(arguments));
 | 
| +  static MethodInvocation cascadedMethodInvocation(String methodName, [List<Expression> arguments])
 | 
| +      => new MethodInvocation(
 | 
| +          null,
 | 
| +          TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD),
 | 
| +          identifier3(methodName),
 | 
| +          argumentList(arguments));
 | 
|  
 | 
|    static PropertyAccess cascadedPropertyAccess(String propertyName) => new PropertyAccess(null, TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD), identifier3(propertyName));
 | 
|  
 | 
| -  static CascadeExpression cascadeExpression(Expression target, List<Expression> cascadeSections) => new CascadeExpression(target, list(cascadeSections));
 | 
| -
 | 
| -  static CatchClause catchClause(String exceptionParameter, List<Statement> statements) => catchClause5(null, exceptionParameter, null, statements);
 | 
| -
 | 
| -  static CatchClause catchClause2(String exceptionParameter, String stackTraceParameter, List<Statement> statements) => catchClause5(null, exceptionParameter, stackTraceParameter, statements);
 | 
| -
 | 
| -  static CatchClause catchClause3(TypeName exceptionType, List<Statement> statements) => catchClause5(exceptionType, null, null, statements);
 | 
| -
 | 
| -  static CatchClause catchClause4(TypeName exceptionType, String exceptionParameter, List<Statement> statements) => catchClause5(exceptionType, exceptionParameter, null, statements);
 | 
| -
 | 
| -  static CatchClause catchClause5(TypeName exceptionType, String exceptionParameter, String stackTraceParameter, List<Statement> statements) => new CatchClause(exceptionType == null ? null : TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "on"), exceptionType, exceptionParameter == null ? null : TokenFactory.tokenFromKeyword(Keyword.CATCH), exceptionParameter == null ? null : TokenFactory.tokenFromType(TokenType.OPEN_PAREN), exceptionParameter == null ? null : identifier3(exceptionParameter), stackTraceParameter == null ? null : TokenFactory.tokenFromType(TokenType.COMMA), stackTraceParameter == null ? null : identifier3(stackTraceParameter), exceptionParameter == null ? null : TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), block(statements));
 | 
| -
 | 
| -  static ClassDeclaration classDeclaration(Keyword abstractKeyword, String name, TypeParameterList typeParameters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause implementsClause, List<ClassMember> members) => new ClassDeclaration(null, null, abstractKeyword == null ? null : TokenFactory.tokenFromKeyword(abstractKeyword), TokenFactory.tokenFromKeyword(Keyword.CLASS), identifier3(name), typeParameters, extendsClause, withClause, implementsClause, TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), list(members), TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
| +  static CascadeExpression cascadeExpression(Expression target, [List<Expression> cascadeSections])
 | 
| +      => new CascadeExpression(target, cascadeSections);
 | 
| +
 | 
| +  static CatchClause catchClause(String exceptionParameter, [List<Statement> statements])
 | 
| +      => catchClause5(null, exceptionParameter, null, statements);
 | 
| +
 | 
| +  static CatchClause catchClause2(String exceptionParameter, String stackTraceParameter, [List<Statement> statements])
 | 
| +      => catchClause5(null, exceptionParameter, stackTraceParameter, statements);
 | 
| +
 | 
| +  static CatchClause catchClause3(TypeName exceptionType, [List<Statement> statements])
 | 
| +      => catchClause5(exceptionType, null, null, statements);
 | 
| +
 | 
| +  static CatchClause catchClause4(TypeName exceptionType, String exceptionParameter, [List<Statement> statements])
 | 
| +      => catchClause5(exceptionType, exceptionParameter, null, statements);
 | 
| +
 | 
| +  static CatchClause catchClause5(TypeName exceptionType, String exceptionParameter, String stackTraceParameter, [List<Statement> statements])
 | 
| +      => new CatchClause(
 | 
| +          exceptionType == null ? null : TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "on"),
 | 
| +          exceptionType,
 | 
| +          exceptionParameter == null ? null : TokenFactory.tokenFromKeyword(Keyword.CATCH),
 | 
| +          exceptionParameter == null ? null : TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
 | 
| +          exceptionParameter == null ? null : identifier3(exceptionParameter),
 | 
| +          stackTraceParameter == null ? null : TokenFactory.tokenFromType(TokenType.COMMA),
 | 
| +          stackTraceParameter == null ? null : identifier3(stackTraceParameter),
 | 
| +          exceptionParameter == null ? null : TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
 | 
| +          block(statements));
 | 
| +
 | 
| +  static ClassDeclaration classDeclaration(Keyword abstractKeyword, String name, TypeParameterList typeParameters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause implementsClause, [List<ClassMember> members])
 | 
| +      => new ClassDeclaration(
 | 
| +          null,
 | 
| +          null,
 | 
| +          abstractKeyword == null ? null : TokenFactory.tokenFromKeyword(abstractKeyword),
 | 
| +          TokenFactory.tokenFromKeyword(Keyword.CLASS),
 | 
| +          identifier3(name),
 | 
| +          typeParameters,
 | 
| +          extendsClause,
 | 
| +          withClause,
 | 
| +          implementsClause,
 | 
| +          TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
 | 
| +          members,
 | 
| +          TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
|  
 | 
|    static ClassTypeAlias classTypeAlias(String name, TypeParameterList typeParameters, Keyword abstractKeyword, TypeName superclass, WithClause withClause, ImplementsClause implementsClause) => new ClassTypeAlias(null, null, TokenFactory.tokenFromKeyword(Keyword.CLASS), identifier3(name), typeParameters, TokenFactory.tokenFromType(TokenType.EQ), abstractKeyword == null ? null : TokenFactory.tokenFromKeyword(abstractKeyword), superclass, withClause, implementsClause, TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
|  
 | 
|    static CompilationUnit compilationUnit() => compilationUnit8(null, null, null);
 | 
|  
 | 
| -  static CompilationUnit compilationUnit2(List<CompilationUnitMember> declarations) => compilationUnit8(null, null, list(declarations));
 | 
| +  static CompilationUnit compilationUnit2(List<CompilationUnitMember> declarations) => compilationUnit8(null, null, declarations);
 | 
|  
 | 
| -  static CompilationUnit compilationUnit3(List<Directive> directives) => compilationUnit8(null, list(directives), null);
 | 
| +  static CompilationUnit compilationUnit3(List<Directive> directives) => compilationUnit8(null, directives, null);
 | 
|  
 | 
|    static CompilationUnit compilationUnit4(List<Directive> directives, List<CompilationUnitMember> declarations) => compilationUnit8(null, directives, declarations);
 | 
|  
 | 
|    static CompilationUnit compilationUnit5(String scriptTag) => compilationUnit8(scriptTag, null, null);
 | 
|  
 | 
| -  static CompilationUnit compilationUnit6(String scriptTag, List<CompilationUnitMember> declarations) => compilationUnit8(scriptTag, null, list(declarations));
 | 
| +  static CompilationUnit compilationUnit6(String scriptTag, List<CompilationUnitMember> declarations) => compilationUnit8(scriptTag, null, declarations);
 | 
|  
 | 
| -  static CompilationUnit compilationUnit7(String scriptTag, List<Directive> directives) => compilationUnit8(scriptTag, list(directives), null);
 | 
| +  static CompilationUnit compilationUnit7(String scriptTag, List<Directive> directives) => compilationUnit8(scriptTag, directives, null);
 | 
|  
 | 
|    static CompilationUnit compilationUnit8(String scriptTag, List<Directive> directives, List<CompilationUnitMember> declarations) => new CompilationUnit(TokenFactory.tokenFromType(TokenType.EOF), scriptTag == null ? null : AstFactory.scriptTag(scriptTag), directives == null ? new List<Directive>() : directives, declarations == null ? new List<CompilationUnitMember>() : declarations, TokenFactory.tokenFromType(TokenType.EOF));
 | 
|  
 | 
| @@ -110,10 +161,11 @@ class AstFactory {
 | 
|  
 | 
|    static ConstructorName constructorName(TypeName type, String name) => new ConstructorName(type, name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD), name == null ? null : identifier3(name));
 | 
|  
 | 
| -  static ContinueStatement continueStatement([String label]) {
 | 
| -    SimpleIdentifier labelNode = label == null ? null : identifier3(label);
 | 
| -    return new ContinueStatement(TokenFactory.tokenFromKeyword(Keyword.CONTINUE), labelNode, TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
| -  }
 | 
| +  static ContinueStatement continueStatement([String label])
 | 
| +      => new ContinueStatement(
 | 
| +          TokenFactory.tokenFromKeyword(Keyword.CONTINUE),
 | 
| +          label == null ? null : identifier3(label),
 | 
| +          TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
|  
 | 
|    static DeclaredIdentifier declaredIdentifier(Keyword keyword, String identifier) => declaredIdentifier2(keyword, null, identifier);
 | 
|  
 | 
| @@ -131,7 +183,7 @@ class AstFactory {
 | 
|  
 | 
|    static EmptyStatement emptyStatement() => new EmptyStatement(TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
|  
 | 
| -  static EnumDeclaration enumDeclaration(SimpleIdentifier name, List<EnumConstantDeclaration> constants) => new EnumDeclaration(null, null, TokenFactory.tokenFromKeyword(Keyword.ENUM), name, TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), list(constants), TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
| +  static EnumDeclaration enumDeclaration(SimpleIdentifier name, List<EnumConstantDeclaration> constants) => new EnumDeclaration(null, null, TokenFactory.tokenFromKeyword(Keyword.ENUM), name, TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), constants, TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
|  
 | 
|    static EnumDeclaration enumDeclaration2(String name, List<String> constantNames) {
 | 
|      int count = constantNames.length;
 | 
| @@ -142,9 +194,17 @@ class AstFactory {
 | 
|      return enumDeclaration(identifier3(name), constants);
 | 
|    }
 | 
|  
 | 
| -  static ExportDirective exportDirective(List<Annotation> metadata, String uri, List<Combinator> combinators) => new ExportDirective(null, metadata, TokenFactory.tokenFromKeyword(Keyword.EXPORT), string2(uri), list(combinators), TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
| +  static ExportDirective exportDirective(List<Annotation> metadata, String uri, [List<Combinator> combinators])
 | 
| +      => new ExportDirective(
 | 
| +          null,
 | 
| +          metadata,
 | 
| +          TokenFactory.tokenFromKeyword(Keyword.EXPORT),
 | 
| +          string2(uri),
 | 
| +          combinators,
 | 
| +          TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
|  
 | 
| -  static ExportDirective exportDirective2(String uri, List<Combinator> combinators) => exportDirective(new List<Annotation>(), uri, combinators);
 | 
| +  static ExportDirective exportDirective2(String uri, [List<Combinator> combinators])
 | 
| +      => exportDirective(null, uri, combinators);
 | 
|  
 | 
|    static ExpressionFunctionBody expressionFunctionBody(Expression expression) => new ExpressionFunctionBody(null, TokenFactory.tokenFromType(TokenType.FUNCTION), expression, TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
|  
 | 
| @@ -164,7 +224,13 @@ class AstFactory {
 | 
|  
 | 
|    static ForEachStatement forEachStatement2(SimpleIdentifier identifier, Expression iterator, Statement body) => new ForEachStatement.con2(null, TokenFactory.tokenFromKeyword(Keyword.FOR), TokenFactory.tokenFromType(TokenType.OPEN_PAREN), identifier, TokenFactory.tokenFromKeyword(Keyword.IN), iterator, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
 | 
|  
 | 
| -  static FormalParameterList formalParameterList(List<FormalParameter> parameters) => new FormalParameterList(TokenFactory.tokenFromType(TokenType.OPEN_PAREN), list(parameters), null, null, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
 | 
| +  static FormalParameterList formalParameterList([List<FormalParameter> parameters])
 | 
| +      => new FormalParameterList(
 | 
| +          TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
 | 
| +          parameters,
 | 
| +          null,
 | 
| +          null,
 | 
| +          TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
 | 
|  
 | 
|    static ForStatement forStatement(Expression initialization, Expression condition, List<Expression> updaters, Statement body) => new ForStatement(TokenFactory.tokenFromKeyword(Keyword.FOR), TokenFactory.tokenFromType(TokenType.OPEN_PAREN), null, initialization, TokenFactory.tokenFromType(TokenType.SEMICOLON), condition, TokenFactory.tokenFromType(TokenType.SEMICOLON), updaters, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
 | 
|  
 | 
| @@ -174,23 +240,27 @@ class AstFactory {
 | 
|  
 | 
|    static FunctionDeclarationStatement functionDeclarationStatement(TypeName type, Keyword keyword, String name, FunctionExpression functionExpression) => new FunctionDeclarationStatement(functionDeclaration(type, keyword, name, functionExpression));
 | 
|  
 | 
| -  static FunctionExpression functionExpression() => new FunctionExpression(formalParameterList([]), blockFunctionBody2([]));
 | 
| +  static FunctionExpression functionExpression() => new FunctionExpression(formalParameterList(), blockFunctionBody2());
 | 
|  
 | 
|    static FunctionExpression functionExpression2(FormalParameterList parameters, FunctionBody body) => new FunctionExpression(parameters, body);
 | 
|  
 | 
| -  static FunctionExpressionInvocation functionExpressionInvocation(Expression function, List<Expression> arguments) => new FunctionExpressionInvocation(function, argumentList(arguments));
 | 
| +  static FunctionExpressionInvocation functionExpressionInvocation(Expression function, [List<Expression> arguments])
 | 
| +      => new FunctionExpressionInvocation(function, argumentList(arguments));
 | 
|  
 | 
| -  static FunctionTypedFormalParameter functionTypedFormalParameter(TypeName returnType, String identifier, List<FormalParameter> parameters) => new FunctionTypedFormalParameter(null, null, returnType, identifier3(identifier), formalParameterList(parameters));
 | 
| +  static FunctionTypedFormalParameter functionTypedFormalParameter(TypeName returnType, String identifier, [List<FormalParameter> parameters])
 | 
| +      => new FunctionTypedFormalParameter(
 | 
| +          null,
 | 
| +          null,
 | 
| +          returnType,
 | 
| +          identifier3(identifier),
 | 
| +          formalParameterList(parameters));
 | 
|  
 | 
| -  static HideCombinator hideCombinator(List<SimpleIdentifier> identifiers) => new HideCombinator(TokenFactory.tokenFromString("hide"), list(identifiers));
 | 
| +  static HideCombinator hideCombinator(List<SimpleIdentifier> identifiers) => new HideCombinator(TokenFactory.tokenFromString("hide"), identifiers);
 | 
|  
 | 
| -  static HideCombinator hideCombinator2(List<String> identifiers) {
 | 
| -    List<SimpleIdentifier> identifierList = new List<SimpleIdentifier>();
 | 
| -    for (String identifier in identifiers) {
 | 
| -      identifierList.add(identifier3(identifier));
 | 
| -    }
 | 
| -    return new HideCombinator(TokenFactory.tokenFromString("hide"), identifierList);
 | 
| -  }
 | 
| +  static HideCombinator hideCombinator2(List<String> identifiers)
 | 
| +      => new HideCombinator(
 | 
| +          TokenFactory.tokenFromString("hide"),
 | 
| +          identifierList(identifiers));
 | 
|  
 | 
|    static PrefixedIdentifier identifier(SimpleIdentifier prefix, SimpleIdentifier identifier) => new PrefixedIdentifier(prefix, TokenFactory.tokenFromType(TokenType.PERIOD), identifier);
 | 
|  
 | 
| @@ -200,25 +270,56 @@ class AstFactory {
 | 
|  
 | 
|    static PrefixedIdentifier identifier5(String prefix, String identifier) => new PrefixedIdentifier(identifier3(prefix), TokenFactory.tokenFromType(TokenType.PERIOD), identifier3(identifier));
 | 
|  
 | 
| +  static List<SimpleIdentifier> identifierList(List<String> identifiers) {
 | 
| +    if (identifiers == null) {
 | 
| +      return null;
 | 
| +    }
 | 
| +    return identifiers.map((String identifier) => identifier3(identifier)).toList();
 | 
| +  }
 | 
| +
 | 
|    static IfStatement ifStatement(Expression condition, Statement thenStatement) => ifStatement2(condition, thenStatement, null);
 | 
|  
 | 
|    static IfStatement ifStatement2(Expression condition, Statement thenStatement, Statement elseStatement) => new IfStatement(TokenFactory.tokenFromKeyword(Keyword.IF), TokenFactory.tokenFromType(TokenType.OPEN_PAREN), condition, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), thenStatement, elseStatement == null ? null : TokenFactory.tokenFromKeyword(Keyword.ELSE), elseStatement);
 | 
|  
 | 
| -  static ImplementsClause implementsClause(List<TypeName> types) => new ImplementsClause(TokenFactory.tokenFromKeyword(Keyword.IMPLEMENTS), list(types));
 | 
| +  static ImplementsClause implementsClause(List<TypeName> types) => new ImplementsClause(TokenFactory.tokenFromKeyword(Keyword.IMPLEMENTS), types);
 | 
|  
 | 
| -  static ImportDirective importDirective(List<Annotation> metadata, String uri, bool isDeferred, String prefix, List<Combinator> combinators) => new ImportDirective(null, metadata, TokenFactory.tokenFromKeyword(Keyword.IMPORT), string2(uri), !isDeferred ? null : TokenFactory.tokenFromKeyword(Keyword.DEFERRED), prefix == null ? null : TokenFactory.tokenFromKeyword(Keyword.AS), prefix == null ? null : identifier3(prefix), list(combinators), TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
| +  static ImportDirective importDirective(List<Annotation> metadata, String uri, bool isDeferred, String prefix, [List<Combinator> combinators])
 | 
| +      => new ImportDirective(
 | 
| +          null,
 | 
| +          metadata,
 | 
| +          TokenFactory.tokenFromKeyword(Keyword.IMPORT),
 | 
| +          string2(uri),
 | 
| +          !isDeferred ? null : TokenFactory.tokenFromKeyword(Keyword.DEFERRED),
 | 
| +          prefix == null ? null : TokenFactory.tokenFromKeyword(Keyword.AS),
 | 
| +          prefix == null ? null : identifier3(prefix),
 | 
| +          combinators,
 | 
| +          TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
|  
 | 
| -  static ImportDirective importDirective2(String uri, bool isDeferred, String prefix, List<Combinator> combinators) => importDirective(new List<Annotation>(), uri, isDeferred, prefix, combinators);
 | 
| +  static ImportDirective importDirective2(String uri, bool isDeferred, String prefix, [List<Combinator> combinators])
 | 
| +      => importDirective(null, uri, isDeferred, prefix, combinators);
 | 
|  
 | 
| -  static ImportDirective importDirective3(String uri, String prefix, List<Combinator> combinators) => importDirective(new List<Annotation>(), uri, false, prefix, combinators);
 | 
| +  static ImportDirective importDirective3(String uri, String prefix, [List<Combinator> combinators])
 | 
| +      => importDirective(null, uri, false, prefix, combinators);
 | 
|  
 | 
|    static IndexExpression indexExpression(Expression array, Expression index) => new IndexExpression.forTarget(array, TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET), index, TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
 | 
|  
 | 
| -  static InstanceCreationExpression instanceCreationExpression(Keyword keyword, ConstructorName name, List<Expression> arguments) => new InstanceCreationExpression(keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), name, argumentList(arguments));
 | 
| +  static InstanceCreationExpression instanceCreationExpression(Keyword keyword, ConstructorName name, [List<Expression> arguments])
 | 
| +      => new InstanceCreationExpression(
 | 
| +          keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
 | 
| +          name,
 | 
| +          argumentList(arguments));
 | 
|  
 | 
| -  static InstanceCreationExpression instanceCreationExpression2(Keyword keyword, TypeName type, List<Expression> arguments) => instanceCreationExpression3(keyword, type, null, arguments);
 | 
| +  static InstanceCreationExpression instanceCreationExpression2(Keyword keyword, TypeName type, [List<Expression> arguments])
 | 
| +      => instanceCreationExpression3(keyword, type, null, arguments);
 | 
|  
 | 
| -  static InstanceCreationExpression instanceCreationExpression3(Keyword keyword, TypeName type, String identifier, List<Expression> arguments) => instanceCreationExpression(keyword, new ConstructorName(type, identifier == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD), identifier == null ? null : identifier3(identifier)), arguments);
 | 
| +  static InstanceCreationExpression instanceCreationExpression3(Keyword keyword, TypeName type, String identifier, [List<Expression> arguments])
 | 
| +      => instanceCreationExpression(
 | 
| +          keyword,
 | 
| +          new ConstructorName(
 | 
| +              type,
 | 
| +              identifier == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
 | 
| +              identifier == null ? null : identifier3(identifier)),
 | 
| +          arguments);
 | 
|  
 | 
|    static IntegerLiteral integer(int value) => new IntegerLiteral(TokenFactory.tokenFromTypeAndString(TokenType.INT, value.toString()), value);
 | 
|  
 | 
| @@ -240,31 +341,37 @@ class AstFactory {
 | 
|  
 | 
|    static LibraryDirective libraryDirective2(String libraryName) => libraryDirective(new List<Annotation>(), libraryIdentifier2([libraryName]));
 | 
|  
 | 
| -  static LibraryIdentifier libraryIdentifier(List<SimpleIdentifier> components) => new LibraryIdentifier(list(components));
 | 
| +  static LibraryIdentifier libraryIdentifier(List<SimpleIdentifier> components) => new LibraryIdentifier(components);
 | 
|  
 | 
|    static LibraryIdentifier libraryIdentifier2(List<String> components) {
 | 
| -    List<SimpleIdentifier> componentList = new List<SimpleIdentifier>();
 | 
| -    for (String component in components) {
 | 
| -      componentList.add(identifier3(component));
 | 
| -    }
 | 
| -    return new LibraryIdentifier(componentList);
 | 
| +    return new LibraryIdentifier(identifierList(components));
 | 
|    }
 | 
|  
 | 
|    static List list(List<Object> elements) {
 | 
| -    List elementList = new List();
 | 
| -    for (Object element in elements) {
 | 
| -      elementList.add(element);
 | 
| -    }
 | 
| -    return elementList;
 | 
| +    return elements;
 | 
|    }
 | 
|  
 | 
| -  static ListLiteral listLiteral(List<Expression> elements) => listLiteral2(null, null, elements);
 | 
| +  static ListLiteral listLiteral([List<Expression> elements])
 | 
| +      => listLiteral2(null, null, elements);
 | 
|  
 | 
| -  static ListLiteral listLiteral2(Keyword keyword, TypeArgumentList typeArguments, List<Expression> elements) => new ListLiteral(keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), typeArguments, TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET), list(elements), TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
 | 
| +  static ListLiteral listLiteral2(Keyword keyword, TypeArgumentList typeArguments, [List<Expression> elements])
 | 
| +      => new ListLiteral(
 | 
| +          keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
 | 
| +          typeArguments,
 | 
| +          TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET),
 | 
| +          elements,
 | 
| +          TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
 | 
|  
 | 
| -  static MapLiteral mapLiteral(Keyword keyword, TypeArgumentList typeArguments, List<MapLiteralEntry> entries) => new MapLiteral(keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), typeArguments, TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), list(entries), TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
| +  static MapLiteral mapLiteral(Keyword keyword, TypeArgumentList typeArguments, [List<MapLiteralEntry> entries])
 | 
| +      => new MapLiteral(
 | 
| +          keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
 | 
| +          typeArguments,
 | 
| +          TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
 | 
| +          entries,
 | 
| +          TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
|  
 | 
| -  static MapLiteral mapLiteral2(List<MapLiteralEntry> entries) => mapLiteral(null, null, entries);
 | 
| +  static MapLiteral mapLiteral2([List<MapLiteralEntry> entries])
 | 
| +      => mapLiteral(null, null, entries);
 | 
|  
 | 
|    static MapLiteralEntry mapLiteralEntry(String key, Expression value) => new MapLiteralEntry(string2(key), TokenFactory.tokenFromType(TokenType.COLON), value);
 | 
|  
 | 
| @@ -272,9 +379,15 @@ class AstFactory {
 | 
|  
 | 
|    static MethodDeclaration methodDeclaration2(Keyword modifier, TypeName returnType, Keyword property, Keyword operator, SimpleIdentifier name, FormalParameterList parameters, FunctionBody body) => new MethodDeclaration(null, null, null, modifier == null ? null : TokenFactory.tokenFromKeyword(modifier), returnType, property == null ? null : TokenFactory.tokenFromKeyword(property), operator == null ? null : TokenFactory.tokenFromKeyword(operator), name, parameters, body);
 | 
|  
 | 
| -  static MethodInvocation methodInvocation(Expression target, String methodName, List<Expression> arguments) => new MethodInvocation(target, target == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD), identifier3(methodName), argumentList(arguments));
 | 
| +  static MethodInvocation methodInvocation(Expression target, String methodName, [List<Expression> arguments])
 | 
| +      => new MethodInvocation(
 | 
| +          target,
 | 
| +          target == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
 | 
| +          identifier3(methodName),
 | 
| +          argumentList(arguments));
 | 
|  
 | 
| -  static MethodInvocation methodInvocation2(String methodName, List<Expression> arguments) => methodInvocation(null, methodName, arguments);
 | 
| +  static MethodInvocation methodInvocation2(String methodName, [List<Expression> arguments])
 | 
| +      => methodInvocation(null, methodName, arguments);
 | 
|  
 | 
|    static NamedExpression namedExpression(Label label, Expression expression) => new NamedExpression(label, expression);
 | 
|  
 | 
| @@ -308,9 +421,15 @@ class AstFactory {
 | 
|  
 | 
|    static PropertyAccess propertyAccess2(Expression target, String propertyName) => new PropertyAccess(target, TokenFactory.tokenFromType(TokenType.PERIOD), identifier3(propertyName));
 | 
|  
 | 
| -  static RedirectingConstructorInvocation redirectingConstructorInvocation(List<Expression> arguments) => redirectingConstructorInvocation2(null, arguments);
 | 
| +  static RedirectingConstructorInvocation redirectingConstructorInvocation([List<Expression> arguments])
 | 
| +      => redirectingConstructorInvocation2(null, arguments);
 | 
|  
 | 
| -  static RedirectingConstructorInvocation redirectingConstructorInvocation2(String constructorName, List<Expression> arguments) => new RedirectingConstructorInvocation(TokenFactory.tokenFromKeyword(Keyword.THIS), constructorName == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD), constructorName == null ? null : identifier3(constructorName), argumentList(arguments));
 | 
| +  static RedirectingConstructorInvocation redirectingConstructorInvocation2(String constructorName, [List<Expression> arguments])
 | 
| +      => new RedirectingConstructorInvocation(
 | 
| +          TokenFactory.tokenFromKeyword(Keyword.THIS),
 | 
| +          constructorName == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
 | 
| +          constructorName == null ? null : identifier3(constructorName),
 | 
| +          argumentList(arguments));
 | 
|  
 | 
|    static RethrowExpression rethrowExpression() => new RethrowExpression(TokenFactory.tokenFromKeyword(Keyword.RETHROW));
 | 
|  
 | 
| @@ -320,15 +439,12 @@ class AstFactory {
 | 
|  
 | 
|    static ScriptTag scriptTag(String scriptTag) => new ScriptTag(TokenFactory.tokenFromString(scriptTag));
 | 
|  
 | 
| -  static ShowCombinator showCombinator(List<SimpleIdentifier> identifiers) => new ShowCombinator(TokenFactory.tokenFromString("show"), list(identifiers));
 | 
| +  static ShowCombinator showCombinator(List<SimpleIdentifier> identifiers) => new ShowCombinator(TokenFactory.tokenFromString("show"), identifiers);
 | 
|  
 | 
| -  static ShowCombinator showCombinator2(List<String> identifiers) {
 | 
| -    List<SimpleIdentifier> identifierList = new List<SimpleIdentifier>();
 | 
| -    for (String identifier in identifiers) {
 | 
| -      identifierList.add(identifier3(identifier));
 | 
| -    }
 | 
| -    return new ShowCombinator(TokenFactory.tokenFromString("show"), identifierList);
 | 
| -  }
 | 
| +  static ShowCombinator showCombinator2(List<String> identifiers)
 | 
| +      => new ShowCombinator(
 | 
| +          TokenFactory.tokenFromString("show"),
 | 
| +          identifierList(identifiers));
 | 
|  
 | 
|    static SimpleFormalParameter simpleFormalParameter(Keyword keyword, String parameterName) => simpleFormalParameter2(keyword, null, parameterName);
 | 
|  
 | 
| @@ -338,25 +454,32 @@ class AstFactory {
 | 
|  
 | 
|    static SimpleFormalParameter simpleFormalParameter4(TypeName type, String parameterName) => simpleFormalParameter2(null, type, parameterName);
 | 
|  
 | 
| -  static StringInterpolation string(List<InterpolationElement> elements) => new StringInterpolation(list(elements));
 | 
| +  static StringInterpolation string([List<InterpolationElement> elements])
 | 
| +      => new StringInterpolation(elements);
 | 
|  
 | 
|    static SimpleStringLiteral string2(String content) => new SimpleStringLiteral(TokenFactory.tokenFromString("'$content'"), content);
 | 
|  
 | 
| -  static SuperConstructorInvocation superConstructorInvocation(List<Expression> arguments) => superConstructorInvocation2(null, arguments);
 | 
| +  static SuperConstructorInvocation superConstructorInvocation([List<Expression> arguments])
 | 
| +      => superConstructorInvocation2(null, arguments);
 | 
|  
 | 
| -  static SuperConstructorInvocation superConstructorInvocation2(String name, List<Expression> arguments) => new SuperConstructorInvocation(TokenFactory.tokenFromKeyword(Keyword.SUPER), name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD), name == null ? null : identifier3(name), argumentList(arguments));
 | 
| +  static SuperConstructorInvocation superConstructorInvocation2(String name, [List<Expression> arguments])
 | 
| +      => new SuperConstructorInvocation(
 | 
| +          TokenFactory.tokenFromKeyword(Keyword.SUPER),
 | 
| +          name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
 | 
| +          name == null ? null : identifier3(name),
 | 
| +          argumentList(arguments));
 | 
|  
 | 
|    static SuperExpression superExpression() => new SuperExpression(TokenFactory.tokenFromKeyword(Keyword.SUPER));
 | 
|  
 | 
|    static SwitchCase switchCase(Expression expression, List<Statement> statements) => switchCase2(new List<Label>(), expression, statements);
 | 
|  
 | 
| -  static SwitchCase switchCase2(List<Label> labels, Expression expression, List<Statement> statements) => new SwitchCase(labels, TokenFactory.tokenFromKeyword(Keyword.CASE), expression, TokenFactory.tokenFromType(TokenType.COLON), list(statements));
 | 
| +  static SwitchCase switchCase2(List<Label> labels, Expression expression, List<Statement> statements) => new SwitchCase(labels, TokenFactory.tokenFromKeyword(Keyword.CASE), expression, TokenFactory.tokenFromType(TokenType.COLON), statements);
 | 
|  
 | 
| -  static SwitchDefault switchDefault(List<Label> labels, List<Statement> statements) => new SwitchDefault(labels, TokenFactory.tokenFromKeyword(Keyword.DEFAULT), TokenFactory.tokenFromType(TokenType.COLON), list(statements));
 | 
| +  static SwitchDefault switchDefault(List<Label> labels, List<Statement> statements) => new SwitchDefault(labels, TokenFactory.tokenFromKeyword(Keyword.DEFAULT), TokenFactory.tokenFromType(TokenType.COLON), statements);
 | 
|  
 | 
|    static SwitchDefault switchDefault2(List<Statement> statements) => switchDefault(new List<Label>(), statements);
 | 
|  
 | 
| -  static SwitchStatement switchStatement(Expression expression, List<SwitchMember> members) => new SwitchStatement(TokenFactory.tokenFromKeyword(Keyword.SWITCH), TokenFactory.tokenFromType(TokenType.OPEN_PAREN), expression, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), list(members), TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
| +  static SwitchStatement switchStatement(Expression expression, List<SwitchMember> members) => new SwitchStatement(TokenFactory.tokenFromKeyword(Keyword.SWITCH), TokenFactory.tokenFromType(TokenType.OPEN_PAREN), expression, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET), members, TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 | 
|  
 | 
|    static SymbolLiteral symbolLiteral(List<String> components) {
 | 
|      List<Token> identifierList = new List<Token>();
 | 
| @@ -366,9 +489,17 @@ class AstFactory {
 | 
|      return new SymbolLiteral(TokenFactory.tokenFromType(TokenType.HASH), identifierList);
 | 
|    }
 | 
|  
 | 
| -  static BlockFunctionBody syncBlockFunctionBody(List<Statement> statements) => new BlockFunctionBody(TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "sync"), null, block(statements));
 | 
| +  static BlockFunctionBody syncBlockFunctionBody([List<Statement> statements])
 | 
| +      => new BlockFunctionBody(
 | 
| +          TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "sync"),
 | 
| +          null,
 | 
| +          block(statements));
 | 
|  
 | 
| -  static BlockFunctionBody syncGeneratorBlockFunctionBody(List<Statement> statements) => new BlockFunctionBody(TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "sync"), TokenFactory.tokenFromType(TokenType.STAR), block(statements));
 | 
| +  static BlockFunctionBody syncGeneratorBlockFunctionBody([List<Statement> statements])
 | 
| +     => new BlockFunctionBody(
 | 
| +         TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "sync"),
 | 
| +          TokenFactory.tokenFromType(TokenType.STAR),
 | 
| +          block(statements));
 | 
|  
 | 
|    static ThisExpression thisExpression() => new ThisExpression(TokenFactory.tokenFromKeyword(Keyword.THIS));
 | 
|  
 | 
| @@ -382,24 +513,30 @@ class AstFactory {
 | 
|  
 | 
|    static TryStatement tryStatement(Block body, Block finallyClause) => tryStatement3(body, new List<CatchClause>(), finallyClause);
 | 
|  
 | 
| -  static TryStatement tryStatement2(Block body, List<CatchClause> catchClauses) => tryStatement3(body, list(catchClauses), null);
 | 
| +  static TryStatement tryStatement2(Block body, List<CatchClause> catchClauses) => tryStatement3(body, catchClauses, null);
 | 
|  
 | 
|    static TryStatement tryStatement3(Block body, List<CatchClause> catchClauses, Block finallyClause) => new TryStatement(TokenFactory.tokenFromKeyword(Keyword.TRY), body, catchClauses, finallyClause == null ? null : TokenFactory.tokenFromKeyword(Keyword.FINALLY), finallyClause);
 | 
|  
 | 
|    static FunctionTypeAlias typeAlias(TypeName returnType, String name, TypeParameterList typeParameters, FormalParameterList parameters) => new FunctionTypeAlias(null, null, TokenFactory.tokenFromKeyword(Keyword.TYPEDEF), returnType, identifier3(name), typeParameters, parameters, TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
|  
 | 
| -  static TypeArgumentList typeArgumentList(List<TypeName> typeNames) => new TypeArgumentList(TokenFactory.tokenFromType(TokenType.LT), list(typeNames), TokenFactory.tokenFromType(TokenType.GT));
 | 
| +  static TypeArgumentList typeArgumentList(List<TypeName> typeNames) {
 | 
| +    if (typeNames == null || typeNames.length == 0) {
 | 
| +      return null;
 | 
| +    }
 | 
| +    return new TypeArgumentList(
 | 
| +        TokenFactory.tokenFromType(TokenType.LT),
 | 
| +        typeNames,
 | 
| +        TokenFactory.tokenFromType(TokenType.GT));
 | 
| +  }
 | 
|  
 | 
|    /**
 | 
| -   * Create a type name whose name has been resolved to the given element and whose type has been
 | 
| -   * resolved to the type of the given element.
 | 
| -   *
 | 
| -   * <b>Note:</b> This method does not correctly handle class elements that have type parameters.
 | 
| +   * Create a type name whose name has been resolved to the given [element] and
 | 
| +   * whose type has been resolved to the type of the given element.
 | 
|     *
 | 
| -   * @param element the element defining the type represented by the type name
 | 
| -   * @return the type name that was created
 | 
| +   * <b>Note:</b> This method does not correctly handle class elements that have
 | 
| +   * type parameters.
 | 
|     */
 | 
| -  static TypeName typeName(ClassElement element, List<TypeName> arguments) {
 | 
| +  static TypeName typeName(ClassElement element, [List<TypeName> arguments]) {
 | 
|      SimpleIdentifier name = identifier3(element.name);
 | 
|      name.staticElement = element;
 | 
|      TypeName typeName = typeName3(name, arguments);
 | 
| @@ -407,37 +544,35 @@ class AstFactory {
 | 
|      return typeName;
 | 
|    }
 | 
|  
 | 
| -  static TypeName typeName3(Identifier name, List<TypeName> arguments) {
 | 
| -    if (arguments.length == 0) {
 | 
| -      return new TypeName(name, null);
 | 
| -    }
 | 
| -    return new TypeName(name, typeArgumentList(arguments));
 | 
| -  }
 | 
| +  static TypeName typeName3(Identifier name, [List<TypeName> arguments])
 | 
| +      => new TypeName(name, typeArgumentList(arguments));
 | 
|  
 | 
| -  static TypeName typeName4(String name, List<TypeName> arguments) {
 | 
| -    if (arguments.length == 0) {
 | 
| -      return new TypeName(identifier3(name), null);
 | 
| -    }
 | 
| -    return new TypeName(identifier3(name), typeArgumentList(arguments));
 | 
| -  }
 | 
| +  static TypeName typeName4(String name, [List<TypeName> arguments])
 | 
| +      => new TypeName(identifier3(name), typeArgumentList(arguments));
 | 
|  
 | 
|    static TypeParameter typeParameter(String name) => new TypeParameter(null, null, identifier3(name), null, null);
 | 
|  
 | 
|    static TypeParameter typeParameter2(String name, TypeName bound) => new TypeParameter(null, null, identifier3(name), TokenFactory.tokenFromKeyword(Keyword.EXTENDS), bound);
 | 
|  
 | 
| -  static TypeParameterList typeParameterList(List<String> typeNames) {
 | 
| -    List<TypeParameter> typeParameters = new List<TypeParameter>();
 | 
| -    for (String typeName in typeNames) {
 | 
| -      typeParameters.add(typeParameter(typeName));
 | 
| +  static TypeParameterList typeParameterList([List<String> typeNames]) {
 | 
| +    List<TypeParameter> typeParameters = null;
 | 
| +    if (typeNames != null && !typeNames.isEmpty) {
 | 
| +      typeParameters = new List<TypeParameter>();
 | 
| +      for (String typeName in typeNames) {
 | 
| +        typeParameters.add(typeParameter(typeName));
 | 
| +      }
 | 
|      }
 | 
| -    return new TypeParameterList(TokenFactory.tokenFromType(TokenType.LT), typeParameters, TokenFactory.tokenFromType(TokenType.GT));
 | 
| +    return new TypeParameterList(
 | 
| +        TokenFactory.tokenFromType(TokenType.LT),
 | 
| +        typeParameters,
 | 
| +        TokenFactory.tokenFromType(TokenType.GT));
 | 
|    }
 | 
|  
 | 
|    static VariableDeclaration variableDeclaration(String name) => new VariableDeclaration(null, null, identifier3(name), null, null);
 | 
|  
 | 
|    static VariableDeclaration variableDeclaration2(String name, Expression initializer) => new VariableDeclaration(null, null, identifier3(name), TokenFactory.tokenFromType(TokenType.EQ), initializer);
 | 
|  
 | 
| -  static VariableDeclarationList variableDeclarationList(Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new VariableDeclarationList(null, null, keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), type, list(variables));
 | 
| +  static VariableDeclarationList variableDeclarationList(Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new VariableDeclarationList(null, null, keyword == null ? null : TokenFactory.tokenFromKeyword(keyword), type, variables);
 | 
|  
 | 
|    static VariableDeclarationList variableDeclarationList2(Keyword keyword, List<VariableDeclaration> variables) => variableDeclarationList(keyword, null, variables);
 | 
|  
 | 
| @@ -447,7 +582,7 @@ class AstFactory {
 | 
|  
 | 
|    static WhileStatement whileStatement(Expression condition, Statement body) => new WhileStatement(TokenFactory.tokenFromKeyword(Keyword.WHILE), TokenFactory.tokenFromType(TokenType.OPEN_PAREN), condition, TokenFactory.tokenFromType(TokenType.CLOSE_PAREN), body);
 | 
|  
 | 
| -  static WithClause withClause(List<TypeName> types) => new WithClause(TokenFactory.tokenFromKeyword(Keyword.WITH), list(types));
 | 
| +  static WithClause withClause(List<TypeName> types) => new WithClause(TokenFactory.tokenFromKeyword(Keyword.WITH), types);
 | 
|  
 | 
|    static YieldStatement yieldEachStatement(Expression expression) => new YieldStatement(TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "yield"), TokenFactory.tokenFromType(TokenType.STAR), expression, TokenFactory.tokenFromType(TokenType.SEMICOLON));
 | 
|  
 | 
| 
 |