| OLD | NEW | 
|---|
| 1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 library analyzer.src.generated.parser; | 5 library analyzer.src.generated.parser; | 
| 6 | 6 | 
| 7 import 'dart:collection'; | 7 import 'dart:collection'; | 
| 8 import "dart:math" as math; | 8 import "dart:math" as math; | 
| 9 | 9 | 
| 10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; | 
| 11 import 'package:analyzer/dart/ast/token.dart'; | 11 import 'package:analyzer/dart/ast/token.dart'; | 
| 12 import 'package:analyzer/dart/ast/visitor.dart'; |  | 
| 13 import 'package:analyzer/src/dart/ast/ast.dart'; | 12 import 'package:analyzer/src/dart/ast/ast.dart'; | 
| 14 import 'package:analyzer/src/dart/ast/token.dart'; | 13 import 'package:analyzer/src/dart/ast/token.dart'; | 
| 15 import 'package:analyzer/src/dart/ast/utilities.dart'; |  | 
| 16 import 'package:analyzer/src/dart/scanner/reader.dart'; | 14 import 'package:analyzer/src/dart/scanner/reader.dart'; | 
| 17 import 'package:analyzer/src/dart/scanner/scanner.dart'; | 15 import 'package:analyzer/src/dart/scanner/scanner.dart'; | 
| 18 import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine; | 16 import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine; | 
| 19 import 'package:analyzer/src/generated/error.dart'; | 17 import 'package:analyzer/src/generated/error.dart'; | 
| 20 import 'package:analyzer/src/generated/generated/shared_messages.dart' | 18 import 'package:analyzer/src/generated/generated/shared_messages.dart' | 
| 21     as shared_messages; | 19     as shared_messages; | 
| 22 import 'package:analyzer/src/generated/java_core.dart'; | 20 import 'package:analyzer/src/generated/java_core.dart'; | 
| 23 import 'package:analyzer/src/generated/java_engine.dart'; | 21 import 'package:analyzer/src/generated/java_engine.dart'; | 
| 24 import 'package:analyzer/src/generated/source.dart'; | 22 import 'package:analyzer/src/generated/source.dart'; | 
| 25 import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap; |  | 
| 26 import 'package:analyzer/src/generated/utilities_dart.dart'; | 23 import 'package:analyzer/src/generated/utilities_dart.dart'; | 
| 27 | 24 | 
| 28 export 'package:analyzer/src/dart/ast/utilities.dart' show ResolutionCopier; | 25 export 'package:analyzer/src/dart/ast/utilities.dart' show ResolutionCopier; | 
| 29 | 26 | 
| 30 Map<String, MethodTrampoline> methodTable_Parser = <String, MethodTrampoline>{ | 27 Map<String, MethodTrampoline> methodTable_Parser = <String, MethodTrampoline>{ | 
| 31   'parseCompilationUnit_1': new MethodTrampoline( | 28   'parseCompilationUnit_1': new MethodTrampoline( | 
| 32       1, (Parser target, arg0) => target.parseCompilationUnit(arg0)), | 29       1, (Parser target, arg0) => target.parseCompilationUnit(arg0)), | 
| 33   'parseDirectives_1': new MethodTrampoline( | 30   'parseDirectives_1': new MethodTrampoline( | 
| 34       1, (Parser target, arg0) => target.parseDirectives(arg0)), | 31       1, (Parser target, arg0) => target.parseDirectives(arg0)), | 
| 35   'parseExpression_1': new MethodTrampoline( | 32   'parseExpression_1': new MethodTrampoline( | 
| (...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 527    */ | 524    */ | 
| 528   final TypeName type; | 525   final TypeName type; | 
| 529 | 526 | 
| 530   /** | 527   /** | 
| 531    * Initialize a newly created holder with the given [keyword] and [type]. | 528    * Initialize a newly created holder with the given [keyword] and [type]. | 
| 532    */ | 529    */ | 
| 533   FinalConstVarOrType(this.keyword, this.type); | 530   FinalConstVarOrType(this.keyword, this.type); | 
| 534 } | 531 } | 
| 535 | 532 | 
| 536 /** | 533 /** | 
| 537  * A dispatcher that will invoke the right parse method when re-parsing a |  | 
| 538  * specified child of the visited node. All of the methods in this class assume |  | 
| 539  * that the parser is positioned to parse the replacement for the node. All of |  | 
| 540  * the methods will throw an [IncrementalParseException] if the node could not |  | 
| 541  * be parsed for some reason. |  | 
| 542  */ |  | 
| 543 @deprecated |  | 
| 544 class IncrementalParseDispatcher implements AstVisitor<AstNode> { |  | 
| 545   /** |  | 
| 546    * The parser used to parse the replacement for the node. |  | 
| 547    */ |  | 
| 548   final Parser _parser; |  | 
| 549 |  | 
| 550   /** |  | 
| 551    * The node that is to be replaced. |  | 
| 552    */ |  | 
| 553   final AstNode _oldNode; |  | 
| 554 |  | 
| 555   /** |  | 
| 556    * Initialize a newly created dispatcher to parse a single node that will |  | 
| 557    * use the [_parser] to replace the [_oldNode]. |  | 
| 558    */ |  | 
| 559   IncrementalParseDispatcher(this._parser, this._oldNode); |  | 
| 560 |  | 
| 561   @override |  | 
| 562   AstNode visitAdjacentStrings(AdjacentStrings node) { |  | 
| 563     if (node.strings.contains(_oldNode)) { |  | 
| 564       return _parser.parseStringLiteral(); |  | 
| 565     } |  | 
| 566     return _notAChild(node); |  | 
| 567   } |  | 
| 568 |  | 
| 569   @override |  | 
| 570   AstNode visitAnnotation(Annotation node) { |  | 
| 571     if (identical(_oldNode, node.name)) { |  | 
| 572       throw new InsufficientContextException(); |  | 
| 573     } else if (identical(_oldNode, node.constructorName)) { |  | 
| 574       throw new InsufficientContextException(); |  | 
| 575     } else if (identical(_oldNode, node.arguments)) { |  | 
| 576       return _parser.parseArgumentList(); |  | 
| 577     } |  | 
| 578     return _notAChild(node); |  | 
| 579   } |  | 
| 580 |  | 
| 581   @override |  | 
| 582   AstNode visitArgumentList(ArgumentList node) { |  | 
| 583     if (node.arguments.contains(_oldNode)) { |  | 
| 584       return _parser.parseArgument(); |  | 
| 585     } |  | 
| 586     return _notAChild(node); |  | 
| 587   } |  | 
| 588 |  | 
| 589   @override |  | 
| 590   AstNode visitAsExpression(AsExpression node) { |  | 
| 591     if (identical(_oldNode, node.expression)) { |  | 
| 592       return _parser.parseBitwiseOrExpression(); |  | 
| 593     } else if (identical(_oldNode, node.type)) { |  | 
| 594       return _parser.parseTypeName(); |  | 
| 595     } |  | 
| 596     return _notAChild(node); |  | 
| 597   } |  | 
| 598 |  | 
| 599   @override |  | 
| 600   AstNode visitAssertStatement(AssertStatement node) { |  | 
| 601     if (identical(_oldNode, node.condition)) { |  | 
| 602       return _parser.parseExpression2(); |  | 
| 603     } |  | 
| 604     if (identical(_oldNode, node.message)) { |  | 
| 605       return _parser.parseExpression2(); |  | 
| 606     } |  | 
| 607     return _notAChild(node); |  | 
| 608   } |  | 
| 609 |  | 
| 610   @override |  | 
| 611   AstNode visitAssignmentExpression(AssignmentExpression node) { |  | 
| 612     if (identical(_oldNode, node.leftHandSide)) { |  | 
| 613       // TODO(brianwilkerson) If the assignment is part of a cascade section, |  | 
| 614       // then we don't have a single parse method that will work. |  | 
| 615       // Otherwise, we can parse a conditional expression, but need to ensure |  | 
| 616       // that the resulting expression is assignable. |  | 
| 617 //      return parser.parseConditionalExpression(); |  | 
| 618       throw new InsufficientContextException(); |  | 
| 619     } else if (identical(_oldNode, node.rightHandSide)) { |  | 
| 620       if (_isCascadeAllowedInAssignment(node)) { |  | 
| 621         return _parser.parseExpression2(); |  | 
| 622       } |  | 
| 623       return _parser.parseExpressionWithoutCascade(); |  | 
| 624     } |  | 
| 625     return _notAChild(node); |  | 
| 626   } |  | 
| 627 |  | 
| 628   @override |  | 
| 629   AstNode visitAwaitExpression(AwaitExpression node) { |  | 
| 630     if (identical(_oldNode, node.expression)) { |  | 
| 631       // TODO(brianwilkerson) Depending on precedence, |  | 
| 632       // this might not be sufficient. |  | 
| 633       return _parser.parseExpression2(); |  | 
| 634     } |  | 
| 635     return _notAChild(node); |  | 
| 636   } |  | 
| 637 |  | 
| 638   @override |  | 
| 639   AstNode visitBinaryExpression(BinaryExpression node) { |  | 
| 640     if (identical(_oldNode, node.leftOperand)) { |  | 
| 641       throw new InsufficientContextException(); |  | 
| 642     } else if (identical(_oldNode, node.rightOperand)) { |  | 
| 643       throw new InsufficientContextException(); |  | 
| 644     } |  | 
| 645     return _notAChild(node); |  | 
| 646   } |  | 
| 647 |  | 
| 648   @override |  | 
| 649   AstNode visitBlock(Block node) { |  | 
| 650     if (node.statements.contains(_oldNode)) { |  | 
| 651       return _parser.parseStatement2(); |  | 
| 652     } |  | 
| 653     return _notAChild(node); |  | 
| 654   } |  | 
| 655 |  | 
| 656   @override |  | 
| 657   AstNode visitBlockFunctionBody(BlockFunctionBody node) { |  | 
| 658     if (identical(_oldNode, node.block)) { |  | 
| 659       return _parser.parseBlock(); |  | 
| 660     } |  | 
| 661     return _notAChild(node); |  | 
| 662   } |  | 
| 663 |  | 
| 664   @override |  | 
| 665   AstNode visitBooleanLiteral(BooleanLiteral node) => _notAChild(node); |  | 
| 666 |  | 
| 667   @override |  | 
| 668   AstNode visitBreakStatement(BreakStatement node) { |  | 
| 669     if (identical(_oldNode, node.label)) { |  | 
| 670       return _parser.parseSimpleIdentifier(); |  | 
| 671     } |  | 
| 672     return _notAChild(node); |  | 
| 673   } |  | 
| 674 |  | 
| 675   @override |  | 
| 676   AstNode visitCascadeExpression(CascadeExpression node) { |  | 
| 677     if (identical(_oldNode, node.target)) { |  | 
| 678       return _parser.parseConditionalExpression(); |  | 
| 679     } else if (node.cascadeSections.contains(_oldNode)) { |  | 
| 680       throw new InsufficientContextException(); |  | 
| 681     } |  | 
| 682     return _notAChild(node); |  | 
| 683   } |  | 
| 684 |  | 
| 685   @override |  | 
| 686   AstNode visitCatchClause(CatchClause node) { |  | 
| 687     if (identical(_oldNode, node.exceptionType)) { |  | 
| 688       return _parser.parseTypeName(); |  | 
| 689     } else if (identical(_oldNode, node.exceptionParameter)) { |  | 
| 690       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 691     } else if (identical(_oldNode, node.stackTraceParameter)) { |  | 
| 692       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 693     } else if (identical(_oldNode, node.body)) { |  | 
| 694       return _parser.parseBlock(); |  | 
| 695     } |  | 
| 696     return _notAChild(node); |  | 
| 697   } |  | 
| 698 |  | 
| 699   @override |  | 
| 700   AstNode visitClassDeclaration(ClassDeclaration node) { |  | 
| 701     if (identical(_oldNode, node.documentationComment)) { |  | 
| 702       throw new InsufficientContextException(); |  | 
| 703     } else if (node.metadata.contains(_oldNode)) { |  | 
| 704       return _parser.parseAnnotation(); |  | 
| 705     } else if (identical(_oldNode, node.name)) { |  | 
| 706       // Changing the class name changes whether a member is interpreted as a |  | 
| 707       // constructor or not, so we'll just have to re-parse the entire class. |  | 
| 708       throw new InsufficientContextException(); |  | 
| 709     } else if (identical(_oldNode, node.typeParameters)) { |  | 
| 710       return _parser.parseTypeParameterList(); |  | 
| 711     } else if (identical(_oldNode, node.extendsClause)) { |  | 
| 712       return _parser.parseExtendsClause(); |  | 
| 713     } else if (identical(_oldNode, node.withClause)) { |  | 
| 714       return _parser.parseWithClause(); |  | 
| 715     } else if (identical(_oldNode, node.implementsClause)) { |  | 
| 716       return _parser.parseImplementsClause(); |  | 
| 717     } else if (node.members.contains(_oldNode)) { |  | 
| 718       ClassMember member = _parser.parseClassMember(node.name.name); |  | 
| 719       if (member == null) { |  | 
| 720         throw new InsufficientContextException(); |  | 
| 721       } |  | 
| 722       return member; |  | 
| 723     } |  | 
| 724     return _notAChild(node); |  | 
| 725   } |  | 
| 726 |  | 
| 727   @override |  | 
| 728   AstNode visitClassTypeAlias(ClassTypeAlias node) { |  | 
| 729     if (identical(_oldNode, node.documentationComment)) { |  | 
| 730       throw new InsufficientContextException(); |  | 
| 731     } else if (node.metadata.contains(_oldNode)) { |  | 
| 732       return _parser.parseAnnotation(); |  | 
| 733     } else if (identical(_oldNode, node.name)) { |  | 
| 734       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 735     } else if (identical(_oldNode, node.typeParameters)) { |  | 
| 736       return _parser.parseTypeParameterList(); |  | 
| 737     } else if (identical(_oldNode, node.superclass)) { |  | 
| 738       return _parser.parseTypeName(); |  | 
| 739     } else if (identical(_oldNode, node.withClause)) { |  | 
| 740       return _parser.parseWithClause(); |  | 
| 741     } else if (identical(_oldNode, node.implementsClause)) { |  | 
| 742       return _parser.parseImplementsClause(); |  | 
| 743     } |  | 
| 744     return _notAChild(node); |  | 
| 745   } |  | 
| 746 |  | 
| 747   @override |  | 
| 748   AstNode visitComment(Comment node) { |  | 
| 749     throw new InsufficientContextException(); |  | 
| 750   } |  | 
| 751 |  | 
| 752   @override |  | 
| 753   AstNode visitCommentReference(CommentReference node) { |  | 
| 754     if (identical(_oldNode, node.identifier)) { |  | 
| 755       return _parser.parsePrefixedIdentifier(); |  | 
| 756     } |  | 
| 757     return _notAChild(node); |  | 
| 758   } |  | 
| 759 |  | 
| 760   @override |  | 
| 761   AstNode visitCompilationUnit(CompilationUnit node) { |  | 
| 762     throw new InsufficientContextException(); |  | 
| 763   } |  | 
| 764 |  | 
| 765   @override |  | 
| 766   AstNode visitConditionalExpression(ConditionalExpression node) { |  | 
| 767     if (identical(_oldNode, node.condition)) { |  | 
| 768       return _parser.parseIfNullExpression(); |  | 
| 769     } else if (identical(_oldNode, node.thenExpression)) { |  | 
| 770       return _parser.parseExpressionWithoutCascade(); |  | 
| 771     } else if (identical(_oldNode, node.elseExpression)) { |  | 
| 772       return _parser.parseExpressionWithoutCascade(); |  | 
| 773     } |  | 
| 774     return _notAChild(node); |  | 
| 775   } |  | 
| 776 |  | 
| 777   @override |  | 
| 778   AstNode visitConfiguration(Configuration node) { |  | 
| 779     if (identical(_oldNode, node.name)) { |  | 
| 780       throw new InsufficientContextException(); |  | 
| 781     } else if (identical(_oldNode, node.value)) { |  | 
| 782       return _parser.parseStringLiteral(); |  | 
| 783     } else if (identical(_oldNode, node.libraryUri)) { |  | 
| 784       return _parser.parseStringLiteral(); |  | 
| 785     } |  | 
| 786     return _notAChild(node); |  | 
| 787   } |  | 
| 788 |  | 
| 789   @override |  | 
| 790   AstNode visitConstructorDeclaration(ConstructorDeclaration node) { |  | 
| 791     if (identical(_oldNode, node.documentationComment)) { |  | 
| 792       throw new InsufficientContextException(); |  | 
| 793     } else if (node.metadata.contains(_oldNode)) { |  | 
| 794       return _parser.parseAnnotation(); |  | 
| 795     } else if (identical(_oldNode, node.returnType)) { |  | 
| 796       throw new InsufficientContextException(); |  | 
| 797     } else if (identical(_oldNode, node.name)) { |  | 
| 798       throw new InsufficientContextException(); |  | 
| 799     } else if (identical(_oldNode, node.parameters)) { |  | 
| 800       return _parser.parseFormalParameterList(); |  | 
| 801     } else if (identical(_oldNode, node.redirectedConstructor)) { |  | 
| 802       throw new InsufficientContextException(); |  | 
| 803     } else if (node.initializers.contains(_oldNode)) { |  | 
| 804       throw new InsufficientContextException(); |  | 
| 805     } else if (identical(_oldNode, node.body)) { |  | 
| 806       throw new InsufficientContextException(); |  | 
| 807     } |  | 
| 808     return _notAChild(node); |  | 
| 809   } |  | 
| 810 |  | 
| 811   @override |  | 
| 812   AstNode visitConstructorFieldInitializer(ConstructorFieldInitializer node) { |  | 
| 813     if (identical(_oldNode, node.fieldName)) { |  | 
| 814       return _parser.parseSimpleIdentifier(); |  | 
| 815     } else if (identical(_oldNode, node.expression)) { |  | 
| 816       throw new InsufficientContextException(); |  | 
| 817     } |  | 
| 818     return _notAChild(node); |  | 
| 819   } |  | 
| 820 |  | 
| 821   @override |  | 
| 822   AstNode visitConstructorName(ConstructorName node) { |  | 
| 823     if (identical(_oldNode, node.type)) { |  | 
| 824       return _parser.parseTypeName(); |  | 
| 825     } else if (identical(_oldNode, node.name)) { |  | 
| 826       return _parser.parseSimpleIdentifier(); |  | 
| 827     } |  | 
| 828     return _notAChild(node); |  | 
| 829   } |  | 
| 830 |  | 
| 831   @override |  | 
| 832   AstNode visitContinueStatement(ContinueStatement node) { |  | 
| 833     if (identical(_oldNode, node.label)) { |  | 
| 834       return _parser.parseSimpleIdentifier(); |  | 
| 835     } |  | 
| 836     return _notAChild(node); |  | 
| 837   } |  | 
| 838 |  | 
| 839   @override |  | 
| 840   AstNode visitDeclaredIdentifier(DeclaredIdentifier node) { |  | 
| 841     if (identical(_oldNode, node.documentationComment)) { |  | 
| 842       throw new InsufficientContextException(); |  | 
| 843     } else if (node.metadata.contains(_oldNode)) { |  | 
| 844       return _parser.parseAnnotation(); |  | 
| 845     } else if (identical(_oldNode, node.type)) { |  | 
| 846       throw new InsufficientContextException(); |  | 
| 847     } else if (identical(_oldNode, node.identifier)) { |  | 
| 848       return _parser.parseSimpleIdentifier(); |  | 
| 849     } |  | 
| 850     return _notAChild(node); |  | 
| 851   } |  | 
| 852 |  | 
| 853   @override |  | 
| 854   AstNode visitDefaultFormalParameter(DefaultFormalParameter node) { |  | 
| 855     if (identical(_oldNode, node.parameter)) { |  | 
| 856       return _parser.parseNormalFormalParameter(); |  | 
| 857     } else if (identical(_oldNode, node.defaultValue)) { |  | 
| 858       return _parser.parseExpression2(); |  | 
| 859     } |  | 
| 860     return _notAChild(node); |  | 
| 861   } |  | 
| 862 |  | 
| 863   @override |  | 
| 864   AstNode visitDoStatement(DoStatement node) { |  | 
| 865     if (identical(_oldNode, node.body)) { |  | 
| 866       return _parser.parseStatement2(); |  | 
| 867     } else if (identical(_oldNode, node.condition)) { |  | 
| 868       return _parser.parseExpression2(); |  | 
| 869     } |  | 
| 870     return _notAChild(node); |  | 
| 871   } |  | 
| 872 |  | 
| 873   @override |  | 
| 874   AstNode visitDottedName(DottedName node) { |  | 
| 875     if (node.components.contains(_oldNode)) { |  | 
| 876       throw new InsufficientContextException(); |  | 
| 877     } |  | 
| 878     return _notAChild(node); |  | 
| 879   } |  | 
| 880 |  | 
| 881   @override |  | 
| 882   AstNode visitDoubleLiteral(DoubleLiteral node) => _notAChild(node); |  | 
| 883 |  | 
| 884   @override |  | 
| 885   AstNode visitEmptyFunctionBody(EmptyFunctionBody node) => _notAChild(node); |  | 
| 886 |  | 
| 887   @override |  | 
| 888   AstNode visitEmptyStatement(EmptyStatement node) => _notAChild(node); |  | 
| 889 |  | 
| 890   @override |  | 
| 891   AstNode visitEnumConstantDeclaration(EnumConstantDeclaration node) { |  | 
| 892     if (identical(_oldNode, node.documentationComment)) { |  | 
| 893       throw new InsufficientContextException(); |  | 
| 894     } else if (node.metadata.contains(_oldNode)) { |  | 
| 895       return _parser.parseAnnotation(); |  | 
| 896     } else if (identical(_oldNode, node.name)) { |  | 
| 897       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 898     } |  | 
| 899     return _notAChild(node); |  | 
| 900   } |  | 
| 901 |  | 
| 902   @override |  | 
| 903   AstNode visitEnumDeclaration(EnumDeclaration node) { |  | 
| 904     if (identical(_oldNode, node.documentationComment)) { |  | 
| 905       throw new InsufficientContextException(); |  | 
| 906     } else if (node.metadata.contains(_oldNode)) { |  | 
| 907       return _parser.parseAnnotation(); |  | 
| 908     } else if (identical(_oldNode, node.name)) { |  | 
| 909       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 910     } else if (node.constants.contains(_oldNode)) { |  | 
| 911       throw new InsufficientContextException(); |  | 
| 912     } |  | 
| 913     return _notAChild(node); |  | 
| 914   } |  | 
| 915 |  | 
| 916   @override |  | 
| 917   AstNode visitExportDirective(ExportDirective node) { |  | 
| 918     if (identical(_oldNode, node.documentationComment)) { |  | 
| 919       throw new InsufficientContextException(); |  | 
| 920     } else if (node.metadata.contains(_oldNode)) { |  | 
| 921       return _parser.parseAnnotation(); |  | 
| 922     } else if (identical(_oldNode, node.uri)) { |  | 
| 923       return _parser.parseStringLiteral(); |  | 
| 924     } else if (node.combinators.contains(_oldNode)) { |  | 
| 925       throw new IncrementalParseException(); |  | 
| 926       //return parser.parseCombinator(); |  | 
| 927     } |  | 
| 928     return _notAChild(node); |  | 
| 929   } |  | 
| 930 |  | 
| 931   @override |  | 
| 932   AstNode visitExpressionFunctionBody(ExpressionFunctionBody node) { |  | 
| 933     if (identical(_oldNode, node.expression)) { |  | 
| 934       return _parser.parseExpression2(); |  | 
| 935     } |  | 
| 936     return _notAChild(node); |  | 
| 937   } |  | 
| 938 |  | 
| 939   @override |  | 
| 940   AstNode visitExpressionStatement(ExpressionStatement node) { |  | 
| 941     if (identical(_oldNode, node.expression)) { |  | 
| 942       return _parser.parseExpression2(); |  | 
| 943     } |  | 
| 944     return _notAChild(node); |  | 
| 945   } |  | 
| 946 |  | 
| 947   @override |  | 
| 948   AstNode visitExtendsClause(ExtendsClause node) { |  | 
| 949     if (identical(_oldNode, node.superclass)) { |  | 
| 950       return _parser.parseTypeName(); |  | 
| 951     } |  | 
| 952     return _notAChild(node); |  | 
| 953   } |  | 
| 954 |  | 
| 955   @override |  | 
| 956   AstNode visitFieldDeclaration(FieldDeclaration node) { |  | 
| 957     if (identical(_oldNode, node.documentationComment)) { |  | 
| 958       throw new InsufficientContextException(); |  | 
| 959     } else if (node.metadata.contains(_oldNode)) { |  | 
| 960       return _parser.parseAnnotation(); |  | 
| 961     } else if (identical(_oldNode, node.fields)) { |  | 
| 962       throw new InsufficientContextException(); |  | 
| 963     } |  | 
| 964     return _notAChild(node); |  | 
| 965   } |  | 
| 966 |  | 
| 967   @override |  | 
| 968   AstNode visitFieldFormalParameter(FieldFormalParameter node) { |  | 
| 969     if (identical(_oldNode, node.documentationComment)) { |  | 
| 970       throw new InsufficientContextException(); |  | 
| 971     } else if (node.metadata.contains(_oldNode)) { |  | 
| 972       return _parser.parseAnnotation(); |  | 
| 973     } else if (identical(_oldNode, node.type)) { |  | 
| 974       return _parser.parseTypeName(); |  | 
| 975     } else if (identical(_oldNode, node.identifier)) { |  | 
| 976       return _parser.parseSimpleIdentifier(); |  | 
| 977     } else if (identical(_oldNode, node.parameters)) { |  | 
| 978       return _parser.parseFormalParameterList(); |  | 
| 979     } |  | 
| 980     return _notAChild(node); |  | 
| 981   } |  | 
| 982 |  | 
| 983   @override |  | 
| 984   AstNode visitForEachStatement(ForEachStatement node) { |  | 
| 985     if (identical(_oldNode, node.loopVariable)) { |  | 
| 986       throw new InsufficientContextException(); |  | 
| 987       //return parser.parseDeclaredIdentifier(); |  | 
| 988     } else if (identical(_oldNode, node.identifier)) { |  | 
| 989       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 990     } else if (identical(_oldNode, node.body)) { |  | 
| 991       return _parser.parseStatement2(); |  | 
| 992     } |  | 
| 993     return _notAChild(node); |  | 
| 994   } |  | 
| 995 |  | 
| 996   @override |  | 
| 997   AstNode visitFormalParameterList(FormalParameterList node) { |  | 
| 998     // We don't know which kind of parameter to parse. |  | 
| 999     throw new InsufficientContextException(); |  | 
| 1000   } |  | 
| 1001 |  | 
| 1002   @override |  | 
| 1003   AstNode visitForStatement(ForStatement node) { |  | 
| 1004     if (identical(_oldNode, node.variables)) { |  | 
| 1005       throw new InsufficientContextException(); |  | 
| 1006     } else if (identical(_oldNode, node.initialization)) { |  | 
| 1007       throw new InsufficientContextException(); |  | 
| 1008     } else if (identical(_oldNode, node.condition)) { |  | 
| 1009       return _parser.parseExpression2(); |  | 
| 1010     } else if (node.updaters.contains(_oldNode)) { |  | 
| 1011       return _parser.parseExpression2(); |  | 
| 1012     } else if (identical(_oldNode, node.body)) { |  | 
| 1013       return _parser.parseStatement2(); |  | 
| 1014     } |  | 
| 1015     return _notAChild(node); |  | 
| 1016   } |  | 
| 1017 |  | 
| 1018   @override |  | 
| 1019   AstNode visitFunctionDeclaration(FunctionDeclaration node) { |  | 
| 1020     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1021       throw new InsufficientContextException(); |  | 
| 1022     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1023       return _parser.parseAnnotation(); |  | 
| 1024     } else if (identical(_oldNode, node.returnType)) { |  | 
| 1025       return _parser.parseReturnType(); |  | 
| 1026     } else if (identical(_oldNode, node.name)) { |  | 
| 1027       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 1028     } else if (identical(_oldNode, node.functionExpression)) { |  | 
| 1029       throw new InsufficientContextException(); |  | 
| 1030     } |  | 
| 1031     return _notAChild(node); |  | 
| 1032   } |  | 
| 1033 |  | 
| 1034   @override |  | 
| 1035   AstNode visitFunctionDeclarationStatement(FunctionDeclarationStatement node) { |  | 
| 1036     if (identical(_oldNode, node.functionDeclaration)) { |  | 
| 1037       throw new InsufficientContextException(); |  | 
| 1038     } |  | 
| 1039     return _notAChild(node); |  | 
| 1040   } |  | 
| 1041 |  | 
| 1042   @override |  | 
| 1043   AstNode visitFunctionExpression(FunctionExpression node) { |  | 
| 1044     if (identical(_oldNode, node.parameters)) { |  | 
| 1045       return _parser.parseFormalParameterList(); |  | 
| 1046     } else if (identical(_oldNode, node.body)) { |  | 
| 1047       throw new InsufficientContextException(); |  | 
| 1048     } |  | 
| 1049     return _notAChild(node); |  | 
| 1050   } |  | 
| 1051 |  | 
| 1052   @override |  | 
| 1053   AstNode visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { |  | 
| 1054     if (identical(_oldNode, node.function)) { |  | 
| 1055       throw new InsufficientContextException(); |  | 
| 1056     } else if (identical(_oldNode, node.argumentList)) { |  | 
| 1057       return _parser.parseArgumentList(); |  | 
| 1058     } |  | 
| 1059     return _notAChild(node); |  | 
| 1060   } |  | 
| 1061 |  | 
| 1062   @override |  | 
| 1063   AstNode visitFunctionTypeAlias(FunctionTypeAlias node) { |  | 
| 1064     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1065       throw new InsufficientContextException(); |  | 
| 1066     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1067       return _parser.parseAnnotation(); |  | 
| 1068     } else if (identical(_oldNode, node.returnType)) { |  | 
| 1069       return _parser.parseReturnType(); |  | 
| 1070     } else if (identical(_oldNode, node.name)) { |  | 
| 1071       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 1072     } else if (identical(_oldNode, node.typeParameters)) { |  | 
| 1073       return _parser.parseTypeParameterList(); |  | 
| 1074     } else if (identical(_oldNode, node.parameters)) { |  | 
| 1075       return _parser.parseFormalParameterList(); |  | 
| 1076     } |  | 
| 1077     return _notAChild(node); |  | 
| 1078   } |  | 
| 1079 |  | 
| 1080   @override |  | 
| 1081   AstNode visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { |  | 
| 1082     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1083       throw new InsufficientContextException(); |  | 
| 1084     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1085       return _parser.parseAnnotation(); |  | 
| 1086     } else if (identical(_oldNode, node.returnType)) { |  | 
| 1087       return _parser.parseReturnType(); |  | 
| 1088     } else if (identical(_oldNode, node.identifier)) { |  | 
| 1089       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 1090     } else if (identical(_oldNode, node.parameters)) { |  | 
| 1091       return _parser.parseFormalParameterList(); |  | 
| 1092     } |  | 
| 1093     return _notAChild(node); |  | 
| 1094   } |  | 
| 1095 |  | 
| 1096   @override |  | 
| 1097   AstNode visitHideCombinator(HideCombinator node) { |  | 
| 1098     if (node.hiddenNames.contains(_oldNode)) { |  | 
| 1099       return _parser.parseSimpleIdentifier(); |  | 
| 1100     } |  | 
| 1101     return _notAChild(node); |  | 
| 1102   } |  | 
| 1103 |  | 
| 1104   @override |  | 
| 1105   AstNode visitIfStatement(IfStatement node) { |  | 
| 1106     if (identical(_oldNode, node.condition)) { |  | 
| 1107       return _parser.parseExpression2(); |  | 
| 1108     } else if (identical(_oldNode, node.thenStatement)) { |  | 
| 1109       return _parser.parseStatement2(); |  | 
| 1110     } else if (identical(_oldNode, node.elseStatement)) { |  | 
| 1111       return _parser.parseStatement2(); |  | 
| 1112     } |  | 
| 1113     return _notAChild(node); |  | 
| 1114   } |  | 
| 1115 |  | 
| 1116   @override |  | 
| 1117   AstNode visitImplementsClause(ImplementsClause node) { |  | 
| 1118     if (node.interfaces.contains(node)) { |  | 
| 1119       return _parser.parseTypeName(); |  | 
| 1120     } |  | 
| 1121     return _notAChild(node); |  | 
| 1122   } |  | 
| 1123 |  | 
| 1124   @override |  | 
| 1125   AstNode visitImportDirective(ImportDirective node) { |  | 
| 1126     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1127       throw new InsufficientContextException(); |  | 
| 1128     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1129       return _parser.parseAnnotation(); |  | 
| 1130     } else if (identical(_oldNode, node.uri)) { |  | 
| 1131       return _parser.parseStringLiteral(); |  | 
| 1132     } else if (identical(_oldNode, node.prefix)) { |  | 
| 1133       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 1134     } else if (node.combinators.contains(_oldNode)) { |  | 
| 1135       return _parser.parseCombinator(); |  | 
| 1136     } |  | 
| 1137     return _notAChild(node); |  | 
| 1138   } |  | 
| 1139 |  | 
| 1140   @override |  | 
| 1141   AstNode visitIndexExpression(IndexExpression node) { |  | 
| 1142     if (identical(_oldNode, node.target)) { |  | 
| 1143       throw new InsufficientContextException(); |  | 
| 1144     } else if (identical(_oldNode, node.index)) { |  | 
| 1145       return _parser.parseExpression2(); |  | 
| 1146     } |  | 
| 1147     return _notAChild(node); |  | 
| 1148   } |  | 
| 1149 |  | 
| 1150   @override |  | 
| 1151   AstNode visitInstanceCreationExpression(InstanceCreationExpression node) { |  | 
| 1152     if (identical(_oldNode, node.constructorName)) { |  | 
| 1153       return _parser.parseConstructorName(); |  | 
| 1154     } else if (identical(_oldNode, node.argumentList)) { |  | 
| 1155       return _parser.parseArgumentList(); |  | 
| 1156     } |  | 
| 1157     return _notAChild(node); |  | 
| 1158   } |  | 
| 1159 |  | 
| 1160   @override |  | 
| 1161   AstNode visitIntegerLiteral(IntegerLiteral node) => _notAChild(node); |  | 
| 1162 |  | 
| 1163   @override |  | 
| 1164   AstNode visitInterpolationExpression(InterpolationExpression node) { |  | 
| 1165     if (identical(_oldNode, node.expression)) { |  | 
| 1166       if (node.leftBracket == null) { |  | 
| 1167         throw new InsufficientContextException(); |  | 
| 1168         //return parser.parseThisOrSimpleIdentifier(); |  | 
| 1169       } |  | 
| 1170       return _parser.parseExpression2(); |  | 
| 1171     } |  | 
| 1172     return _notAChild(node); |  | 
| 1173   } |  | 
| 1174 |  | 
| 1175   @override |  | 
| 1176   AstNode visitInterpolationString(InterpolationString node) { |  | 
| 1177     throw new InsufficientContextException(); |  | 
| 1178   } |  | 
| 1179 |  | 
| 1180   @override |  | 
| 1181   AstNode visitIsExpression(IsExpression node) { |  | 
| 1182     if (identical(_oldNode, node.expression)) { |  | 
| 1183       return _parser.parseBitwiseOrExpression(); |  | 
| 1184     } else if (identical(_oldNode, node.type)) { |  | 
| 1185       return _parser.parseTypeName(); |  | 
| 1186     } |  | 
| 1187     return _notAChild(node); |  | 
| 1188   } |  | 
| 1189 |  | 
| 1190   @override |  | 
| 1191   AstNode visitLabel(Label node) { |  | 
| 1192     if (identical(_oldNode, node.label)) { |  | 
| 1193       return _parser.parseSimpleIdentifier( |  | 
| 1194           isDeclaration: node.parent is LabeledStatement); |  | 
| 1195     } |  | 
| 1196     return _notAChild(node); |  | 
| 1197   } |  | 
| 1198 |  | 
| 1199   @override |  | 
| 1200   AstNode visitLabeledStatement(LabeledStatement node) { |  | 
| 1201     if (node.labels.contains(_oldNode)) { |  | 
| 1202       return _parser.parseLabel(isDeclaration: true); |  | 
| 1203     } else if (identical(_oldNode, node.statement)) { |  | 
| 1204       return _parser.parseStatement2(); |  | 
| 1205     } |  | 
| 1206     return _notAChild(node); |  | 
| 1207   } |  | 
| 1208 |  | 
| 1209   @override |  | 
| 1210   AstNode visitLibraryDirective(LibraryDirective node) { |  | 
| 1211     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1212       throw new InsufficientContextException(); |  | 
| 1213     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1214       return _parser.parseAnnotation(); |  | 
| 1215     } else if (identical(_oldNode, node.name)) { |  | 
| 1216       return _parser.parseLibraryIdentifier(); |  | 
| 1217     } |  | 
| 1218     return _notAChild(node); |  | 
| 1219   } |  | 
| 1220 |  | 
| 1221   @override |  | 
| 1222   AstNode visitLibraryIdentifier(LibraryIdentifier node) { |  | 
| 1223     if (node.components.contains(_oldNode)) { |  | 
| 1224       return _parser.parseSimpleIdentifier(); |  | 
| 1225     } |  | 
| 1226     return _notAChild(node); |  | 
| 1227   } |  | 
| 1228 |  | 
| 1229   @override |  | 
| 1230   AstNode visitListLiteral(ListLiteral node) { |  | 
| 1231     if (identical(_oldNode, node.typeArguments)) { |  | 
| 1232       return _parser.parseTypeArgumentList(); |  | 
| 1233     } else if (node.elements.contains(_oldNode)) { |  | 
| 1234       return _parser.parseExpression2(); |  | 
| 1235     } |  | 
| 1236     return _notAChild(node); |  | 
| 1237   } |  | 
| 1238 |  | 
| 1239   @override |  | 
| 1240   AstNode visitMapLiteral(MapLiteral node) { |  | 
| 1241     if (identical(_oldNode, node.typeArguments)) { |  | 
| 1242       return _parser.parseTypeArgumentList(); |  | 
| 1243     } else if (node.entries.contains(_oldNode)) { |  | 
| 1244       return _parser.parseMapLiteralEntry(); |  | 
| 1245     } |  | 
| 1246     return _notAChild(node); |  | 
| 1247   } |  | 
| 1248 |  | 
| 1249   @override |  | 
| 1250   AstNode visitMapLiteralEntry(MapLiteralEntry node) { |  | 
| 1251     if (identical(_oldNode, node.key)) { |  | 
| 1252       return _parser.parseExpression2(); |  | 
| 1253     } else if (identical(_oldNode, node.value)) { |  | 
| 1254       return _parser.parseExpression2(); |  | 
| 1255     } |  | 
| 1256     return _notAChild(node); |  | 
| 1257   } |  | 
| 1258 |  | 
| 1259   @override |  | 
| 1260   AstNode visitMethodDeclaration(MethodDeclaration node) { |  | 
| 1261     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1262       throw new InsufficientContextException(); |  | 
| 1263     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1264       return _parser.parseAnnotation(); |  | 
| 1265     } else if (identical(_oldNode, node.returnType)) { |  | 
| 1266       throw new InsufficientContextException(); |  | 
| 1267       //return parser.parseTypeName(); |  | 
| 1268       //return parser.parseReturnType(); |  | 
| 1269     } else if (identical(_oldNode, node.name)) { |  | 
| 1270       if (node.operatorKeyword != null) { |  | 
| 1271         throw new InsufficientContextException(); |  | 
| 1272       } |  | 
| 1273       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 1274     } else if (identical(_oldNode, node.body)) { |  | 
| 1275       //return parser.parseFunctionBody(); |  | 
| 1276       throw new InsufficientContextException(); |  | 
| 1277     } else if (identical(_oldNode, node.parameters)) { |  | 
| 1278       // TODO(paulberry): if we want errors to be correct, we'll need to also |  | 
| 1279       // call _validateFormalParameterList, and sometimes |  | 
| 1280       // _validateModifiersForGetterOrSetterOrMethod. |  | 
| 1281       return _parser.parseFormalParameterList(); |  | 
| 1282     } |  | 
| 1283     return _notAChild(node); |  | 
| 1284   } |  | 
| 1285 |  | 
| 1286   @override |  | 
| 1287   AstNode visitMethodInvocation(MethodInvocation node) { |  | 
| 1288     if (identical(_oldNode, node.target)) { |  | 
| 1289       throw new IncrementalParseException(); |  | 
| 1290     } else if (identical(_oldNode, node.methodName)) { |  | 
| 1291       return _parser.parseSimpleIdentifier(); |  | 
| 1292     } else if (identical(_oldNode, node.argumentList)) { |  | 
| 1293       return _parser.parseArgumentList(); |  | 
| 1294     } |  | 
| 1295     return _notAChild(node); |  | 
| 1296   } |  | 
| 1297 |  | 
| 1298   @override |  | 
| 1299   AstNode visitNamedExpression(NamedExpression node) { |  | 
| 1300     if (identical(_oldNode, node.name)) { |  | 
| 1301       return _parser.parseLabel(); |  | 
| 1302     } else if (identical(_oldNode, node.expression)) { |  | 
| 1303       return _parser.parseExpression2(); |  | 
| 1304     } |  | 
| 1305     return _notAChild(node); |  | 
| 1306   } |  | 
| 1307 |  | 
| 1308   @override |  | 
| 1309   AstNode visitNativeClause(NativeClause node) { |  | 
| 1310     if (identical(_oldNode, node.name)) { |  | 
| 1311       return _parser.parseStringLiteral(); |  | 
| 1312     } |  | 
| 1313     return _notAChild(node); |  | 
| 1314   } |  | 
| 1315 |  | 
| 1316   @override |  | 
| 1317   AstNode visitNativeFunctionBody(NativeFunctionBody node) { |  | 
| 1318     if (identical(_oldNode, node.stringLiteral)) { |  | 
| 1319       return _parser.parseStringLiteral(); |  | 
| 1320     } |  | 
| 1321     return _notAChild(node); |  | 
| 1322   } |  | 
| 1323 |  | 
| 1324   @override |  | 
| 1325   AstNode visitNullLiteral(NullLiteral node) => _notAChild(node); |  | 
| 1326 |  | 
| 1327   @override |  | 
| 1328   AstNode visitParenthesizedExpression(ParenthesizedExpression node) { |  | 
| 1329     if (identical(_oldNode, node.expression)) { |  | 
| 1330       return _parser.parseExpression2(); |  | 
| 1331     } |  | 
| 1332     return _notAChild(node); |  | 
| 1333   } |  | 
| 1334 |  | 
| 1335   @override |  | 
| 1336   AstNode visitPartDirective(PartDirective node) { |  | 
| 1337     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1338       throw new InsufficientContextException(); |  | 
| 1339     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1340       return _parser.parseAnnotation(); |  | 
| 1341     } else if (identical(_oldNode, node.uri)) { |  | 
| 1342       return _parser.parseStringLiteral(); |  | 
| 1343     } |  | 
| 1344     return _notAChild(node); |  | 
| 1345   } |  | 
| 1346 |  | 
| 1347   @override |  | 
| 1348   AstNode visitPartOfDirective(PartOfDirective node) { |  | 
| 1349     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1350       throw new InsufficientContextException(); |  | 
| 1351     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1352       return _parser.parseAnnotation(); |  | 
| 1353     } else if (identical(_oldNode, node.libraryName)) { |  | 
| 1354       return _parser.parseLibraryIdentifier(); |  | 
| 1355     } |  | 
| 1356     return _notAChild(node); |  | 
| 1357   } |  | 
| 1358 |  | 
| 1359   @override |  | 
| 1360   AstNode visitPostfixExpression(PostfixExpression node) { |  | 
| 1361     if (identical(_oldNode, node.operand)) { |  | 
| 1362       throw new InsufficientContextException(); |  | 
| 1363     } |  | 
| 1364     return _notAChild(node); |  | 
| 1365   } |  | 
| 1366 |  | 
| 1367   @override |  | 
| 1368   AstNode visitPrefixedIdentifier(PrefixedIdentifier node) { |  | 
| 1369     if (identical(_oldNode, node.prefix)) { |  | 
| 1370       return _parser.parseSimpleIdentifier(); |  | 
| 1371     } else if (identical(_oldNode, node.identifier)) { |  | 
| 1372       return _parser.parseSimpleIdentifier(); |  | 
| 1373     } |  | 
| 1374     return _notAChild(node); |  | 
| 1375   } |  | 
| 1376 |  | 
| 1377   @override |  | 
| 1378   AstNode visitPrefixExpression(PrefixExpression node) { |  | 
| 1379     if (identical(_oldNode, node.operand)) { |  | 
| 1380       throw new InsufficientContextException(); |  | 
| 1381     } |  | 
| 1382     return _notAChild(node); |  | 
| 1383   } |  | 
| 1384 |  | 
| 1385   @override |  | 
| 1386   AstNode visitPropertyAccess(PropertyAccess node) { |  | 
| 1387     if (identical(_oldNode, node.target)) { |  | 
| 1388       throw new InsufficientContextException(); |  | 
| 1389     } else if (identical(_oldNode, node.propertyName)) { |  | 
| 1390       return _parser.parseSimpleIdentifier(); |  | 
| 1391     } |  | 
| 1392     return _notAChild(node); |  | 
| 1393   } |  | 
| 1394 |  | 
| 1395   @override |  | 
| 1396   AstNode visitRedirectingConstructorInvocation( |  | 
| 1397       RedirectingConstructorInvocation node) { |  | 
| 1398     if (identical(_oldNode, node.constructorName)) { |  | 
| 1399       return _parser.parseSimpleIdentifier(); |  | 
| 1400     } else if (identical(_oldNode, node.argumentList)) { |  | 
| 1401       return _parser.parseArgumentList(); |  | 
| 1402     } |  | 
| 1403     return _notAChild(node); |  | 
| 1404   } |  | 
| 1405 |  | 
| 1406   @override |  | 
| 1407   AstNode visitRethrowExpression(RethrowExpression node) => _notAChild(node); |  | 
| 1408 |  | 
| 1409   @override |  | 
| 1410   AstNode visitReturnStatement(ReturnStatement node) { |  | 
| 1411     if (identical(_oldNode, node.expression)) { |  | 
| 1412       return _parser.parseExpression2(); |  | 
| 1413     } |  | 
| 1414     return _notAChild(node); |  | 
| 1415   } |  | 
| 1416 |  | 
| 1417   @override |  | 
| 1418   AstNode visitScriptTag(ScriptTag node) => _notAChild(node); |  | 
| 1419 |  | 
| 1420   @override |  | 
| 1421   AstNode visitShowCombinator(ShowCombinator node) { |  | 
| 1422     if (node.shownNames.contains(_oldNode)) { |  | 
| 1423       return _parser.parseSimpleIdentifier(); |  | 
| 1424     } |  | 
| 1425     return _notAChild(node); |  | 
| 1426   } |  | 
| 1427 |  | 
| 1428   @override |  | 
| 1429   AstNode visitSimpleFormalParameter(SimpleFormalParameter node) { |  | 
| 1430     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1431       throw new InsufficientContextException(); |  | 
| 1432     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1433       return _parser.parseAnnotation(); |  | 
| 1434     } else if (identical(_oldNode, node.type)) { |  | 
| 1435       throw new InsufficientContextException(); |  | 
| 1436     } else if (identical(_oldNode, node.identifier)) { |  | 
| 1437       throw new InsufficientContextException(); |  | 
| 1438     } |  | 
| 1439     return _notAChild(node); |  | 
| 1440   } |  | 
| 1441 |  | 
| 1442   @override |  | 
| 1443   AstNode visitSimpleIdentifier(SimpleIdentifier node) => _notAChild(node); |  | 
| 1444 |  | 
| 1445   @override |  | 
| 1446   AstNode visitSimpleStringLiteral(SimpleStringLiteral node) => |  | 
| 1447       _notAChild(node); |  | 
| 1448 |  | 
| 1449   @override |  | 
| 1450   AstNode visitStringInterpolation(StringInterpolation node) { |  | 
| 1451     if (node.elements.contains(_oldNode)) { |  | 
| 1452       throw new InsufficientContextException(); |  | 
| 1453     } |  | 
| 1454     return _notAChild(node); |  | 
| 1455   } |  | 
| 1456 |  | 
| 1457   @override |  | 
| 1458   AstNode visitSuperConstructorInvocation(SuperConstructorInvocation node) { |  | 
| 1459     if (identical(_oldNode, node.constructorName)) { |  | 
| 1460       return _parser.parseSimpleIdentifier(); |  | 
| 1461     } else if (identical(_oldNode, node.argumentList)) { |  | 
| 1462       return _parser.parseArgumentList(); |  | 
| 1463     } |  | 
| 1464     return _notAChild(node); |  | 
| 1465   } |  | 
| 1466 |  | 
| 1467   @override |  | 
| 1468   AstNode visitSuperExpression(SuperExpression node) => _notAChild(node); |  | 
| 1469 |  | 
| 1470   @override |  | 
| 1471   AstNode visitSwitchCase(SwitchCase node) { |  | 
| 1472     if (node.labels.contains(_oldNode)) { |  | 
| 1473       return _parser.parseLabel(); |  | 
| 1474     } else if (identical(_oldNode, node.expression)) { |  | 
| 1475       return _parser.parseExpression2(); |  | 
| 1476     } else if (node.statements.contains(_oldNode)) { |  | 
| 1477       return _parser.parseStatement2(); |  | 
| 1478     } |  | 
| 1479     return _notAChild(node); |  | 
| 1480   } |  | 
| 1481 |  | 
| 1482   @override |  | 
| 1483   AstNode visitSwitchDefault(SwitchDefault node) { |  | 
| 1484     if (node.labels.contains(_oldNode)) { |  | 
| 1485       return _parser.parseLabel(); |  | 
| 1486     } else if (node.statements.contains(_oldNode)) { |  | 
| 1487       return _parser.parseStatement2(); |  | 
| 1488     } |  | 
| 1489     return _notAChild(node); |  | 
| 1490   } |  | 
| 1491 |  | 
| 1492   @override |  | 
| 1493   AstNode visitSwitchStatement(SwitchStatement node) { |  | 
| 1494     if (identical(_oldNode, node.expression)) { |  | 
| 1495       return _parser.parseExpression2(); |  | 
| 1496     } else if (node.members.contains(_oldNode)) { |  | 
| 1497       throw new InsufficientContextException(); |  | 
| 1498     } |  | 
| 1499     return _notAChild(node); |  | 
| 1500   } |  | 
| 1501 |  | 
| 1502   @override |  | 
| 1503   AstNode visitSymbolLiteral(SymbolLiteral node) => _notAChild(node); |  | 
| 1504 |  | 
| 1505   @override |  | 
| 1506   AstNode visitThisExpression(ThisExpression node) => _notAChild(node); |  | 
| 1507 |  | 
| 1508   @override |  | 
| 1509   AstNode visitThrowExpression(ThrowExpression node) { |  | 
| 1510     if (identical(_oldNode, node.expression)) { |  | 
| 1511       if (_isCascadeAllowedInThrow(node)) { |  | 
| 1512         return _parser.parseExpression2(); |  | 
| 1513       } |  | 
| 1514       return _parser.parseExpressionWithoutCascade(); |  | 
| 1515     } |  | 
| 1516     return _notAChild(node); |  | 
| 1517   } |  | 
| 1518 |  | 
| 1519   @override |  | 
| 1520   AstNode visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) { |  | 
| 1521     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1522       throw new InsufficientContextException(); |  | 
| 1523     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1524       return _parser.parseAnnotation(); |  | 
| 1525     } else if (identical(_oldNode, node.variables)) { |  | 
| 1526       throw new InsufficientContextException(); |  | 
| 1527     } |  | 
| 1528     return _notAChild(node); |  | 
| 1529   } |  | 
| 1530 |  | 
| 1531   @override |  | 
| 1532   AstNode visitTryStatement(TryStatement node) { |  | 
| 1533     if (identical(_oldNode, node.body)) { |  | 
| 1534       return _parser.parseBlock(); |  | 
| 1535     } else if (node.catchClauses.contains(_oldNode)) { |  | 
| 1536       throw new InsufficientContextException(); |  | 
| 1537     } else if (identical(_oldNode, node.finallyBlock)) { |  | 
| 1538       throw new InsufficientContextException(); |  | 
| 1539     } |  | 
| 1540     return _notAChild(node); |  | 
| 1541   } |  | 
| 1542 |  | 
| 1543   @override |  | 
| 1544   AstNode visitTypeArgumentList(TypeArgumentList node) { |  | 
| 1545     if (node.arguments.contains(_oldNode)) { |  | 
| 1546       return _parser.parseTypeName(); |  | 
| 1547     } |  | 
| 1548     return _notAChild(node); |  | 
| 1549   } |  | 
| 1550 |  | 
| 1551   @override |  | 
| 1552   AstNode visitTypeName(TypeName node) { |  | 
| 1553     if (identical(_oldNode, node.name)) { |  | 
| 1554       return _parser.parsePrefixedIdentifier(); |  | 
| 1555     } else if (identical(_oldNode, node.typeArguments)) { |  | 
| 1556       return _parser.parseTypeArgumentList(); |  | 
| 1557     } |  | 
| 1558     return _notAChild(node); |  | 
| 1559   } |  | 
| 1560 |  | 
| 1561   @override |  | 
| 1562   AstNode visitTypeParameter(TypeParameter node) { |  | 
| 1563     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1564       throw new InsufficientContextException(); |  | 
| 1565     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1566       return _parser.parseAnnotation(); |  | 
| 1567     } else if (identical(_oldNode, node.name)) { |  | 
| 1568       return _parser.parseSimpleIdentifier(isDeclaration: true); |  | 
| 1569     } else if (identical(_oldNode, node.bound)) { |  | 
| 1570       return _parser.parseTypeName(); |  | 
| 1571     } |  | 
| 1572     return _notAChild(node); |  | 
| 1573   } |  | 
| 1574 |  | 
| 1575   @override |  | 
| 1576   AstNode visitTypeParameterList(TypeParameterList node) { |  | 
| 1577     if (node.typeParameters.contains(node)) { |  | 
| 1578       return _parser.parseTypeParameter(); |  | 
| 1579     } |  | 
| 1580     return _notAChild(node); |  | 
| 1581   } |  | 
| 1582 |  | 
| 1583   @override |  | 
| 1584   AstNode visitVariableDeclaration(VariableDeclaration node) { |  | 
| 1585     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1586       throw new InsufficientContextException(); |  | 
| 1587     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1588       return _parser.parseAnnotation(); |  | 
| 1589     } else if (identical(_oldNode, node.name)) { |  | 
| 1590       throw new InsufficientContextException(); |  | 
| 1591     } else if (identical(_oldNode, node.initializer)) { |  | 
| 1592       throw new InsufficientContextException(); |  | 
| 1593     } |  | 
| 1594     return _notAChild(node); |  | 
| 1595   } |  | 
| 1596 |  | 
| 1597   @override |  | 
| 1598   AstNode visitVariableDeclarationList(VariableDeclarationList node) { |  | 
| 1599     if (identical(_oldNode, node.documentationComment)) { |  | 
| 1600       throw new InsufficientContextException(); |  | 
| 1601     } else if (node.metadata.contains(_oldNode)) { |  | 
| 1602       return _parser.parseAnnotation(); |  | 
| 1603     } else if (identical(_oldNode, node.type)) { |  | 
| 1604       // There is not enough context to know whether we should reparse the type |  | 
| 1605       // using parseReturnType() (which allows 'void') or parseTypeName() |  | 
| 1606       // (which doesn't).  Note that even though the language disallows |  | 
| 1607       // variables of type 'void', the parser sometimes accepts them in the |  | 
| 1608       // course of error recovery (e.g. "class C { void v; }" |  | 
| 1609       throw new InsufficientContextException(); |  | 
| 1610     } else if (node.variables.contains(_oldNode)) { |  | 
| 1611       throw new InsufficientContextException(); |  | 
| 1612     } |  | 
| 1613     return _notAChild(node); |  | 
| 1614   } |  | 
| 1615 |  | 
| 1616   @override |  | 
| 1617   AstNode visitVariableDeclarationStatement(VariableDeclarationStatement node) { |  | 
| 1618     if (identical(_oldNode, node.variables)) { |  | 
| 1619       throw new InsufficientContextException(); |  | 
| 1620     } |  | 
| 1621     return _notAChild(node); |  | 
| 1622   } |  | 
| 1623 |  | 
| 1624   @override |  | 
| 1625   AstNode visitWhileStatement(WhileStatement node) { |  | 
| 1626     if (identical(_oldNode, node.condition)) { |  | 
| 1627       return _parser.parseExpression2(); |  | 
| 1628     } else if (identical(_oldNode, node.body)) { |  | 
| 1629       return _parser.parseStatement2(); |  | 
| 1630     } |  | 
| 1631     return _notAChild(node); |  | 
| 1632   } |  | 
| 1633 |  | 
| 1634   @override |  | 
| 1635   AstNode visitWithClause(WithClause node) { |  | 
| 1636     if (node.mixinTypes.contains(node)) { |  | 
| 1637       return _parser.parseTypeName(); |  | 
| 1638     } |  | 
| 1639     return _notAChild(node); |  | 
| 1640   } |  | 
| 1641 |  | 
| 1642   @override |  | 
| 1643   AstNode visitYieldStatement(YieldStatement node) { |  | 
| 1644     if (identical(_oldNode, node.expression)) { |  | 
| 1645       return _parser.parseExpression2(); |  | 
| 1646     } |  | 
| 1647     return _notAChild(node); |  | 
| 1648   } |  | 
| 1649 |  | 
| 1650   /** |  | 
| 1651    * Return `true` if the given assignment [expression] can have a cascade |  | 
| 1652    * expression on the right-hand side. |  | 
| 1653    */ |  | 
| 1654   bool _isCascadeAllowedInAssignment(AssignmentExpression expression) { |  | 
| 1655     // TODO(brianwilkerson) Implement this method. |  | 
| 1656     throw new InsufficientContextException(); |  | 
| 1657   } |  | 
| 1658 |  | 
| 1659   /** |  | 
| 1660    * Return `true` if the given throw [expression] can have a cascade |  | 
| 1661    * expression. |  | 
| 1662    */ |  | 
| 1663   bool _isCascadeAllowedInThrow(ThrowExpression expression) { |  | 
| 1664     // TODO(brianwilkerson) Implement this method. |  | 
| 1665     throw new InsufficientContextException(); |  | 
| 1666   } |  | 
| 1667 |  | 
| 1668   /** |  | 
| 1669    * Throw an exception indicating that the visited [node] was not the parent of |  | 
| 1670    * the node to be replaced. |  | 
| 1671    */ |  | 
| 1672   AstNode _notAChild(AstNode node) { |  | 
| 1673     throw new IncrementalParseException( |  | 
| 1674         "Internal error: the visited node (a ${node.runtimeType}) was not the pa
       rent of the node to be replaced (a ${_oldNode.runtimeType})"); |  | 
| 1675   } |  | 
| 1676 } |  | 
| 1677 |  | 
| 1678 /** |  | 
| 1679  * An exception that occurred while attempting to parse a replacement for a |  | 
| 1680  * specified node in an existing AST structure. |  | 
| 1681  */ |  | 
| 1682 @deprecated |  | 
| 1683 class IncrementalParseException { |  | 
| 1684   final String message; |  | 
| 1685   IncrementalParseException([this.message = '']); |  | 
| 1686   String toString() => '$runtimeType: $message'; |  | 
| 1687 } |  | 
| 1688 |  | 
| 1689 /** |  | 
| 1690  * An object used to re-parse a single AST structure within a larger AST |  | 
| 1691  * structure. |  | 
| 1692  */ |  | 
| 1693 @deprecated |  | 
| 1694 class IncrementalParser { |  | 
| 1695   /** |  | 
| 1696    * The source being parsed. |  | 
| 1697    */ |  | 
| 1698   final Source _source; |  | 
| 1699 |  | 
| 1700   /** |  | 
| 1701    * A map from old tokens to new tokens used during the cloning process. |  | 
| 1702    */ |  | 
| 1703   final TokenMap _tokenMap; |  | 
| 1704 |  | 
| 1705   /** |  | 
| 1706    * The error listener that will be informed of any errors that are found |  | 
| 1707    * during the parse. |  | 
| 1708    */ |  | 
| 1709   final AnalysisErrorListener _errorListener; |  | 
| 1710 |  | 
| 1711   /** |  | 
| 1712    * The node in the AST structure that contains the revised content. |  | 
| 1713    */ |  | 
| 1714   AstNode _updatedNode; |  | 
| 1715 |  | 
| 1716   /** |  | 
| 1717    * Initialize a newly created incremental parser to parse a portion of the |  | 
| 1718    * content of the given [_source]. The [_tokenMap] is a map from old tokens to |  | 
| 1719    * new tokens that is used during the cloning process. The [_errorListener] |  | 
| 1720    * will be informed of any errors that are found during the parse. |  | 
| 1721    */ |  | 
| 1722   IncrementalParser(this._source, this._tokenMap, this._errorListener); |  | 
| 1723 |  | 
| 1724   /** |  | 
| 1725    * Return the node in the AST structure that contains the revised content. |  | 
| 1726    */ |  | 
| 1727   AstNode get updatedNode => _updatedNode; |  | 
| 1728 |  | 
| 1729   /** |  | 
| 1730    * Given a range of tokens that were re-scanned, re-parse the minimum number |  | 
| 1731    * of tokens to produce a consistent AST structure. The range is represented |  | 
| 1732    * by the first and last tokens in the range. |  | 
| 1733    * |  | 
| 1734    * More specifically, the [leftToken] is the token in the new token stream |  | 
| 1735    * immediately to the left of the range of tokens that were inserted and the |  | 
| 1736    * [rightToken] is the token in the new token stream immediately to the right |  | 
| 1737    * of the range of tokens that were inserted. The [originalStart] and |  | 
| 1738    * [originalEnd] are the offsets in the original source of the first and last |  | 
| 1739    * characters that were modified. |  | 
| 1740    * |  | 
| 1741    * The tokens are assumed to be contained in the same token stream. |  | 
| 1742    */ |  | 
| 1743   AstNode reparse(AstNode originalStructure, Token leftToken, Token rightToken, |  | 
| 1744       int originalStart, int originalEnd) { |  | 
| 1745     AstNode oldNode = null; |  | 
| 1746     AstNode newNode = null; |  | 
| 1747     // |  | 
| 1748     // Find the first token that needs to be re-parsed. |  | 
| 1749     // |  | 
| 1750     Token firstToken = leftToken.next; |  | 
| 1751     if (identical(firstToken, rightToken)) { |  | 
| 1752       // If there are no new tokens, then we need to include at least one copied |  | 
| 1753       // node in the range. |  | 
| 1754       firstToken = leftToken; |  | 
| 1755     } |  | 
| 1756     // |  | 
| 1757     // Find the smallest AST node that encompasses the range of re-scanned |  | 
| 1758     // tokens. |  | 
| 1759     // |  | 
| 1760     if (originalEnd < originalStart) { |  | 
| 1761       oldNode = new NodeLocator(originalStart).searchWithin(originalStructure); |  | 
| 1762     } else { |  | 
| 1763       oldNode = new NodeLocator(originalStart, originalEnd) |  | 
| 1764           .searchWithin(originalStructure); |  | 
| 1765     } |  | 
| 1766     // |  | 
| 1767     // Find the token at which parsing is to begin. |  | 
| 1768     // |  | 
| 1769     int originalOffset = oldNode.offset; |  | 
| 1770     Token parseToken = _findTokenAt(firstToken, originalOffset); |  | 
| 1771     if (parseToken == null) { |  | 
| 1772       return null; |  | 
| 1773     } |  | 
| 1774     // |  | 
| 1775     // Parse the appropriate AST structure starting at the appropriate place. |  | 
| 1776     // |  | 
| 1777     Parser parser = new Parser(_source, _errorListener); |  | 
| 1778     parser.currentToken = parseToken; |  | 
| 1779     while (newNode == null) { |  | 
| 1780       AstNode parent = oldNode.parent; |  | 
| 1781       if (parent == null) { |  | 
| 1782         parseToken = _findFirstToken(parseToken); |  | 
| 1783         parser.currentToken = parseToken; |  | 
| 1784         return parser.parseCompilationUnit2(); |  | 
| 1785       } |  | 
| 1786       bool advanceToParent = false; |  | 
| 1787       try { |  | 
| 1788         IncrementalParseDispatcher dispatcher = |  | 
| 1789             new IncrementalParseDispatcher(parser, oldNode); |  | 
| 1790         IncrementalParseStateBuilder contextBuilder = |  | 
| 1791             new IncrementalParseStateBuilder(parser); |  | 
| 1792         contextBuilder.buildState(oldNode); |  | 
| 1793         newNode = parent.accept(dispatcher); |  | 
| 1794         // |  | 
| 1795         // Validate that the new node can replace the old node. |  | 
| 1796         // |  | 
| 1797         Token mappedToken = _tokenMap.get(oldNode.endToken.next); |  | 
| 1798         if (mappedToken == null || |  | 
| 1799             newNode == null || |  | 
| 1800             mappedToken.offset != newNode.endToken.next.offset || |  | 
| 1801             newNode.offset != oldNode.offset) { |  | 
| 1802           advanceToParent = true; |  | 
| 1803         } |  | 
| 1804       } on InsufficientContextException { |  | 
| 1805         advanceToParent = true; |  | 
| 1806       } catch (exception) { |  | 
| 1807         return null; |  | 
| 1808       } |  | 
| 1809       if (advanceToParent) { |  | 
| 1810         newNode = null; |  | 
| 1811         oldNode = parent; |  | 
| 1812         originalOffset = oldNode.offset; |  | 
| 1813         parseToken = _findTokenAt(parseToken, originalOffset); |  | 
| 1814         parser.currentToken = parseToken; |  | 
| 1815       } |  | 
| 1816     } |  | 
| 1817     _updatedNode = newNode; |  | 
| 1818     // |  | 
| 1819     // Replace the old node with the new node in a copy of the original AST |  | 
| 1820     // structure. |  | 
| 1821     // |  | 
| 1822     if (identical(oldNode, originalStructure)) { |  | 
| 1823       // We ended up re-parsing the whole structure, so there's no need for a |  | 
| 1824       // copy. |  | 
| 1825       ResolutionCopier.copyResolutionData(oldNode, newNode); |  | 
| 1826       return newNode; |  | 
| 1827     } |  | 
| 1828     ResolutionCopier.copyResolutionData(oldNode, newNode); |  | 
| 1829     IncrementalAstCloner cloner = |  | 
| 1830         new IncrementalAstCloner(oldNode, newNode, _tokenMap); |  | 
| 1831     return originalStructure.accept(cloner); |  | 
| 1832   } |  | 
| 1833 |  | 
| 1834   /** |  | 
| 1835    * Return the first (non-EOF) token in the token stream containing the |  | 
| 1836    * [firstToken]. |  | 
| 1837    */ |  | 
| 1838   Token _findFirstToken(Token firstToken) { |  | 
| 1839     while (firstToken.type != TokenType.EOF) { |  | 
| 1840       firstToken = firstToken.previous; |  | 
| 1841     } |  | 
| 1842     return firstToken.next; |  | 
| 1843   } |  | 
| 1844 |  | 
| 1845   /** |  | 
| 1846    * Find the token at or before the [firstToken] with the given [offset], or |  | 
| 1847    * `null` if there is no such token. |  | 
| 1848    */ |  | 
| 1849   Token _findTokenAt(Token firstToken, int offset) { |  | 
| 1850     while (firstToken.offset > offset && firstToken.type != TokenType.EOF) { |  | 
| 1851       firstToken = firstToken.previous; |  | 
| 1852     } |  | 
| 1853     return firstToken; |  | 
| 1854   } |  | 
| 1855 } |  | 
| 1856 |  | 
| 1857 /** |  | 
| 1858  * A visitor capable of inferring the correct parser state for incremental |  | 
| 1859  * parsing.  This visitor visits each parent/child relationship in the chain of |  | 
| 1860  * ancestors of the node to be replaced (starting with the root of the parse |  | 
| 1861  * tree), updating the parser to the correct state for parsing the child of the |  | 
| 1862  * given parent.  Once it has visited all of these relationships, the parser |  | 
| 1863  * will be in the correct state for reparsing the node to be replaced. |  | 
| 1864  */ |  | 
| 1865 @deprecated |  | 
| 1866 class IncrementalParseStateBuilder extends SimpleAstVisitor { |  | 
| 1867   // TODO(paulberry): add support for other pieces of parser state (_inAsync, |  | 
| 1868   // _inGenerator, _inLoop, and _inSwitch).  Note that _inLoop and _inSwitch |  | 
| 1869   // only affect error message generation. |  | 
| 1870 |  | 
| 1871   /** |  | 
| 1872    * The parser whose state should be built. |  | 
| 1873    */ |  | 
| 1874   final Parser _parser; |  | 
| 1875 |  | 
| 1876   /** |  | 
| 1877    * The child node in the parent/child relationship currently being visited. |  | 
| 1878    * (The corresponding parent is the node passed to the visit...() function.) |  | 
| 1879    */ |  | 
| 1880   AstNode _childNode; |  | 
| 1881 |  | 
| 1882   /** |  | 
| 1883    * Create an IncrementalParseStateBuilder which will build the correct state |  | 
| 1884    * for [_parser]. |  | 
| 1885    */ |  | 
| 1886   IncrementalParseStateBuilder(this._parser); |  | 
| 1887 |  | 
| 1888   /** |  | 
| 1889    * Build the correct parser state for parsing a replacement for [node]. |  | 
| 1890    */ |  | 
| 1891   void buildState(AstNode node) { |  | 
| 1892     List<AstNode> ancestors = <AstNode>[]; |  | 
| 1893     while (node != null) { |  | 
| 1894       ancestors.add(node); |  | 
| 1895       node = node.parent; |  | 
| 1896     } |  | 
| 1897     _parser._inInitializer = false; |  | 
| 1898     for (int i = ancestors.length - 2; i >= 0; i--) { |  | 
| 1899       _childNode = ancestors[i]; |  | 
| 1900       ancestors[i + 1].accept(this); |  | 
| 1901     } |  | 
| 1902   } |  | 
| 1903 |  | 
| 1904   @override |  | 
| 1905   void visitArgumentList(ArgumentList node) { |  | 
| 1906     _parser._inInitializer = false; |  | 
| 1907   } |  | 
| 1908 |  | 
| 1909   @override |  | 
| 1910   void visitConstructorFieldInitializer(ConstructorFieldInitializer node) { |  | 
| 1911     if (identical(_childNode, node.expression)) { |  | 
| 1912       _parser._inInitializer = true; |  | 
| 1913     } |  | 
| 1914   } |  | 
| 1915 |  | 
| 1916   @override |  | 
| 1917   void visitIndexExpression(IndexExpression node) { |  | 
| 1918     if (identical(_childNode, node.index)) { |  | 
| 1919       _parser._inInitializer = false; |  | 
| 1920     } |  | 
| 1921   } |  | 
| 1922 |  | 
| 1923   @override |  | 
| 1924   void visitInterpolationExpression(InterpolationExpression node) { |  | 
| 1925     if (identical(_childNode, node.expression)) { |  | 
| 1926       _parser._inInitializer = false; |  | 
| 1927     } |  | 
| 1928   } |  | 
| 1929 |  | 
| 1930   @override |  | 
| 1931   void visitListLiteral(ListLiteral node) { |  | 
| 1932     if (node.elements.contains(_childNode)) { |  | 
| 1933       _parser._inInitializer = false; |  | 
| 1934     } |  | 
| 1935   } |  | 
| 1936 |  | 
| 1937   @override |  | 
| 1938   void visitMapLiteral(MapLiteral node) { |  | 
| 1939     if (node.entries.contains(_childNode)) { |  | 
| 1940       _parser._inInitializer = false; |  | 
| 1941     } |  | 
| 1942   } |  | 
| 1943 |  | 
| 1944   @override |  | 
| 1945   void visitParenthesizedExpression(ParenthesizedExpression node) { |  | 
| 1946     if (identical(_childNode, node.expression)) { |  | 
| 1947       _parser._inInitializer = false; |  | 
| 1948     } |  | 
| 1949   } |  | 
| 1950 } |  | 
| 1951 |  | 
| 1952 /** |  | 
| 1953  * An exception indicating that an AST node cannot be re-parsed because there is |  | 
| 1954  * not enough context to know how to re-parse the node. Clients can attempt to |  | 
| 1955  * re-parse the parent of the node. |  | 
| 1956  */ |  | 
| 1957 @deprecated |  | 
| 1958 class InsufficientContextException extends IncrementalParseException { |  | 
| 1959   InsufficientContextException([String message = '']) : super(message); |  | 
| 1960 } |  | 
| 1961 |  | 
| 1962 /** |  | 
| 1963  * Wrapper around [Function] which should be called with "target" and | 534  * Wrapper around [Function] which should be called with "target" and | 
| 1964  * "arguments". | 535  * "arguments". | 
| 1965  */ | 536  */ | 
| 1966 class MethodTrampoline { | 537 class MethodTrampoline { | 
| 1967   int parameterCount; | 538   int parameterCount; | 
| 1968   Function trampoline; | 539   Function trampoline; | 
| 1969   MethodTrampoline(this.parameterCount, this.trampoline); | 540   MethodTrampoline(this.parameterCount, this.trampoline); | 
| 1970   Object invoke(target, List arguments) { | 541   Object invoke(target, List arguments) { | 
| 1971     if (arguments.length != parameterCount) { | 542     if (arguments.length != parameterCount) { | 
| 1972       throw new ArgumentError("${arguments.length} != $parameterCount"); | 543       throw new ArgumentError("${arguments.length} != $parameterCount"); | 
| (...skipping 8538 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 10511    */ | 9082    */ | 
| 10512   const ParserErrorCode(String name, String message, [String correction]) | 9083   const ParserErrorCode(String name, String message, [String correction]) | 
| 10513       : super(name, message, correction); | 9084       : super(name, message, correction); | 
| 10514 | 9085 | 
| 10515   @override | 9086   @override | 
| 10516   ErrorSeverity get errorSeverity => ErrorSeverity.ERROR; | 9087   ErrorSeverity get errorSeverity => ErrorSeverity.ERROR; | 
| 10517 | 9088 | 
| 10518   @override | 9089   @override | 
| 10519   ErrorType get type => ErrorType.SYNTACTIC_ERROR; | 9090   ErrorType get type => ErrorType.SYNTACTIC_ERROR; | 
| 10520 } | 9091 } | 
| OLD | NEW | 
|---|