| Index: pkg/analyzer/lib/src/generated/parser.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
|
| index 21327613f0d5f99eed7583ac26797b31dca3b35e..8e7bbe183cd00f3c6b07718bf878abdd9f03d63c 100644
|
| --- a/pkg/analyzer/lib/src/generated/parser.dart
|
| +++ b/pkg/analyzer/lib/src/generated/parser.dart
|
| @@ -9,10 +9,8 @@ import "dart:math" as math;
|
|
|
| import 'package:analyzer/dart/ast/ast.dart';
|
| import 'package:analyzer/dart/ast/token.dart';
|
| -import 'package:analyzer/dart/ast/visitor.dart';
|
| import 'package:analyzer/src/dart/ast/ast.dart';
|
| import 'package:analyzer/src/dart/ast/token.dart';
|
| -import 'package:analyzer/src/dart/ast/utilities.dart';
|
| import 'package:analyzer/src/dart/scanner/reader.dart';
|
| import 'package:analyzer/src/dart/scanner/scanner.dart';
|
| import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
|
| @@ -22,7 +20,6 @@ import 'package:analyzer/src/generated/generated/shared_messages.dart'
|
| import 'package:analyzer/src/generated/java_core.dart';
|
| import 'package:analyzer/src/generated/java_engine.dart';
|
| import 'package:analyzer/src/generated/source.dart';
|
| -import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap;
|
| import 'package:analyzer/src/generated/utilities_dart.dart';
|
|
|
| export 'package:analyzer/src/dart/ast/utilities.dart' show ResolutionCopier;
|
| @@ -534,1432 +531,6 @@ class FinalConstVarOrType {
|
| }
|
|
|
| /**
|
| - * A dispatcher that will invoke the right parse method when re-parsing a
|
| - * specified child of the visited node. All of the methods in this class assume
|
| - * that the parser is positioned to parse the replacement for the node. All of
|
| - * the methods will throw an [IncrementalParseException] if the node could not
|
| - * be parsed for some reason.
|
| - */
|
| -@deprecated
|
| -class IncrementalParseDispatcher implements AstVisitor<AstNode> {
|
| - /**
|
| - * The parser used to parse the replacement for the node.
|
| - */
|
| - final Parser _parser;
|
| -
|
| - /**
|
| - * The node that is to be replaced.
|
| - */
|
| - final AstNode _oldNode;
|
| -
|
| - /**
|
| - * Initialize a newly created dispatcher to parse a single node that will
|
| - * use the [_parser] to replace the [_oldNode].
|
| - */
|
| - IncrementalParseDispatcher(this._parser, this._oldNode);
|
| -
|
| - @override
|
| - AstNode visitAdjacentStrings(AdjacentStrings node) {
|
| - if (node.strings.contains(_oldNode)) {
|
| - return _parser.parseStringLiteral();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitAnnotation(Annotation node) {
|
| - if (identical(_oldNode, node.name)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.constructorName)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.arguments)) {
|
| - return _parser.parseArgumentList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitArgumentList(ArgumentList node) {
|
| - if (node.arguments.contains(_oldNode)) {
|
| - return _parser.parseArgument();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitAsExpression(AsExpression node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseBitwiseOrExpression();
|
| - } else if (identical(_oldNode, node.type)) {
|
| - return _parser.parseTypeName();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitAssertStatement(AssertStatement node) {
|
| - if (identical(_oldNode, node.condition)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - if (identical(_oldNode, node.message)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitAssignmentExpression(AssignmentExpression node) {
|
| - if (identical(_oldNode, node.leftHandSide)) {
|
| - // TODO(brianwilkerson) If the assignment is part of a cascade section,
|
| - // then we don't have a single parse method that will work.
|
| - // Otherwise, we can parse a conditional expression, but need to ensure
|
| - // that the resulting expression is assignable.
|
| -// return parser.parseConditionalExpression();
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.rightHandSide)) {
|
| - if (_isCascadeAllowedInAssignment(node)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _parser.parseExpressionWithoutCascade();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitAwaitExpression(AwaitExpression node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - // TODO(brianwilkerson) Depending on precedence,
|
| - // this might not be sufficient.
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitBinaryExpression(BinaryExpression node) {
|
| - if (identical(_oldNode, node.leftOperand)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.rightOperand)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitBlock(Block node) {
|
| - if (node.statements.contains(_oldNode)) {
|
| - return _parser.parseStatement2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitBlockFunctionBody(BlockFunctionBody node) {
|
| - if (identical(_oldNode, node.block)) {
|
| - return _parser.parseBlock();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitBooleanLiteral(BooleanLiteral node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitBreakStatement(BreakStatement node) {
|
| - if (identical(_oldNode, node.label)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitCascadeExpression(CascadeExpression node) {
|
| - if (identical(_oldNode, node.target)) {
|
| - return _parser.parseConditionalExpression();
|
| - } else if (node.cascadeSections.contains(_oldNode)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitCatchClause(CatchClause node) {
|
| - if (identical(_oldNode, node.exceptionType)) {
|
| - return _parser.parseTypeName();
|
| - } else if (identical(_oldNode, node.exceptionParameter)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.stackTraceParameter)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.body)) {
|
| - return _parser.parseBlock();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitClassDeclaration(ClassDeclaration node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - // Changing the class name changes whether a member is interpreted as a
|
| - // constructor or not, so we'll just have to re-parse the entire class.
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.typeParameters)) {
|
| - return _parser.parseTypeParameterList();
|
| - } else if (identical(_oldNode, node.extendsClause)) {
|
| - return _parser.parseExtendsClause();
|
| - } else if (identical(_oldNode, node.withClause)) {
|
| - return _parser.parseWithClause();
|
| - } else if (identical(_oldNode, node.implementsClause)) {
|
| - return _parser.parseImplementsClause();
|
| - } else if (node.members.contains(_oldNode)) {
|
| - ClassMember member = _parser.parseClassMember(node.name.name);
|
| - if (member == null) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return member;
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitClassTypeAlias(ClassTypeAlias node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.typeParameters)) {
|
| - return _parser.parseTypeParameterList();
|
| - } else if (identical(_oldNode, node.superclass)) {
|
| - return _parser.parseTypeName();
|
| - } else if (identical(_oldNode, node.withClause)) {
|
| - return _parser.parseWithClause();
|
| - } else if (identical(_oldNode, node.implementsClause)) {
|
| - return _parser.parseImplementsClause();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitComment(Comment node) {
|
| - throw new InsufficientContextException();
|
| - }
|
| -
|
| - @override
|
| - AstNode visitCommentReference(CommentReference node) {
|
| - if (identical(_oldNode, node.identifier)) {
|
| - return _parser.parsePrefixedIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitCompilationUnit(CompilationUnit node) {
|
| - throw new InsufficientContextException();
|
| - }
|
| -
|
| - @override
|
| - AstNode visitConditionalExpression(ConditionalExpression node) {
|
| - if (identical(_oldNode, node.condition)) {
|
| - return _parser.parseIfNullExpression();
|
| - } else if (identical(_oldNode, node.thenExpression)) {
|
| - return _parser.parseExpressionWithoutCascade();
|
| - } else if (identical(_oldNode, node.elseExpression)) {
|
| - return _parser.parseExpressionWithoutCascade();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitConfiguration(Configuration node) {
|
| - if (identical(_oldNode, node.name)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.value)) {
|
| - return _parser.parseStringLiteral();
|
| - } else if (identical(_oldNode, node.libraryUri)) {
|
| - return _parser.parseStringLiteral();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitConstructorDeclaration(ConstructorDeclaration node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.returnType)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.parameters)) {
|
| - return _parser.parseFormalParameterList();
|
| - } else if (identical(_oldNode, node.redirectedConstructor)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.initializers.contains(_oldNode)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.body)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
|
| - if (identical(_oldNode, node.fieldName)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - } else if (identical(_oldNode, node.expression)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitConstructorName(ConstructorName node) {
|
| - if (identical(_oldNode, node.type)) {
|
| - return _parser.parseTypeName();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitContinueStatement(ContinueStatement node) {
|
| - if (identical(_oldNode, node.label)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitDeclaredIdentifier(DeclaredIdentifier node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.type)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.identifier)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitDefaultFormalParameter(DefaultFormalParameter node) {
|
| - if (identical(_oldNode, node.parameter)) {
|
| - return _parser.parseNormalFormalParameter();
|
| - } else if (identical(_oldNode, node.defaultValue)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitDoStatement(DoStatement node) {
|
| - if (identical(_oldNode, node.body)) {
|
| - return _parser.parseStatement2();
|
| - } else if (identical(_oldNode, node.condition)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitDottedName(DottedName node) {
|
| - if (node.components.contains(_oldNode)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitDoubleLiteral(DoubleLiteral node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitEmptyFunctionBody(EmptyFunctionBody node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitEmptyStatement(EmptyStatement node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitEnumConstantDeclaration(EnumConstantDeclaration node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitEnumDeclaration(EnumDeclaration node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (node.constants.contains(_oldNode)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitExportDirective(ExportDirective node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.uri)) {
|
| - return _parser.parseStringLiteral();
|
| - } else if (node.combinators.contains(_oldNode)) {
|
| - throw new IncrementalParseException();
|
| - //return parser.parseCombinator();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitExpressionFunctionBody(ExpressionFunctionBody node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitExpressionStatement(ExpressionStatement node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitExtendsClause(ExtendsClause node) {
|
| - if (identical(_oldNode, node.superclass)) {
|
| - return _parser.parseTypeName();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitFieldDeclaration(FieldDeclaration node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.fields)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitFieldFormalParameter(FieldFormalParameter node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.type)) {
|
| - return _parser.parseTypeName();
|
| - } else if (identical(_oldNode, node.identifier)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - } else if (identical(_oldNode, node.parameters)) {
|
| - return _parser.parseFormalParameterList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitForEachStatement(ForEachStatement node) {
|
| - if (identical(_oldNode, node.loopVariable)) {
|
| - throw new InsufficientContextException();
|
| - //return parser.parseDeclaredIdentifier();
|
| - } else if (identical(_oldNode, node.identifier)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.body)) {
|
| - return _parser.parseStatement2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitFormalParameterList(FormalParameterList node) {
|
| - // We don't know which kind of parameter to parse.
|
| - throw new InsufficientContextException();
|
| - }
|
| -
|
| - @override
|
| - AstNode visitForStatement(ForStatement node) {
|
| - if (identical(_oldNode, node.variables)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.initialization)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.condition)) {
|
| - return _parser.parseExpression2();
|
| - } else if (node.updaters.contains(_oldNode)) {
|
| - return _parser.parseExpression2();
|
| - } else if (identical(_oldNode, node.body)) {
|
| - return _parser.parseStatement2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitFunctionDeclaration(FunctionDeclaration node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.returnType)) {
|
| - return _parser.parseReturnType();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.functionExpression)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
|
| - if (identical(_oldNode, node.functionDeclaration)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitFunctionExpression(FunctionExpression node) {
|
| - if (identical(_oldNode, node.parameters)) {
|
| - return _parser.parseFormalParameterList();
|
| - } else if (identical(_oldNode, node.body)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
|
| - if (identical(_oldNode, node.function)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.argumentList)) {
|
| - return _parser.parseArgumentList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitFunctionTypeAlias(FunctionTypeAlias node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.returnType)) {
|
| - return _parser.parseReturnType();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.typeParameters)) {
|
| - return _parser.parseTypeParameterList();
|
| - } else if (identical(_oldNode, node.parameters)) {
|
| - return _parser.parseFormalParameterList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.returnType)) {
|
| - return _parser.parseReturnType();
|
| - } else if (identical(_oldNode, node.identifier)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.parameters)) {
|
| - return _parser.parseFormalParameterList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitHideCombinator(HideCombinator node) {
|
| - if (node.hiddenNames.contains(_oldNode)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitIfStatement(IfStatement node) {
|
| - if (identical(_oldNode, node.condition)) {
|
| - return _parser.parseExpression2();
|
| - } else if (identical(_oldNode, node.thenStatement)) {
|
| - return _parser.parseStatement2();
|
| - } else if (identical(_oldNode, node.elseStatement)) {
|
| - return _parser.parseStatement2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitImplementsClause(ImplementsClause node) {
|
| - if (node.interfaces.contains(node)) {
|
| - return _parser.parseTypeName();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitImportDirective(ImportDirective node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.uri)) {
|
| - return _parser.parseStringLiteral();
|
| - } else if (identical(_oldNode, node.prefix)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (node.combinators.contains(_oldNode)) {
|
| - return _parser.parseCombinator();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitIndexExpression(IndexExpression node) {
|
| - if (identical(_oldNode, node.target)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.index)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitInstanceCreationExpression(InstanceCreationExpression node) {
|
| - if (identical(_oldNode, node.constructorName)) {
|
| - return _parser.parseConstructorName();
|
| - } else if (identical(_oldNode, node.argumentList)) {
|
| - return _parser.parseArgumentList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitIntegerLiteral(IntegerLiteral node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitInterpolationExpression(InterpolationExpression node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - if (node.leftBracket == null) {
|
| - throw new InsufficientContextException();
|
| - //return parser.parseThisOrSimpleIdentifier();
|
| - }
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitInterpolationString(InterpolationString node) {
|
| - throw new InsufficientContextException();
|
| - }
|
| -
|
| - @override
|
| - AstNode visitIsExpression(IsExpression node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseBitwiseOrExpression();
|
| - } else if (identical(_oldNode, node.type)) {
|
| - return _parser.parseTypeName();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitLabel(Label node) {
|
| - if (identical(_oldNode, node.label)) {
|
| - return _parser.parseSimpleIdentifier(
|
| - isDeclaration: node.parent is LabeledStatement);
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitLabeledStatement(LabeledStatement node) {
|
| - if (node.labels.contains(_oldNode)) {
|
| - return _parser.parseLabel(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.statement)) {
|
| - return _parser.parseStatement2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitLibraryDirective(LibraryDirective node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - return _parser.parseLibraryIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitLibraryIdentifier(LibraryIdentifier node) {
|
| - if (node.components.contains(_oldNode)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitListLiteral(ListLiteral node) {
|
| - if (identical(_oldNode, node.typeArguments)) {
|
| - return _parser.parseTypeArgumentList();
|
| - } else if (node.elements.contains(_oldNode)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitMapLiteral(MapLiteral node) {
|
| - if (identical(_oldNode, node.typeArguments)) {
|
| - return _parser.parseTypeArgumentList();
|
| - } else if (node.entries.contains(_oldNode)) {
|
| - return _parser.parseMapLiteralEntry();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitMapLiteralEntry(MapLiteralEntry node) {
|
| - if (identical(_oldNode, node.key)) {
|
| - return _parser.parseExpression2();
|
| - } else if (identical(_oldNode, node.value)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitMethodDeclaration(MethodDeclaration node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.returnType)) {
|
| - throw new InsufficientContextException();
|
| - //return parser.parseTypeName();
|
| - //return parser.parseReturnType();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - if (node.operatorKeyword != null) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.body)) {
|
| - //return parser.parseFunctionBody();
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.parameters)) {
|
| - // TODO(paulberry): if we want errors to be correct, we'll need to also
|
| - // call _validateFormalParameterList, and sometimes
|
| - // _validateModifiersForGetterOrSetterOrMethod.
|
| - return _parser.parseFormalParameterList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitMethodInvocation(MethodInvocation node) {
|
| - if (identical(_oldNode, node.target)) {
|
| - throw new IncrementalParseException();
|
| - } else if (identical(_oldNode, node.methodName)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - } else if (identical(_oldNode, node.argumentList)) {
|
| - return _parser.parseArgumentList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitNamedExpression(NamedExpression node) {
|
| - if (identical(_oldNode, node.name)) {
|
| - return _parser.parseLabel();
|
| - } else if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitNativeClause(NativeClause node) {
|
| - if (identical(_oldNode, node.name)) {
|
| - return _parser.parseStringLiteral();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitNativeFunctionBody(NativeFunctionBody node) {
|
| - if (identical(_oldNode, node.stringLiteral)) {
|
| - return _parser.parseStringLiteral();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitNullLiteral(NullLiteral node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitParenthesizedExpression(ParenthesizedExpression node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitPartDirective(PartDirective node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.uri)) {
|
| - return _parser.parseStringLiteral();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitPartOfDirective(PartOfDirective node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.libraryName)) {
|
| - return _parser.parseLibraryIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitPostfixExpression(PostfixExpression node) {
|
| - if (identical(_oldNode, node.operand)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitPrefixedIdentifier(PrefixedIdentifier node) {
|
| - if (identical(_oldNode, node.prefix)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - } else if (identical(_oldNode, node.identifier)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitPrefixExpression(PrefixExpression node) {
|
| - if (identical(_oldNode, node.operand)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitPropertyAccess(PropertyAccess node) {
|
| - if (identical(_oldNode, node.target)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.propertyName)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitRedirectingConstructorInvocation(
|
| - RedirectingConstructorInvocation node) {
|
| - if (identical(_oldNode, node.constructorName)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - } else if (identical(_oldNode, node.argumentList)) {
|
| - return _parser.parseArgumentList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitRethrowExpression(RethrowExpression node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitReturnStatement(ReturnStatement node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitScriptTag(ScriptTag node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitShowCombinator(ShowCombinator node) {
|
| - if (node.shownNames.contains(_oldNode)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitSimpleFormalParameter(SimpleFormalParameter node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.type)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.identifier)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitSimpleIdentifier(SimpleIdentifier node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitSimpleStringLiteral(SimpleStringLiteral node) =>
|
| - _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitStringInterpolation(StringInterpolation node) {
|
| - if (node.elements.contains(_oldNode)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitSuperConstructorInvocation(SuperConstructorInvocation node) {
|
| - if (identical(_oldNode, node.constructorName)) {
|
| - return _parser.parseSimpleIdentifier();
|
| - } else if (identical(_oldNode, node.argumentList)) {
|
| - return _parser.parseArgumentList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitSuperExpression(SuperExpression node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitSwitchCase(SwitchCase node) {
|
| - if (node.labels.contains(_oldNode)) {
|
| - return _parser.parseLabel();
|
| - } else if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseExpression2();
|
| - } else if (node.statements.contains(_oldNode)) {
|
| - return _parser.parseStatement2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitSwitchDefault(SwitchDefault node) {
|
| - if (node.labels.contains(_oldNode)) {
|
| - return _parser.parseLabel();
|
| - } else if (node.statements.contains(_oldNode)) {
|
| - return _parser.parseStatement2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitSwitchStatement(SwitchStatement node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseExpression2();
|
| - } else if (node.members.contains(_oldNode)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitSymbolLiteral(SymbolLiteral node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitThisExpression(ThisExpression node) => _notAChild(node);
|
| -
|
| - @override
|
| - AstNode visitThrowExpression(ThrowExpression node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - if (_isCascadeAllowedInThrow(node)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _parser.parseExpressionWithoutCascade();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.variables)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitTryStatement(TryStatement node) {
|
| - if (identical(_oldNode, node.body)) {
|
| - return _parser.parseBlock();
|
| - } else if (node.catchClauses.contains(_oldNode)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.finallyBlock)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitTypeArgumentList(TypeArgumentList node) {
|
| - if (node.arguments.contains(_oldNode)) {
|
| - return _parser.parseTypeName();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitTypeName(TypeName node) {
|
| - if (identical(_oldNode, node.name)) {
|
| - return _parser.parsePrefixedIdentifier();
|
| - } else if (identical(_oldNode, node.typeArguments)) {
|
| - return _parser.parseTypeArgumentList();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitTypeParameter(TypeParameter node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - return _parser.parseSimpleIdentifier(isDeclaration: true);
|
| - } else if (identical(_oldNode, node.bound)) {
|
| - return _parser.parseTypeName();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitTypeParameterList(TypeParameterList node) {
|
| - if (node.typeParameters.contains(node)) {
|
| - return _parser.parseTypeParameter();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitVariableDeclaration(VariableDeclaration node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.name)) {
|
| - throw new InsufficientContextException();
|
| - } else if (identical(_oldNode, node.initializer)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitVariableDeclarationList(VariableDeclarationList node) {
|
| - if (identical(_oldNode, node.documentationComment)) {
|
| - throw new InsufficientContextException();
|
| - } else if (node.metadata.contains(_oldNode)) {
|
| - return _parser.parseAnnotation();
|
| - } else if (identical(_oldNode, node.type)) {
|
| - // There is not enough context to know whether we should reparse the type
|
| - // using parseReturnType() (which allows 'void') or parseTypeName()
|
| - // (which doesn't). Note that even though the language disallows
|
| - // variables of type 'void', the parser sometimes accepts them in the
|
| - // course of error recovery (e.g. "class C { void v; }"
|
| - throw new InsufficientContextException();
|
| - } else if (node.variables.contains(_oldNode)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitVariableDeclarationStatement(VariableDeclarationStatement node) {
|
| - if (identical(_oldNode, node.variables)) {
|
| - throw new InsufficientContextException();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitWhileStatement(WhileStatement node) {
|
| - if (identical(_oldNode, node.condition)) {
|
| - return _parser.parseExpression2();
|
| - } else if (identical(_oldNode, node.body)) {
|
| - return _parser.parseStatement2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitWithClause(WithClause node) {
|
| - if (node.mixinTypes.contains(node)) {
|
| - return _parser.parseTypeName();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - @override
|
| - AstNode visitYieldStatement(YieldStatement node) {
|
| - if (identical(_oldNode, node.expression)) {
|
| - return _parser.parseExpression2();
|
| - }
|
| - return _notAChild(node);
|
| - }
|
| -
|
| - /**
|
| - * Return `true` if the given assignment [expression] can have a cascade
|
| - * expression on the right-hand side.
|
| - */
|
| - bool _isCascadeAllowedInAssignment(AssignmentExpression expression) {
|
| - // TODO(brianwilkerson) Implement this method.
|
| - throw new InsufficientContextException();
|
| - }
|
| -
|
| - /**
|
| - * Return `true` if the given throw [expression] can have a cascade
|
| - * expression.
|
| - */
|
| - bool _isCascadeAllowedInThrow(ThrowExpression expression) {
|
| - // TODO(brianwilkerson) Implement this method.
|
| - throw new InsufficientContextException();
|
| - }
|
| -
|
| - /**
|
| - * Throw an exception indicating that the visited [node] was not the parent of
|
| - * the node to be replaced.
|
| - */
|
| - AstNode _notAChild(AstNode node) {
|
| - throw new IncrementalParseException(
|
| - "Internal error: the visited node (a ${node.runtimeType}) was not the parent of the node to be replaced (a ${_oldNode.runtimeType})");
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * An exception that occurred while attempting to parse a replacement for a
|
| - * specified node in an existing AST structure.
|
| - */
|
| -@deprecated
|
| -class IncrementalParseException {
|
| - final String message;
|
| - IncrementalParseException([this.message = '']);
|
| - String toString() => '$runtimeType: $message';
|
| -}
|
| -
|
| -/**
|
| - * An object used to re-parse a single AST structure within a larger AST
|
| - * structure.
|
| - */
|
| -@deprecated
|
| -class IncrementalParser {
|
| - /**
|
| - * The source being parsed.
|
| - */
|
| - final Source _source;
|
| -
|
| - /**
|
| - * A map from old tokens to new tokens used during the cloning process.
|
| - */
|
| - final TokenMap _tokenMap;
|
| -
|
| - /**
|
| - * The error listener that will be informed of any errors that are found
|
| - * during the parse.
|
| - */
|
| - final AnalysisErrorListener _errorListener;
|
| -
|
| - /**
|
| - * The node in the AST structure that contains the revised content.
|
| - */
|
| - AstNode _updatedNode;
|
| -
|
| - /**
|
| - * Initialize a newly created incremental parser to parse a portion of the
|
| - * content of the given [_source]. The [_tokenMap] is a map from old tokens to
|
| - * new tokens that is used during the cloning process. The [_errorListener]
|
| - * will be informed of any errors that are found during the parse.
|
| - */
|
| - IncrementalParser(this._source, this._tokenMap, this._errorListener);
|
| -
|
| - /**
|
| - * Return the node in the AST structure that contains the revised content.
|
| - */
|
| - AstNode get updatedNode => _updatedNode;
|
| -
|
| - /**
|
| - * Given a range of tokens that were re-scanned, re-parse the minimum number
|
| - * of tokens to produce a consistent AST structure. The range is represented
|
| - * by the first and last tokens in the range.
|
| - *
|
| - * More specifically, the [leftToken] is the token in the new token stream
|
| - * immediately to the left of the range of tokens that were inserted and the
|
| - * [rightToken] is the token in the new token stream immediately to the right
|
| - * of the range of tokens that were inserted. The [originalStart] and
|
| - * [originalEnd] are the offsets in the original source of the first and last
|
| - * characters that were modified.
|
| - *
|
| - * The tokens are assumed to be contained in the same token stream.
|
| - */
|
| - AstNode reparse(AstNode originalStructure, Token leftToken, Token rightToken,
|
| - int originalStart, int originalEnd) {
|
| - AstNode oldNode = null;
|
| - AstNode newNode = null;
|
| - //
|
| - // Find the first token that needs to be re-parsed.
|
| - //
|
| - Token firstToken = leftToken.next;
|
| - if (identical(firstToken, rightToken)) {
|
| - // If there are no new tokens, then we need to include at least one copied
|
| - // node in the range.
|
| - firstToken = leftToken;
|
| - }
|
| - //
|
| - // Find the smallest AST node that encompasses the range of re-scanned
|
| - // tokens.
|
| - //
|
| - if (originalEnd < originalStart) {
|
| - oldNode = new NodeLocator(originalStart).searchWithin(originalStructure);
|
| - } else {
|
| - oldNode = new NodeLocator(originalStart, originalEnd)
|
| - .searchWithin(originalStructure);
|
| - }
|
| - //
|
| - // Find the token at which parsing is to begin.
|
| - //
|
| - int originalOffset = oldNode.offset;
|
| - Token parseToken = _findTokenAt(firstToken, originalOffset);
|
| - if (parseToken == null) {
|
| - return null;
|
| - }
|
| - //
|
| - // Parse the appropriate AST structure starting at the appropriate place.
|
| - //
|
| - Parser parser = new Parser(_source, _errorListener);
|
| - parser.currentToken = parseToken;
|
| - while (newNode == null) {
|
| - AstNode parent = oldNode.parent;
|
| - if (parent == null) {
|
| - parseToken = _findFirstToken(parseToken);
|
| - parser.currentToken = parseToken;
|
| - return parser.parseCompilationUnit2();
|
| - }
|
| - bool advanceToParent = false;
|
| - try {
|
| - IncrementalParseDispatcher dispatcher =
|
| - new IncrementalParseDispatcher(parser, oldNode);
|
| - IncrementalParseStateBuilder contextBuilder =
|
| - new IncrementalParseStateBuilder(parser);
|
| - contextBuilder.buildState(oldNode);
|
| - newNode = parent.accept(dispatcher);
|
| - //
|
| - // Validate that the new node can replace the old node.
|
| - //
|
| - Token mappedToken = _tokenMap.get(oldNode.endToken.next);
|
| - if (mappedToken == null ||
|
| - newNode == null ||
|
| - mappedToken.offset != newNode.endToken.next.offset ||
|
| - newNode.offset != oldNode.offset) {
|
| - advanceToParent = true;
|
| - }
|
| - } on InsufficientContextException {
|
| - advanceToParent = true;
|
| - } catch (exception) {
|
| - return null;
|
| - }
|
| - if (advanceToParent) {
|
| - newNode = null;
|
| - oldNode = parent;
|
| - originalOffset = oldNode.offset;
|
| - parseToken = _findTokenAt(parseToken, originalOffset);
|
| - parser.currentToken = parseToken;
|
| - }
|
| - }
|
| - _updatedNode = newNode;
|
| - //
|
| - // Replace the old node with the new node in a copy of the original AST
|
| - // structure.
|
| - //
|
| - if (identical(oldNode, originalStructure)) {
|
| - // We ended up re-parsing the whole structure, so there's no need for a
|
| - // copy.
|
| - ResolutionCopier.copyResolutionData(oldNode, newNode);
|
| - return newNode;
|
| - }
|
| - ResolutionCopier.copyResolutionData(oldNode, newNode);
|
| - IncrementalAstCloner cloner =
|
| - new IncrementalAstCloner(oldNode, newNode, _tokenMap);
|
| - return originalStructure.accept(cloner);
|
| - }
|
| -
|
| - /**
|
| - * Return the first (non-EOF) token in the token stream containing the
|
| - * [firstToken].
|
| - */
|
| - Token _findFirstToken(Token firstToken) {
|
| - while (firstToken.type != TokenType.EOF) {
|
| - firstToken = firstToken.previous;
|
| - }
|
| - return firstToken.next;
|
| - }
|
| -
|
| - /**
|
| - * Find the token at or before the [firstToken] with the given [offset], or
|
| - * `null` if there is no such token.
|
| - */
|
| - Token _findTokenAt(Token firstToken, int offset) {
|
| - while (firstToken.offset > offset && firstToken.type != TokenType.EOF) {
|
| - firstToken = firstToken.previous;
|
| - }
|
| - return firstToken;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * A visitor capable of inferring the correct parser state for incremental
|
| - * parsing. This visitor visits each parent/child relationship in the chain of
|
| - * ancestors of the node to be replaced (starting with the root of the parse
|
| - * tree), updating the parser to the correct state for parsing the child of the
|
| - * given parent. Once it has visited all of these relationships, the parser
|
| - * will be in the correct state for reparsing the node to be replaced.
|
| - */
|
| -@deprecated
|
| -class IncrementalParseStateBuilder extends SimpleAstVisitor {
|
| - // TODO(paulberry): add support for other pieces of parser state (_inAsync,
|
| - // _inGenerator, _inLoop, and _inSwitch). Note that _inLoop and _inSwitch
|
| - // only affect error message generation.
|
| -
|
| - /**
|
| - * The parser whose state should be built.
|
| - */
|
| - final Parser _parser;
|
| -
|
| - /**
|
| - * The child node in the parent/child relationship currently being visited.
|
| - * (The corresponding parent is the node passed to the visit...() function.)
|
| - */
|
| - AstNode _childNode;
|
| -
|
| - /**
|
| - * Create an IncrementalParseStateBuilder which will build the correct state
|
| - * for [_parser].
|
| - */
|
| - IncrementalParseStateBuilder(this._parser);
|
| -
|
| - /**
|
| - * Build the correct parser state for parsing a replacement for [node].
|
| - */
|
| - void buildState(AstNode node) {
|
| - List<AstNode> ancestors = <AstNode>[];
|
| - while (node != null) {
|
| - ancestors.add(node);
|
| - node = node.parent;
|
| - }
|
| - _parser._inInitializer = false;
|
| - for (int i = ancestors.length - 2; i >= 0; i--) {
|
| - _childNode = ancestors[i];
|
| - ancestors[i + 1].accept(this);
|
| - }
|
| - }
|
| -
|
| - @override
|
| - void visitArgumentList(ArgumentList node) {
|
| - _parser._inInitializer = false;
|
| - }
|
| -
|
| - @override
|
| - void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
|
| - if (identical(_childNode, node.expression)) {
|
| - _parser._inInitializer = true;
|
| - }
|
| - }
|
| -
|
| - @override
|
| - void visitIndexExpression(IndexExpression node) {
|
| - if (identical(_childNode, node.index)) {
|
| - _parser._inInitializer = false;
|
| - }
|
| - }
|
| -
|
| - @override
|
| - void visitInterpolationExpression(InterpolationExpression node) {
|
| - if (identical(_childNode, node.expression)) {
|
| - _parser._inInitializer = false;
|
| - }
|
| - }
|
| -
|
| - @override
|
| - void visitListLiteral(ListLiteral node) {
|
| - if (node.elements.contains(_childNode)) {
|
| - _parser._inInitializer = false;
|
| - }
|
| - }
|
| -
|
| - @override
|
| - void visitMapLiteral(MapLiteral node) {
|
| - if (node.entries.contains(_childNode)) {
|
| - _parser._inInitializer = false;
|
| - }
|
| - }
|
| -
|
| - @override
|
| - void visitParenthesizedExpression(ParenthesizedExpression node) {
|
| - if (identical(_childNode, node.expression)) {
|
| - _parser._inInitializer = false;
|
| - }
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * An exception indicating that an AST node cannot be re-parsed because there is
|
| - * not enough context to know how to re-parse the node. Clients can attempt to
|
| - * re-parse the parent of the node.
|
| - */
|
| -@deprecated
|
| -class InsufficientContextException extends IncrementalParseException {
|
| - InsufficientContextException([String message = '']) : super(message);
|
| -}
|
| -
|
| -/**
|
| * Wrapper around [Function] which should be called with "target" and
|
| * "arguments".
|
| */
|
|
|