Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Side by Side Diff: pkg/analyzer/lib/src/generated/parser.dart

Issue 1791953002: Move ResolutionCopier out of generated (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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'; 12 import 'package:analyzer/dart/ast/visitor.dart';
13 import 'package:analyzer/src/dart/ast/ast.dart'; 13 import 'package:analyzer/src/dart/ast/ast.dart';
14 import 'package:analyzer/src/dart/ast/token.dart'; 14 import 'package:analyzer/src/dart/ast/token.dart';
15 import 'package:analyzer/src/dart/ast/utilities.dart'; 15 import 'package:analyzer/src/dart/ast/utilities.dart';
16 import 'package:analyzer/src/dart/scanner/reader.dart'; 16 import 'package:analyzer/src/dart/scanner/reader.dart';
17 import 'package:analyzer/src/dart/scanner/scanner.dart'; 17 import 'package:analyzer/src/dart/scanner/scanner.dart';
18 import 'package:analyzer/src/generated/engine.dart' 18 import 'package:analyzer/src/generated/engine.dart'
19 show AnalysisEngine, AnalysisOptionsImpl; 19 show AnalysisEngine, AnalysisOptionsImpl;
20 import 'package:analyzer/src/generated/error.dart'; 20 import 'package:analyzer/src/generated/error.dart';
21 import 'package:analyzer/src/generated/generated/shared_messages.dart' 21 import 'package:analyzer/src/generated/generated/shared_messages.dart'
22 as shared_messages; 22 as shared_messages;
23 import 'package:analyzer/src/generated/java_core.dart'; 23 import 'package:analyzer/src/generated/java_core.dart';
24 import 'package:analyzer/src/generated/java_engine.dart'; 24 import 'package:analyzer/src/generated/java_engine.dart';
25 import 'package:analyzer/src/generated/source.dart'; 25 import 'package:analyzer/src/generated/source.dart';
26 import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap; 26 import 'package:analyzer/src/generated/utilities_collection.dart' show TokenMap;
27 import 'package:analyzer/src/generated/utilities_dart.dart'; 27 import 'package:analyzer/src/generated/utilities_dart.dart';
28 28
29 export 'package:analyzer/src/dart/ast/utilities.dart' show ResolutionCopier;
30
29 Map<String, MethodTrampoline> methodTable_Parser = <String, MethodTrampoline>{ 31 Map<String, MethodTrampoline> methodTable_Parser = <String, MethodTrampoline>{
30 'parseCompilationUnit_1': new MethodTrampoline( 32 'parseCompilationUnit_1': new MethodTrampoline(
31 1, (Parser target, arg0) => target.parseCompilationUnit(arg0)), 33 1, (Parser target, arg0) => target.parseCompilationUnit(arg0)),
32 'parseDirectives_1': new MethodTrampoline( 34 'parseDirectives_1': new MethodTrampoline(
33 1, (Parser target, arg0) => target.parseDirectives(arg0)), 35 1, (Parser target, arg0) => target.parseDirectives(arg0)),
34 'parseExpression_1': new MethodTrampoline( 36 'parseExpression_1': new MethodTrampoline(
35 1, (Parser target, arg0) => target.parseExpression(arg0)), 37 1, (Parser target, arg0) => target.parseExpression(arg0)),
36 'parseStatement_1': new MethodTrampoline( 38 'parseStatement_1': new MethodTrampoline(
37 1, (Parser target, arg0) => target.parseStatement(arg0)), 39 1, (Parser target, arg0) => target.parseStatement(arg0)),
38 'parseStatements_1': new MethodTrampoline( 40 'parseStatements_1': new MethodTrampoline(
(...skipping 9893 matching lines...) Expand 10 before | Expand all | Expand 10 after
9932 */ 9934 */
9933 const ParserErrorCode(String name, String message, [String correction]) 9935 const ParserErrorCode(String name, String message, [String correction])
9934 : super(name, message, correction); 9936 : super(name, message, correction);
9935 9937
9936 @override 9938 @override
9937 ErrorSeverity get errorSeverity => ErrorSeverity.ERROR; 9939 ErrorSeverity get errorSeverity => ErrorSeverity.ERROR;
9938 9940
9939 @override 9941 @override
9940 ErrorType get type => ErrorType.SYNTACTIC_ERROR; 9942 ErrorType get type => ErrorType.SYNTACTIC_ERROR;
9941 } 9943 }
9942
9943 /**
9944 * An object that copies resolution information from one AST structure to
9945 * another as long as the structures of the corresponding children of a pair of
9946 * nodes are the same.
9947 */
9948 class ResolutionCopier implements AstVisitor<bool> {
9949 /**
9950 * The AST node with which the node being visited is to be compared. This is
9951 * only valid at the beginning of each visit method (until [isEqualNodes] is
9952 * invoked).
9953 */
9954 AstNode _toNode;
9955
9956 @override
9957 bool visitAdjacentStrings(AdjacentStrings node) {
9958 AdjacentStrings toNode = this._toNode as AdjacentStrings;
9959 if (_isEqualNodeLists(node.strings, toNode.strings)) {
9960 toNode.staticType = node.staticType;
9961 toNode.propagatedType = node.propagatedType;
9962 return true;
9963 }
9964 return false;
9965 }
9966
9967 @override
9968 bool visitAnnotation(Annotation node) {
9969 Annotation toNode = this._toNode as Annotation;
9970 if (_and(
9971 _isEqualTokens(node.atSign, toNode.atSign),
9972 _isEqualNodes(node.name, toNode.name),
9973 _isEqualTokens(node.period, toNode.period),
9974 _isEqualNodes(node.constructorName, toNode.constructorName),
9975 _isEqualNodes(node.arguments, toNode.arguments))) {
9976 toNode.element = node.element;
9977 return true;
9978 }
9979 return false;
9980 }
9981
9982 @override
9983 bool visitArgumentList(ArgumentList node) {
9984 ArgumentList toNode = this._toNode as ArgumentList;
9985 return _and(
9986 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
9987 _isEqualNodeLists(node.arguments, toNode.arguments),
9988 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
9989 }
9990
9991 @override
9992 bool visitAsExpression(AsExpression node) {
9993 AsExpression toNode = this._toNode as AsExpression;
9994 if (_and(
9995 _isEqualNodes(node.expression, toNode.expression),
9996 _isEqualTokens(node.asOperator, toNode.asOperator),
9997 _isEqualNodes(node.type, toNode.type))) {
9998 toNode.propagatedType = node.propagatedType;
9999 toNode.staticType = node.staticType;
10000 return true;
10001 }
10002 return false;
10003 }
10004
10005 @override
10006 bool visitAssertStatement(AssertStatement node) {
10007 AssertStatement toNode = this._toNode as AssertStatement;
10008 return _and(
10009 _isEqualTokens(node.assertKeyword, toNode.assertKeyword),
10010 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10011 _isEqualNodes(node.condition, toNode.condition),
10012 _isEqualTokens(node.comma, toNode.comma),
10013 _isEqualNodes(node.message, toNode.message),
10014 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
10015 _isEqualTokens(node.semicolon, toNode.semicolon));
10016 }
10017
10018 @override
10019 bool visitAssignmentExpression(AssignmentExpression node) {
10020 AssignmentExpression toNode = this._toNode as AssignmentExpression;
10021 if (_and(
10022 _isEqualNodes(node.leftHandSide, toNode.leftHandSide),
10023 _isEqualTokens(node.operator, toNode.operator),
10024 _isEqualNodes(node.rightHandSide, toNode.rightHandSide))) {
10025 toNode.propagatedElement = node.propagatedElement;
10026 toNode.propagatedType = node.propagatedType;
10027 toNode.staticElement = node.staticElement;
10028 toNode.staticType = node.staticType;
10029 return true;
10030 }
10031 return false;
10032 }
10033
10034 @override
10035 bool visitAwaitExpression(AwaitExpression node) {
10036 AwaitExpression toNode = this._toNode as AwaitExpression;
10037 if (_and(_isEqualTokens(node.awaitKeyword, toNode.awaitKeyword),
10038 _isEqualNodes(node.expression, toNode.expression))) {
10039 toNode.propagatedType = node.propagatedType;
10040 toNode.staticType = node.staticType;
10041 return true;
10042 }
10043 return false;
10044 }
10045
10046 @override
10047 bool visitBinaryExpression(BinaryExpression node) {
10048 BinaryExpression toNode = this._toNode as BinaryExpression;
10049 if (_and(
10050 _isEqualNodes(node.leftOperand, toNode.leftOperand),
10051 _isEqualTokens(node.operator, toNode.operator),
10052 _isEqualNodes(node.rightOperand, toNode.rightOperand))) {
10053 toNode.propagatedElement = node.propagatedElement;
10054 toNode.propagatedType = node.propagatedType;
10055 toNode.staticElement = node.staticElement;
10056 toNode.staticType = node.staticType;
10057 return true;
10058 }
10059 return false;
10060 }
10061
10062 @override
10063 bool visitBlock(Block node) {
10064 Block toNode = this._toNode as Block;
10065 return _and(
10066 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10067 _isEqualNodeLists(node.statements, toNode.statements),
10068 _isEqualTokens(node.rightBracket, toNode.rightBracket));
10069 }
10070
10071 @override
10072 bool visitBlockFunctionBody(BlockFunctionBody node) {
10073 BlockFunctionBody toNode = this._toNode as BlockFunctionBody;
10074 return _isEqualNodes(node.block, toNode.block);
10075 }
10076
10077 @override
10078 bool visitBooleanLiteral(BooleanLiteral node) {
10079 BooleanLiteral toNode = this._toNode as BooleanLiteral;
10080 if (_and(_isEqualTokens(node.literal, toNode.literal),
10081 node.value == toNode.value)) {
10082 toNode.propagatedType = node.propagatedType;
10083 toNode.staticType = node.staticType;
10084 return true;
10085 }
10086 return false;
10087 }
10088
10089 @override
10090 bool visitBreakStatement(BreakStatement node) {
10091 BreakStatement toNode = this._toNode as BreakStatement;
10092 if (_and(
10093 _isEqualTokens(node.breakKeyword, toNode.breakKeyword),
10094 _isEqualNodes(node.label, toNode.label),
10095 _isEqualTokens(node.semicolon, toNode.semicolon))) {
10096 // TODO(paulberry): map node.target to toNode.target.
10097 return true;
10098 }
10099 return false;
10100 }
10101
10102 @override
10103 bool visitCascadeExpression(CascadeExpression node) {
10104 CascadeExpression toNode = this._toNode as CascadeExpression;
10105 if (_and(_isEqualNodes(node.target, toNode.target),
10106 _isEqualNodeLists(node.cascadeSections, toNode.cascadeSections))) {
10107 toNode.propagatedType = node.propagatedType;
10108 toNode.staticType = node.staticType;
10109 return true;
10110 }
10111 return false;
10112 }
10113
10114 @override
10115 bool visitCatchClause(CatchClause node) {
10116 CatchClause toNode = this._toNode as CatchClause;
10117 return _and(
10118 _isEqualTokens(node.onKeyword, toNode.onKeyword),
10119 _isEqualNodes(node.exceptionType, toNode.exceptionType),
10120 _isEqualTokens(node.catchKeyword, toNode.catchKeyword),
10121 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10122 _isEqualNodes(node.exceptionParameter, toNode.exceptionParameter),
10123 _isEqualTokens(node.comma, toNode.comma),
10124 _isEqualNodes(node.stackTraceParameter, toNode.stackTraceParameter),
10125 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
10126 _isEqualNodes(node.body, toNode.body));
10127 }
10128
10129 @override
10130 bool visitClassDeclaration(ClassDeclaration node) {
10131 ClassDeclaration toNode = this._toNode as ClassDeclaration;
10132 return _and(
10133 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10134 _isEqualNodeLists(node.metadata, toNode.metadata),
10135 _isEqualTokens(node.abstractKeyword, toNode.abstractKeyword),
10136 _isEqualTokens(node.classKeyword, toNode.classKeyword),
10137 _isEqualNodes(node.name, toNode.name),
10138 _isEqualNodes(node.typeParameters, toNode.typeParameters),
10139 _isEqualNodes(node.extendsClause, toNode.extendsClause),
10140 _isEqualNodes(node.withClause, toNode.withClause),
10141 _isEqualNodes(node.implementsClause, toNode.implementsClause),
10142 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10143 _isEqualNodeLists(node.members, toNode.members),
10144 _isEqualTokens(node.rightBracket, toNode.rightBracket));
10145 }
10146
10147 @override
10148 bool visitClassTypeAlias(ClassTypeAlias node) {
10149 ClassTypeAlias toNode = this._toNode as ClassTypeAlias;
10150 return _and(
10151 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10152 _isEqualNodeLists(node.metadata, toNode.metadata),
10153 _isEqualTokens(node.typedefKeyword, toNode.typedefKeyword),
10154 _isEqualNodes(node.name, toNode.name),
10155 _isEqualNodes(node.typeParameters, toNode.typeParameters),
10156 _isEqualTokens(node.equals, toNode.equals),
10157 _isEqualTokens(node.abstractKeyword, toNode.abstractKeyword),
10158 _isEqualNodes(node.superclass, toNode.superclass),
10159 _isEqualNodes(node.withClause, toNode.withClause),
10160 _isEqualNodes(node.implementsClause, toNode.implementsClause),
10161 _isEqualTokens(node.semicolon, toNode.semicolon));
10162 }
10163
10164 @override
10165 bool visitComment(Comment node) {
10166 Comment toNode = this._toNode as Comment;
10167 return _isEqualNodeLists(node.references, toNode.references);
10168 }
10169
10170 @override
10171 bool visitCommentReference(CommentReference node) {
10172 CommentReference toNode = this._toNode as CommentReference;
10173 return _and(_isEqualTokens(node.newKeyword, toNode.newKeyword),
10174 _isEqualNodes(node.identifier, toNode.identifier));
10175 }
10176
10177 @override
10178 bool visitCompilationUnit(CompilationUnit node) {
10179 CompilationUnit toNode = this._toNode as CompilationUnit;
10180 if (_and(
10181 _isEqualTokens(node.beginToken, toNode.beginToken),
10182 _isEqualNodes(node.scriptTag, toNode.scriptTag),
10183 _isEqualNodeLists(node.directives, toNode.directives),
10184 _isEqualNodeLists(node.declarations, toNode.declarations),
10185 _isEqualTokens(node.endToken, toNode.endToken))) {
10186 toNode.element = node.element;
10187 return true;
10188 }
10189 return false;
10190 }
10191
10192 @override
10193 bool visitConditionalExpression(ConditionalExpression node) {
10194 ConditionalExpression toNode = this._toNode as ConditionalExpression;
10195 if (_and(
10196 _isEqualNodes(node.condition, toNode.condition),
10197 _isEqualTokens(node.question, toNode.question),
10198 _isEqualNodes(node.thenExpression, toNode.thenExpression),
10199 _isEqualTokens(node.colon, toNode.colon),
10200 _isEqualNodes(node.elseExpression, toNode.elseExpression))) {
10201 toNode.propagatedType = node.propagatedType;
10202 toNode.staticType = node.staticType;
10203 return true;
10204 }
10205 return false;
10206 }
10207
10208 @override
10209 bool visitConfiguration(Configuration node) {
10210 Configuration toNode = this._toNode as Configuration;
10211 if (_and(
10212 _isEqualTokens(node.ifKeyword, toNode.ifKeyword),
10213 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10214 _isEqualNodes(node.name, toNode.name),
10215 _isEqualTokens(node.equalToken, toNode.equalToken),
10216 _isEqualNodes(node.value, toNode.value),
10217 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
10218 _isEqualNodes(node.libraryUri, toNode.libraryUri))) {
10219 return true;
10220 }
10221 return false;
10222 }
10223
10224 @override
10225 bool visitConstructorDeclaration(ConstructorDeclaration node) {
10226 ConstructorDeclaration toNode = this._toNode as ConstructorDeclaration;
10227 if (_and(
10228 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10229 _isEqualNodeLists(node.metadata, toNode.metadata),
10230 _isEqualTokens(node.externalKeyword, toNode.externalKeyword),
10231 _isEqualTokens(node.constKeyword, toNode.constKeyword),
10232 _isEqualTokens(node.factoryKeyword, toNode.factoryKeyword),
10233 _isEqualNodes(node.returnType, toNode.returnType),
10234 _isEqualTokens(node.period, toNode.period),
10235 _isEqualNodes(node.name, toNode.name),
10236 _isEqualNodes(node.parameters, toNode.parameters),
10237 _isEqualTokens(node.separator, toNode.separator),
10238 _isEqualNodeLists(node.initializers, toNode.initializers),
10239 _isEqualNodes(node.redirectedConstructor, toNode.redirectedConstructor),
10240 _isEqualNodes(node.body, toNode.body))) {
10241 toNode.element = node.element;
10242 return true;
10243 }
10244 return false;
10245 }
10246
10247 @override
10248 bool visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
10249 ConstructorFieldInitializer toNode =
10250 this._toNode as ConstructorFieldInitializer;
10251 return _and(
10252 _isEqualTokens(node.thisKeyword, toNode.thisKeyword),
10253 _isEqualTokens(node.period, toNode.period),
10254 _isEqualNodes(node.fieldName, toNode.fieldName),
10255 _isEqualTokens(node.equals, toNode.equals),
10256 _isEqualNodes(node.expression, toNode.expression));
10257 }
10258
10259 @override
10260 bool visitConstructorName(ConstructorName node) {
10261 ConstructorName toNode = this._toNode as ConstructorName;
10262 if (_and(
10263 _isEqualNodes(node.type, toNode.type),
10264 _isEqualTokens(node.period, toNode.period),
10265 _isEqualNodes(node.name, toNode.name))) {
10266 toNode.staticElement = node.staticElement;
10267 return true;
10268 }
10269 return false;
10270 }
10271
10272 @override
10273 bool visitContinueStatement(ContinueStatement node) {
10274 ContinueStatement toNode = this._toNode as ContinueStatement;
10275 if (_and(
10276 _isEqualTokens(node.continueKeyword, toNode.continueKeyword),
10277 _isEqualNodes(node.label, toNode.label),
10278 _isEqualTokens(node.semicolon, toNode.semicolon))) {
10279 // TODO(paulberry): map node.target to toNode.target.
10280 return true;
10281 }
10282 return false;
10283 }
10284
10285 @override
10286 bool visitDeclaredIdentifier(DeclaredIdentifier node) {
10287 DeclaredIdentifier toNode = this._toNode as DeclaredIdentifier;
10288 return _and(
10289 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10290 _isEqualNodeLists(node.metadata, toNode.metadata),
10291 _isEqualTokens(node.keyword, toNode.keyword),
10292 _isEqualNodes(node.type, toNode.type),
10293 _isEqualNodes(node.identifier, toNode.identifier));
10294 }
10295
10296 @override
10297 bool visitDefaultFormalParameter(DefaultFormalParameter node) {
10298 DefaultFormalParameter toNode = this._toNode as DefaultFormalParameter;
10299 return _and(
10300 _isEqualNodes(node.parameter, toNode.parameter),
10301 node.kind == toNode.kind,
10302 _isEqualTokens(node.separator, toNode.separator),
10303 _isEqualNodes(node.defaultValue, toNode.defaultValue));
10304 }
10305
10306 @override
10307 bool visitDoStatement(DoStatement node) {
10308 DoStatement toNode = this._toNode as DoStatement;
10309 return _and(
10310 _isEqualTokens(node.doKeyword, toNode.doKeyword),
10311 _isEqualNodes(node.body, toNode.body),
10312 _isEqualTokens(node.whileKeyword, toNode.whileKeyword),
10313 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10314 _isEqualNodes(node.condition, toNode.condition),
10315 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
10316 _isEqualTokens(node.semicolon, toNode.semicolon));
10317 }
10318
10319 @override
10320 bool visitDottedName(DottedName node) {
10321 DottedName toNode = this._toNode as DottedName;
10322 return _isEqualNodeLists(node.components, toNode.components);
10323 }
10324
10325 @override
10326 bool visitDoubleLiteral(DoubleLiteral node) {
10327 DoubleLiteral toNode = this._toNode as DoubleLiteral;
10328 if (_and(_isEqualTokens(node.literal, toNode.literal),
10329 node.value == toNode.value)) {
10330 toNode.propagatedType = node.propagatedType;
10331 toNode.staticType = node.staticType;
10332 return true;
10333 }
10334 return false;
10335 }
10336
10337 @override
10338 bool visitEmptyFunctionBody(EmptyFunctionBody node) {
10339 EmptyFunctionBody toNode = this._toNode as EmptyFunctionBody;
10340 return _isEqualTokens(node.semicolon, toNode.semicolon);
10341 }
10342
10343 @override
10344 bool visitEmptyStatement(EmptyStatement node) {
10345 EmptyStatement toNode = this._toNode as EmptyStatement;
10346 return _isEqualTokens(node.semicolon, toNode.semicolon);
10347 }
10348
10349 @override
10350 bool visitEnumConstantDeclaration(EnumConstantDeclaration node) {
10351 EnumConstantDeclaration toNode = this._toNode as EnumConstantDeclaration;
10352 return _and(
10353 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10354 _isEqualNodeLists(node.metadata, toNode.metadata),
10355 _isEqualNodes(node.name, toNode.name));
10356 }
10357
10358 @override
10359 bool visitEnumDeclaration(EnumDeclaration node) {
10360 EnumDeclaration toNode = this._toNode as EnumDeclaration;
10361 return _and(
10362 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10363 _isEqualNodeLists(node.metadata, toNode.metadata),
10364 _isEqualTokens(node.enumKeyword, toNode.enumKeyword),
10365 _isEqualNodes(node.name, toNode.name),
10366 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10367 _isEqualNodeLists(node.constants, toNode.constants),
10368 _isEqualTokens(node.rightBracket, toNode.rightBracket));
10369 }
10370
10371 @override
10372 bool visitExportDirective(ExportDirective node) {
10373 ExportDirective toNode = this._toNode as ExportDirective;
10374 if (_and(
10375 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10376 _isEqualNodeLists(node.metadata, toNode.metadata),
10377 _isEqualTokens(node.keyword, toNode.keyword),
10378 _isEqualNodes(node.uri, toNode.uri),
10379 _isEqualNodeLists(node.combinators, toNode.combinators),
10380 _isEqualTokens(node.semicolon, toNode.semicolon))) {
10381 toNode.element = node.element;
10382 return true;
10383 }
10384 return false;
10385 }
10386
10387 @override
10388 bool visitExpressionFunctionBody(ExpressionFunctionBody node) {
10389 ExpressionFunctionBody toNode = this._toNode as ExpressionFunctionBody;
10390 return _and(
10391 _isEqualTokens(node.functionDefinition, toNode.functionDefinition),
10392 _isEqualNodes(node.expression, toNode.expression),
10393 _isEqualTokens(node.semicolon, toNode.semicolon));
10394 }
10395
10396 @override
10397 bool visitExpressionStatement(ExpressionStatement node) {
10398 ExpressionStatement toNode = this._toNode as ExpressionStatement;
10399 return _and(_isEqualNodes(node.expression, toNode.expression),
10400 _isEqualTokens(node.semicolon, toNode.semicolon));
10401 }
10402
10403 @override
10404 bool visitExtendsClause(ExtendsClause node) {
10405 ExtendsClause toNode = this._toNode as ExtendsClause;
10406 return _and(_isEqualTokens(node.extendsKeyword, toNode.extendsKeyword),
10407 _isEqualNodes(node.superclass, toNode.superclass));
10408 }
10409
10410 @override
10411 bool visitFieldDeclaration(FieldDeclaration node) {
10412 FieldDeclaration toNode = this._toNode as FieldDeclaration;
10413 return _and(
10414 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10415 _isEqualNodeLists(node.metadata, toNode.metadata),
10416 _isEqualTokens(node.staticKeyword, toNode.staticKeyword),
10417 _isEqualNodes(node.fields, toNode.fields),
10418 _isEqualTokens(node.semicolon, toNode.semicolon));
10419 }
10420
10421 @override
10422 bool visitFieldFormalParameter(FieldFormalParameter node) {
10423 FieldFormalParameter toNode = this._toNode as FieldFormalParameter;
10424 return _and(
10425 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10426 _isEqualNodeLists(node.metadata, toNode.metadata),
10427 _isEqualTokens(node.keyword, toNode.keyword),
10428 _isEqualNodes(node.type, toNode.type),
10429 _isEqualTokens(node.thisKeyword, toNode.thisKeyword),
10430 _isEqualTokens(node.period, toNode.period),
10431 _isEqualNodes(node.identifier, toNode.identifier));
10432 }
10433
10434 @override
10435 bool visitForEachStatement(ForEachStatement node) {
10436 ForEachStatement toNode = this._toNode as ForEachStatement;
10437 return _and(
10438 _isEqualTokens(node.forKeyword, toNode.forKeyword),
10439 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10440 _isEqualNodes(node.loopVariable, toNode.loopVariable),
10441 _isEqualTokens(node.inKeyword, toNode.inKeyword),
10442 _isEqualNodes(node.iterable, toNode.iterable),
10443 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
10444 _isEqualNodes(node.body, toNode.body));
10445 }
10446
10447 @override
10448 bool visitFormalParameterList(FormalParameterList node) {
10449 FormalParameterList toNode = this._toNode as FormalParameterList;
10450 return _and(
10451 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10452 _isEqualNodeLists(node.parameters, toNode.parameters),
10453 _isEqualTokens(node.leftDelimiter, toNode.leftDelimiter),
10454 _isEqualTokens(node.rightDelimiter, toNode.rightDelimiter),
10455 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
10456 }
10457
10458 @override
10459 bool visitForStatement(ForStatement node) {
10460 ForStatement toNode = this._toNode as ForStatement;
10461 return _and(
10462 _isEqualTokens(node.forKeyword, toNode.forKeyword),
10463 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10464 _isEqualNodes(node.variables, toNode.variables),
10465 _isEqualNodes(node.initialization, toNode.initialization),
10466 _isEqualTokens(node.leftSeparator, toNode.leftSeparator),
10467 _isEqualNodes(node.condition, toNode.condition),
10468 _isEqualTokens(node.rightSeparator, toNode.rightSeparator),
10469 _isEqualNodeLists(node.updaters, toNode.updaters),
10470 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
10471 _isEqualNodes(node.body, toNode.body));
10472 }
10473
10474 @override
10475 bool visitFunctionDeclaration(FunctionDeclaration node) {
10476 FunctionDeclaration toNode = this._toNode as FunctionDeclaration;
10477 return _and(
10478 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10479 _isEqualNodeLists(node.metadata, toNode.metadata),
10480 _isEqualTokens(node.externalKeyword, toNode.externalKeyword),
10481 _isEqualNodes(node.returnType, toNode.returnType),
10482 _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword),
10483 _isEqualNodes(node.name, toNode.name),
10484 _isEqualNodes(node.functionExpression, toNode.functionExpression));
10485 }
10486
10487 @override
10488 bool visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
10489 FunctionDeclarationStatement toNode =
10490 this._toNode as FunctionDeclarationStatement;
10491 return _isEqualNodes(node.functionDeclaration, toNode.functionDeclaration);
10492 }
10493
10494 @override
10495 bool visitFunctionExpression(FunctionExpression node) {
10496 FunctionExpression toNode = this._toNode as FunctionExpression;
10497 if (_and(_isEqualNodes(node.parameters, toNode.parameters),
10498 _isEqualNodes(node.body, toNode.body))) {
10499 toNode.element = node.element;
10500 toNode.propagatedType = node.propagatedType;
10501 toNode.staticType = node.staticType;
10502 return true;
10503 }
10504 return false;
10505 }
10506
10507 @override
10508 bool visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
10509 FunctionExpressionInvocation toNode =
10510 this._toNode as FunctionExpressionInvocation;
10511 if (_and(_isEqualNodes(node.function, toNode.function),
10512 _isEqualNodes(node.argumentList, toNode.argumentList))) {
10513 toNode.propagatedElement = node.propagatedElement;
10514 toNode.propagatedInvokeType = node.propagatedInvokeType;
10515 toNode.propagatedType = node.propagatedType;
10516 toNode.staticInvokeType = node.staticInvokeType;
10517 toNode.staticElement = node.staticElement;
10518 toNode.staticType = node.staticType;
10519 return true;
10520 }
10521 return false;
10522 }
10523
10524 @override
10525 bool visitFunctionTypeAlias(FunctionTypeAlias node) {
10526 FunctionTypeAlias toNode = this._toNode as FunctionTypeAlias;
10527 return _and(
10528 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10529 _isEqualNodeLists(node.metadata, toNode.metadata),
10530 _isEqualTokens(node.typedefKeyword, toNode.typedefKeyword),
10531 _isEqualNodes(node.returnType, toNode.returnType),
10532 _isEqualNodes(node.name, toNode.name),
10533 _isEqualNodes(node.typeParameters, toNode.typeParameters),
10534 _isEqualNodes(node.parameters, toNode.parameters),
10535 _isEqualTokens(node.semicolon, toNode.semicolon));
10536 }
10537
10538 @override
10539 bool visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
10540 FunctionTypedFormalParameter toNode =
10541 this._toNode as FunctionTypedFormalParameter;
10542 return _and(
10543 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10544 _isEqualNodeLists(node.metadata, toNode.metadata),
10545 _isEqualNodes(node.returnType, toNode.returnType),
10546 _isEqualNodes(node.identifier, toNode.identifier),
10547 _isEqualNodes(node.parameters, toNode.parameters));
10548 }
10549
10550 @override
10551 bool visitHideCombinator(HideCombinator node) {
10552 HideCombinator toNode = this._toNode as HideCombinator;
10553 return _and(_isEqualTokens(node.keyword, toNode.keyword),
10554 _isEqualNodeLists(node.hiddenNames, toNode.hiddenNames));
10555 }
10556
10557 @override
10558 bool visitIfStatement(IfStatement node) {
10559 IfStatement toNode = this._toNode as IfStatement;
10560 return _and(
10561 _isEqualTokens(node.ifKeyword, toNode.ifKeyword),
10562 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10563 _isEqualNodes(node.condition, toNode.condition),
10564 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
10565 _isEqualNodes(node.thenStatement, toNode.thenStatement),
10566 _isEqualTokens(node.elseKeyword, toNode.elseKeyword),
10567 _isEqualNodes(node.elseStatement, toNode.elseStatement));
10568 }
10569
10570 @override
10571 bool visitImplementsClause(ImplementsClause node) {
10572 ImplementsClause toNode = this._toNode as ImplementsClause;
10573 return _and(
10574 _isEqualTokens(node.implementsKeyword, toNode.implementsKeyword),
10575 _isEqualNodeLists(node.interfaces, toNode.interfaces));
10576 }
10577
10578 @override
10579 bool visitImportDirective(ImportDirective node) {
10580 ImportDirective toNode = this._toNode as ImportDirective;
10581 if (_and(
10582 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10583 _isEqualNodeLists(node.metadata, toNode.metadata),
10584 _isEqualTokens(node.keyword, toNode.keyword),
10585 _isEqualNodes(node.uri, toNode.uri),
10586 _isEqualTokens(node.asKeyword, toNode.asKeyword),
10587 _isEqualNodes(node.prefix, toNode.prefix),
10588 _isEqualNodeLists(node.combinators, toNode.combinators),
10589 _isEqualTokens(node.semicolon, toNode.semicolon))) {
10590 toNode.element = node.element;
10591 return true;
10592 }
10593 return false;
10594 }
10595
10596 @override
10597 bool visitIndexExpression(IndexExpression node) {
10598 IndexExpression toNode = this._toNode as IndexExpression;
10599 if (_and(
10600 _isEqualNodes(node.target, toNode.target),
10601 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10602 _isEqualNodes(node.index, toNode.index),
10603 _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
10604 toNode.auxiliaryElements = node.auxiliaryElements;
10605 toNode.propagatedElement = node.propagatedElement;
10606 toNode.propagatedType = node.propagatedType;
10607 toNode.staticElement = node.staticElement;
10608 toNode.staticType = node.staticType;
10609 return true;
10610 }
10611 return false;
10612 }
10613
10614 @override
10615 bool visitInstanceCreationExpression(InstanceCreationExpression node) {
10616 InstanceCreationExpression toNode =
10617 this._toNode as InstanceCreationExpression;
10618 if (_and(
10619 _isEqualTokens(node.keyword, toNode.keyword),
10620 _isEqualNodes(node.constructorName, toNode.constructorName),
10621 _isEqualNodes(node.argumentList, toNode.argumentList))) {
10622 toNode.propagatedType = node.propagatedType;
10623 toNode.staticElement = node.staticElement;
10624 toNode.staticType = node.staticType;
10625 return true;
10626 }
10627 return false;
10628 }
10629
10630 @override
10631 bool visitIntegerLiteral(IntegerLiteral node) {
10632 IntegerLiteral toNode = this._toNode as IntegerLiteral;
10633 if (_and(_isEqualTokens(node.literal, toNode.literal),
10634 node.value == toNode.value)) {
10635 toNode.propagatedType = node.propagatedType;
10636 toNode.staticType = node.staticType;
10637 return true;
10638 }
10639 return false;
10640 }
10641
10642 @override
10643 bool visitInterpolationExpression(InterpolationExpression node) {
10644 InterpolationExpression toNode = this._toNode as InterpolationExpression;
10645 return _and(
10646 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10647 _isEqualNodes(node.expression, toNode.expression),
10648 _isEqualTokens(node.rightBracket, toNode.rightBracket));
10649 }
10650
10651 @override
10652 bool visitInterpolationString(InterpolationString node) {
10653 InterpolationString toNode = this._toNode as InterpolationString;
10654 return _and(_isEqualTokens(node.contents, toNode.contents),
10655 node.value == toNode.value);
10656 }
10657
10658 @override
10659 bool visitIsExpression(IsExpression node) {
10660 IsExpression toNode = this._toNode as IsExpression;
10661 if (_and(
10662 _isEqualNodes(node.expression, toNode.expression),
10663 _isEqualTokens(node.isOperator, toNode.isOperator),
10664 _isEqualTokens(node.notOperator, toNode.notOperator),
10665 _isEqualNodes(node.type, toNode.type))) {
10666 toNode.propagatedType = node.propagatedType;
10667 toNode.staticType = node.staticType;
10668 return true;
10669 }
10670 return false;
10671 }
10672
10673 @override
10674 bool visitLabel(Label node) {
10675 Label toNode = this._toNode as Label;
10676 return _and(_isEqualNodes(node.label, toNode.label),
10677 _isEqualTokens(node.colon, toNode.colon));
10678 }
10679
10680 @override
10681 bool visitLabeledStatement(LabeledStatement node) {
10682 LabeledStatement toNode = this._toNode as LabeledStatement;
10683 return _and(_isEqualNodeLists(node.labels, toNode.labels),
10684 _isEqualNodes(node.statement, toNode.statement));
10685 }
10686
10687 @override
10688 bool visitLibraryDirective(LibraryDirective node) {
10689 LibraryDirective toNode = this._toNode as LibraryDirective;
10690 if (_and(
10691 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10692 _isEqualNodeLists(node.metadata, toNode.metadata),
10693 _isEqualTokens(node.libraryKeyword, toNode.libraryKeyword),
10694 _isEqualNodes(node.name, toNode.name),
10695 _isEqualTokens(node.semicolon, toNode.semicolon))) {
10696 toNode.element = node.element;
10697 return true;
10698 }
10699 return false;
10700 }
10701
10702 @override
10703 bool visitLibraryIdentifier(LibraryIdentifier node) {
10704 LibraryIdentifier toNode = this._toNode as LibraryIdentifier;
10705 if (_isEqualNodeLists(node.components, toNode.components)) {
10706 toNode.propagatedType = node.propagatedType;
10707 toNode.staticType = node.staticType;
10708 return true;
10709 }
10710 return false;
10711 }
10712
10713 @override
10714 bool visitListLiteral(ListLiteral node) {
10715 ListLiteral toNode = this._toNode as ListLiteral;
10716 if (_and(
10717 _isEqualTokens(node.constKeyword, toNode.constKeyword),
10718 _isEqualNodes(node.typeArguments, toNode.typeArguments),
10719 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10720 _isEqualNodeLists(node.elements, toNode.elements),
10721 _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
10722 toNode.propagatedType = node.propagatedType;
10723 toNode.staticType = node.staticType;
10724 return true;
10725 }
10726 return false;
10727 }
10728
10729 @override
10730 bool visitMapLiteral(MapLiteral node) {
10731 MapLiteral toNode = this._toNode as MapLiteral;
10732 if (_and(
10733 _isEqualTokens(node.constKeyword, toNode.constKeyword),
10734 _isEqualNodes(node.typeArguments, toNode.typeArguments),
10735 _isEqualTokens(node.leftBracket, toNode.leftBracket),
10736 _isEqualNodeLists(node.entries, toNode.entries),
10737 _isEqualTokens(node.rightBracket, toNode.rightBracket))) {
10738 toNode.propagatedType = node.propagatedType;
10739 toNode.staticType = node.staticType;
10740 return true;
10741 }
10742 return false;
10743 }
10744
10745 @override
10746 bool visitMapLiteralEntry(MapLiteralEntry node) {
10747 MapLiteralEntry toNode = this._toNode as MapLiteralEntry;
10748 return _and(
10749 _isEqualNodes(node.key, toNode.key),
10750 _isEqualTokens(node.separator, toNode.separator),
10751 _isEqualNodes(node.value, toNode.value));
10752 }
10753
10754 @override
10755 bool visitMethodDeclaration(MethodDeclaration node) {
10756 MethodDeclaration toNode = this._toNode as MethodDeclaration;
10757 return _and(
10758 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10759 _isEqualNodeLists(node.metadata, toNode.metadata),
10760 _isEqualTokens(node.externalKeyword, toNode.externalKeyword),
10761 _isEqualTokens(node.modifierKeyword, toNode.modifierKeyword),
10762 _isEqualNodes(node.returnType, toNode.returnType),
10763 _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword),
10764 _isEqualTokens(node.propertyKeyword, toNode.propertyKeyword),
10765 _isEqualNodes(node.name, toNode.name),
10766 _isEqualNodes(node.parameters, toNode.parameters),
10767 _isEqualNodes(node.body, toNode.body));
10768 }
10769
10770 @override
10771 bool visitMethodInvocation(MethodInvocation node) {
10772 MethodInvocation toNode = this._toNode as MethodInvocation;
10773 if (_and(
10774 _isEqualNodes(node.target, toNode.target),
10775 _isEqualTokens(node.operator, toNode.operator),
10776 _isEqualNodes(node.methodName, toNode.methodName),
10777 _isEqualNodes(node.argumentList, toNode.argumentList))) {
10778 toNode.propagatedInvokeType = node.propagatedInvokeType;
10779 toNode.propagatedType = node.propagatedType;
10780 toNode.staticInvokeType = node.staticInvokeType;
10781 toNode.staticType = node.staticType;
10782 return true;
10783 }
10784 return false;
10785 }
10786
10787 @override
10788 bool visitNamedExpression(NamedExpression node) {
10789 NamedExpression toNode = this._toNode as NamedExpression;
10790 if (_and(_isEqualNodes(node.name, toNode.name),
10791 _isEqualNodes(node.expression, toNode.expression))) {
10792 toNode.propagatedType = node.propagatedType;
10793 toNode.staticType = node.staticType;
10794 return true;
10795 }
10796 return false;
10797 }
10798
10799 @override
10800 bool visitNativeClause(NativeClause node) {
10801 NativeClause toNode = this._toNode as NativeClause;
10802 return _and(_isEqualTokens(node.nativeKeyword, toNode.nativeKeyword),
10803 _isEqualNodes(node.name, toNode.name));
10804 }
10805
10806 @override
10807 bool visitNativeFunctionBody(NativeFunctionBody node) {
10808 NativeFunctionBody toNode = this._toNode as NativeFunctionBody;
10809 return _and(
10810 _isEqualTokens(node.nativeKeyword, toNode.nativeKeyword),
10811 _isEqualNodes(node.stringLiteral, toNode.stringLiteral),
10812 _isEqualTokens(node.semicolon, toNode.semicolon));
10813 }
10814
10815 @override
10816 bool visitNullLiteral(NullLiteral node) {
10817 NullLiteral toNode = this._toNode as NullLiteral;
10818 if (_isEqualTokens(node.literal, toNode.literal)) {
10819 toNode.propagatedType = node.propagatedType;
10820 toNode.staticType = node.staticType;
10821 return true;
10822 }
10823 return false;
10824 }
10825
10826 @override
10827 bool visitParenthesizedExpression(ParenthesizedExpression node) {
10828 ParenthesizedExpression toNode = this._toNode as ParenthesizedExpression;
10829 if (_and(
10830 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
10831 _isEqualNodes(node.expression, toNode.expression),
10832 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis))) {
10833 toNode.propagatedType = node.propagatedType;
10834 toNode.staticType = node.staticType;
10835 return true;
10836 }
10837 return false;
10838 }
10839
10840 @override
10841 bool visitPartDirective(PartDirective node) {
10842 PartDirective toNode = this._toNode as PartDirective;
10843 if (_and(
10844 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10845 _isEqualNodeLists(node.metadata, toNode.metadata),
10846 _isEqualTokens(node.partKeyword, toNode.partKeyword),
10847 _isEqualNodes(node.uri, toNode.uri),
10848 _isEqualTokens(node.semicolon, toNode.semicolon))) {
10849 toNode.element = node.element;
10850 return true;
10851 }
10852 return false;
10853 }
10854
10855 @override
10856 bool visitPartOfDirective(PartOfDirective node) {
10857 PartOfDirective toNode = this._toNode as PartOfDirective;
10858 if (_and(
10859 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10860 _isEqualNodeLists(node.metadata, toNode.metadata),
10861 _isEqualTokens(node.partKeyword, toNode.partKeyword),
10862 _isEqualTokens(node.ofKeyword, toNode.ofKeyword),
10863 _isEqualNodes(node.libraryName, toNode.libraryName),
10864 _isEqualTokens(node.semicolon, toNode.semicolon))) {
10865 toNode.element = node.element;
10866 return true;
10867 }
10868 return false;
10869 }
10870
10871 @override
10872 bool visitPostfixExpression(PostfixExpression node) {
10873 PostfixExpression toNode = this._toNode as PostfixExpression;
10874 if (_and(_isEqualNodes(node.operand, toNode.operand),
10875 _isEqualTokens(node.operator, toNode.operator))) {
10876 toNode.propagatedElement = node.propagatedElement;
10877 toNode.propagatedType = node.propagatedType;
10878 toNode.staticElement = node.staticElement;
10879 toNode.staticType = node.staticType;
10880 return true;
10881 }
10882 return false;
10883 }
10884
10885 @override
10886 bool visitPrefixedIdentifier(PrefixedIdentifier node) {
10887 PrefixedIdentifier toNode = this._toNode as PrefixedIdentifier;
10888 if (_and(
10889 _isEqualNodes(node.prefix, toNode.prefix),
10890 _isEqualTokens(node.period, toNode.period),
10891 _isEqualNodes(node.identifier, toNode.identifier))) {
10892 toNode.propagatedType = node.propagatedType;
10893 toNode.staticType = node.staticType;
10894 return true;
10895 }
10896 return false;
10897 }
10898
10899 @override
10900 bool visitPrefixExpression(PrefixExpression node) {
10901 PrefixExpression toNode = this._toNode as PrefixExpression;
10902 if (_and(_isEqualTokens(node.operator, toNode.operator),
10903 _isEqualNodes(node.operand, toNode.operand))) {
10904 toNode.propagatedElement = node.propagatedElement;
10905 toNode.propagatedType = node.propagatedType;
10906 toNode.staticElement = node.staticElement;
10907 toNode.staticType = node.staticType;
10908 return true;
10909 }
10910 return false;
10911 }
10912
10913 @override
10914 bool visitPropertyAccess(PropertyAccess node) {
10915 PropertyAccess toNode = this._toNode as PropertyAccess;
10916 if (_and(
10917 _isEqualNodes(node.target, toNode.target),
10918 _isEqualTokens(node.operator, toNode.operator),
10919 _isEqualNodes(node.propertyName, toNode.propertyName))) {
10920 toNode.propagatedType = node.propagatedType;
10921 toNode.staticType = node.staticType;
10922 return true;
10923 }
10924 return false;
10925 }
10926
10927 @override
10928 bool visitRedirectingConstructorInvocation(
10929 RedirectingConstructorInvocation node) {
10930 RedirectingConstructorInvocation toNode =
10931 this._toNode as RedirectingConstructorInvocation;
10932 if (_and(
10933 _isEqualTokens(node.thisKeyword, toNode.thisKeyword),
10934 _isEqualTokens(node.period, toNode.period),
10935 _isEqualNodes(node.constructorName, toNode.constructorName),
10936 _isEqualNodes(node.argumentList, toNode.argumentList))) {
10937 toNode.staticElement = node.staticElement;
10938 return true;
10939 }
10940 return false;
10941 }
10942
10943 @override
10944 bool visitRethrowExpression(RethrowExpression node) {
10945 RethrowExpression toNode = this._toNode as RethrowExpression;
10946 if (_isEqualTokens(node.rethrowKeyword, toNode.rethrowKeyword)) {
10947 toNode.propagatedType = node.propagatedType;
10948 toNode.staticType = node.staticType;
10949 return true;
10950 }
10951 return false;
10952 }
10953
10954 @override
10955 bool visitReturnStatement(ReturnStatement node) {
10956 ReturnStatement toNode = this._toNode as ReturnStatement;
10957 return _and(
10958 _isEqualTokens(node.returnKeyword, toNode.returnKeyword),
10959 _isEqualNodes(node.expression, toNode.expression),
10960 _isEqualTokens(node.semicolon, toNode.semicolon));
10961 }
10962
10963 @override
10964 bool visitScriptTag(ScriptTag node) {
10965 ScriptTag toNode = this._toNode as ScriptTag;
10966 return _isEqualTokens(node.scriptTag, toNode.scriptTag);
10967 }
10968
10969 @override
10970 bool visitShowCombinator(ShowCombinator node) {
10971 ShowCombinator toNode = this._toNode as ShowCombinator;
10972 return _and(_isEqualTokens(node.keyword, toNode.keyword),
10973 _isEqualNodeLists(node.shownNames, toNode.shownNames));
10974 }
10975
10976 @override
10977 bool visitSimpleFormalParameter(SimpleFormalParameter node) {
10978 SimpleFormalParameter toNode = this._toNode as SimpleFormalParameter;
10979 return _and(
10980 _isEqualNodes(node.documentationComment, toNode.documentationComment),
10981 _isEqualNodeLists(node.metadata, toNode.metadata),
10982 _isEqualTokens(node.keyword, toNode.keyword),
10983 _isEqualNodes(node.type, toNode.type),
10984 _isEqualNodes(node.identifier, toNode.identifier));
10985 }
10986
10987 @override
10988 bool visitSimpleIdentifier(SimpleIdentifier node) {
10989 SimpleIdentifier toNode = this._toNode as SimpleIdentifier;
10990 if (_isEqualTokens(node.token, toNode.token)) {
10991 toNode.staticElement = node.staticElement;
10992 toNode.staticType = node.staticType;
10993 toNode.propagatedElement = node.propagatedElement;
10994 toNode.propagatedType = node.propagatedType;
10995 toNode.auxiliaryElements = node.auxiliaryElements;
10996 return true;
10997 }
10998 return false;
10999 }
11000
11001 @override
11002 bool visitSimpleStringLiteral(SimpleStringLiteral node) {
11003 SimpleStringLiteral toNode = this._toNode as SimpleStringLiteral;
11004 if (_and(_isEqualTokens(node.literal, toNode.literal),
11005 node.value == toNode.value)) {
11006 toNode.propagatedType = node.propagatedType;
11007 toNode.staticType = node.staticType;
11008 return true;
11009 }
11010 return false;
11011 }
11012
11013 @override
11014 bool visitStringInterpolation(StringInterpolation node) {
11015 StringInterpolation toNode = this._toNode as StringInterpolation;
11016 if (_isEqualNodeLists(node.elements, toNode.elements)) {
11017 toNode.propagatedType = node.propagatedType;
11018 toNode.staticType = node.staticType;
11019 return true;
11020 }
11021 return false;
11022 }
11023
11024 @override
11025 bool visitSuperConstructorInvocation(SuperConstructorInvocation node) {
11026 SuperConstructorInvocation toNode =
11027 this._toNode as SuperConstructorInvocation;
11028 if (_and(
11029 _isEqualTokens(node.superKeyword, toNode.superKeyword),
11030 _isEqualTokens(node.period, toNode.period),
11031 _isEqualNodes(node.constructorName, toNode.constructorName),
11032 _isEqualNodes(node.argumentList, toNode.argumentList))) {
11033 toNode.staticElement = node.staticElement;
11034 return true;
11035 }
11036 return false;
11037 }
11038
11039 @override
11040 bool visitSuperExpression(SuperExpression node) {
11041 SuperExpression toNode = this._toNode as SuperExpression;
11042 if (_isEqualTokens(node.superKeyword, toNode.superKeyword)) {
11043 toNode.propagatedType = node.propagatedType;
11044 toNode.staticType = node.staticType;
11045 return true;
11046 }
11047 return false;
11048 }
11049
11050 @override
11051 bool visitSwitchCase(SwitchCase node) {
11052 SwitchCase toNode = this._toNode as SwitchCase;
11053 return _and(
11054 _isEqualNodeLists(node.labels, toNode.labels),
11055 _isEqualTokens(node.keyword, toNode.keyword),
11056 _isEqualNodes(node.expression, toNode.expression),
11057 _isEqualTokens(node.colon, toNode.colon),
11058 _isEqualNodeLists(node.statements, toNode.statements));
11059 }
11060
11061 @override
11062 bool visitSwitchDefault(SwitchDefault node) {
11063 SwitchDefault toNode = this._toNode as SwitchDefault;
11064 return _and(
11065 _isEqualNodeLists(node.labels, toNode.labels),
11066 _isEqualTokens(node.keyword, toNode.keyword),
11067 _isEqualTokens(node.colon, toNode.colon),
11068 _isEqualNodeLists(node.statements, toNode.statements));
11069 }
11070
11071 @override
11072 bool visitSwitchStatement(SwitchStatement node) {
11073 SwitchStatement toNode = this._toNode as SwitchStatement;
11074 return _and(
11075 _isEqualTokens(node.switchKeyword, toNode.switchKeyword),
11076 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
11077 _isEqualNodes(node.expression, toNode.expression),
11078 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
11079 _isEqualTokens(node.leftBracket, toNode.leftBracket),
11080 _isEqualNodeLists(node.members, toNode.members),
11081 _isEqualTokens(node.rightBracket, toNode.rightBracket));
11082 }
11083
11084 @override
11085 bool visitSymbolLiteral(SymbolLiteral node) {
11086 SymbolLiteral toNode = this._toNode as SymbolLiteral;
11087 if (_and(_isEqualTokens(node.poundSign, toNode.poundSign),
11088 _isEqualTokenLists(node.components, toNode.components))) {
11089 toNode.propagatedType = node.propagatedType;
11090 toNode.staticType = node.staticType;
11091 return true;
11092 }
11093 return false;
11094 }
11095
11096 @override
11097 bool visitThisExpression(ThisExpression node) {
11098 ThisExpression toNode = this._toNode as ThisExpression;
11099 if (_isEqualTokens(node.thisKeyword, toNode.thisKeyword)) {
11100 toNode.propagatedType = node.propagatedType;
11101 toNode.staticType = node.staticType;
11102 return true;
11103 }
11104 return false;
11105 }
11106
11107 @override
11108 bool visitThrowExpression(ThrowExpression node) {
11109 ThrowExpression toNode = this._toNode as ThrowExpression;
11110 if (_and(_isEqualTokens(node.throwKeyword, toNode.throwKeyword),
11111 _isEqualNodes(node.expression, toNode.expression))) {
11112 toNode.propagatedType = node.propagatedType;
11113 toNode.staticType = node.staticType;
11114 return true;
11115 }
11116 return false;
11117 }
11118
11119 @override
11120 bool visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
11121 TopLevelVariableDeclaration toNode =
11122 this._toNode as TopLevelVariableDeclaration;
11123 return _and(
11124 _isEqualNodes(node.documentationComment, toNode.documentationComment),
11125 _isEqualNodeLists(node.metadata, toNode.metadata),
11126 _isEqualNodes(node.variables, toNode.variables),
11127 _isEqualTokens(node.semicolon, toNode.semicolon));
11128 }
11129
11130 @override
11131 bool visitTryStatement(TryStatement node) {
11132 TryStatement toNode = this._toNode as TryStatement;
11133 return _and(
11134 _isEqualTokens(node.tryKeyword, toNode.tryKeyword),
11135 _isEqualNodes(node.body, toNode.body),
11136 _isEqualNodeLists(node.catchClauses, toNode.catchClauses),
11137 _isEqualTokens(node.finallyKeyword, toNode.finallyKeyword),
11138 _isEqualNodes(node.finallyBlock, toNode.finallyBlock));
11139 }
11140
11141 @override
11142 bool visitTypeArgumentList(TypeArgumentList node) {
11143 TypeArgumentList toNode = this._toNode as TypeArgumentList;
11144 return _and(
11145 _isEqualTokens(node.leftBracket, toNode.leftBracket),
11146 _isEqualNodeLists(node.arguments, toNode.arguments),
11147 _isEqualTokens(node.rightBracket, toNode.rightBracket));
11148 }
11149
11150 @override
11151 bool visitTypeName(TypeName node) {
11152 TypeName toNode = this._toNode as TypeName;
11153 if (_and(_isEqualNodes(node.name, toNode.name),
11154 _isEqualNodes(node.typeArguments, toNode.typeArguments))) {
11155 toNode.type = node.type;
11156 return true;
11157 }
11158 return false;
11159 }
11160
11161 @override
11162 bool visitTypeParameter(TypeParameter node) {
11163 TypeParameter toNode = this._toNode as TypeParameter;
11164 return _and(
11165 _isEqualNodes(node.documentationComment, toNode.documentationComment),
11166 _isEqualNodeLists(node.metadata, toNode.metadata),
11167 _isEqualNodes(node.name, toNode.name),
11168 _isEqualTokens(node.extendsKeyword, toNode.extendsKeyword),
11169 _isEqualNodes(node.bound, toNode.bound));
11170 }
11171
11172 @override
11173 bool visitTypeParameterList(TypeParameterList node) {
11174 TypeParameterList toNode = this._toNode as TypeParameterList;
11175 return _and(
11176 _isEqualTokens(node.leftBracket, toNode.leftBracket),
11177 _isEqualNodeLists(node.typeParameters, toNode.typeParameters),
11178 _isEqualTokens(node.rightBracket, toNode.rightBracket));
11179 }
11180
11181 @override
11182 bool visitVariableDeclaration(VariableDeclaration node) {
11183 VariableDeclaration toNode = this._toNode as VariableDeclaration;
11184 return _and(
11185 _isEqualNodes(node.documentationComment, toNode.documentationComment),
11186 _isEqualNodeLists(node.metadata, toNode.metadata),
11187 _isEqualNodes(node.name, toNode.name),
11188 _isEqualTokens(node.equals, toNode.equals),
11189 _isEqualNodes(node.initializer, toNode.initializer));
11190 }
11191
11192 @override
11193 bool visitVariableDeclarationList(VariableDeclarationList node) {
11194 VariableDeclarationList toNode = this._toNode as VariableDeclarationList;
11195 return _and(
11196 _isEqualNodes(node.documentationComment, toNode.documentationComment),
11197 _isEqualNodeLists(node.metadata, toNode.metadata),
11198 _isEqualTokens(node.keyword, toNode.keyword),
11199 _isEqualNodes(node.type, toNode.type),
11200 _isEqualNodeLists(node.variables, toNode.variables));
11201 }
11202
11203 @override
11204 bool visitVariableDeclarationStatement(VariableDeclarationStatement node) {
11205 VariableDeclarationStatement toNode =
11206 this._toNode as VariableDeclarationStatement;
11207 return _and(_isEqualNodes(node.variables, toNode.variables),
11208 _isEqualTokens(node.semicolon, toNode.semicolon));
11209 }
11210
11211 @override
11212 bool visitWhileStatement(WhileStatement node) {
11213 WhileStatement toNode = this._toNode as WhileStatement;
11214 return _and(
11215 _isEqualTokens(node.whileKeyword, toNode.whileKeyword),
11216 _isEqualTokens(node.leftParenthesis, toNode.leftParenthesis),
11217 _isEqualNodes(node.condition, toNode.condition),
11218 _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis),
11219 _isEqualNodes(node.body, toNode.body));
11220 }
11221
11222 @override
11223 bool visitWithClause(WithClause node) {
11224 WithClause toNode = this._toNode as WithClause;
11225 return _and(_isEqualTokens(node.withKeyword, toNode.withKeyword),
11226 _isEqualNodeLists(node.mixinTypes, toNode.mixinTypes));
11227 }
11228
11229 @override
11230 bool visitYieldStatement(YieldStatement node) {
11231 YieldStatement toNode = this._toNode as YieldStatement;
11232 return _and(
11233 _isEqualTokens(node.yieldKeyword, toNode.yieldKeyword),
11234 _isEqualNodes(node.expression, toNode.expression),
11235 _isEqualTokens(node.semicolon, toNode.semicolon));
11236 }
11237
11238 /**
11239 * Return `true` if all of the parameters are `true`.
11240 */
11241 bool _and(bool b1, bool b2,
11242 [bool b3 = true,
11243 bool b4 = true,
11244 bool b5 = true,
11245 bool b6 = true,
11246 bool b7 = true,
11247 bool b8 = true,
11248 bool b9 = true,
11249 bool b10 = true,
11250 bool b11 = true,
11251 bool b12 = true,
11252 bool b13 = true]) {
11253 // TODO(brianwilkerson) Inline this method.
11254 return b1 &&
11255 b2 &&
11256 b3 &&
11257 b4 &&
11258 b5 &&
11259 b6 &&
11260 b7 &&
11261 b8 &&
11262 b9 &&
11263 b10 &&
11264 b11 &&
11265 b12 &&
11266 b13;
11267 }
11268
11269 /**
11270 * Return `true` if the [first] and [second] lists of AST nodes have the same
11271 * size and corresponding elements are equal.
11272 */
11273 bool _isEqualNodeLists(NodeList first, NodeList second) {
11274 if (first == null) {
11275 return second == null;
11276 } else if (second == null) {
11277 return false;
11278 }
11279 int size = first.length;
11280 if (second.length != size) {
11281 return false;
11282 }
11283 bool equal = true;
11284 for (int i = 0; i < size; i++) {
11285 if (!_isEqualNodes(first[i], second[i])) {
11286 equal = false;
11287 }
11288 }
11289 return equal;
11290 }
11291
11292 /**
11293 * Return `true` if the [fromNode] and [toNode] have the same structure. As a
11294 * side-effect, if the nodes do have the same structure, any resolution data
11295 * from the first node will be copied to the second node.
11296 */
11297 bool _isEqualNodes(AstNode fromNode, AstNode toNode) {
11298 if (fromNode == null) {
11299 return toNode == null;
11300 } else if (toNode == null) {
11301 return false;
11302 } else if (fromNode.runtimeType == toNode.runtimeType) {
11303 this._toNode = toNode;
11304 return fromNode.accept(this);
11305 }
11306 //
11307 // Check for a simple transformation caused by entering a period.
11308 //
11309 if (toNode is PrefixedIdentifier) {
11310 SimpleIdentifier prefix = toNode.prefix;
11311 if (fromNode.runtimeType == prefix.runtimeType) {
11312 this._toNode = prefix;
11313 return fromNode.accept(this);
11314 }
11315 } else if (toNode is PropertyAccess) {
11316 Expression target = toNode.target;
11317 if (fromNode.runtimeType == target.runtimeType) {
11318 this._toNode = target;
11319 return fromNode.accept(this);
11320 }
11321 }
11322 return false;
11323 }
11324
11325 /**
11326 * Return `true` if the [first] and [second] arrays of tokens have the same
11327 * length and corresponding elements are equal.
11328 */
11329 bool _isEqualTokenLists(List<Token> first, List<Token> second) {
11330 int length = first.length;
11331 if (second.length != length) {
11332 return false;
11333 }
11334 for (int i = 0; i < length; i++) {
11335 if (!_isEqualTokens(first[i], second[i])) {
11336 return false;
11337 }
11338 }
11339 return true;
11340 }
11341
11342 /**
11343 * Return `true` if the [first] and [second] tokens have the same structure.
11344 */
11345 bool _isEqualTokens(Token first, Token second) {
11346 if (first == null) {
11347 return second == null;
11348 } else if (second == null) {
11349 return false;
11350 }
11351 return first.lexeme == second.lexeme;
11352 }
11353
11354 /**
11355 * Copy resolution data from the [fromNode] to the [toNode].
11356 */
11357 static void copyResolutionData(AstNode fromNode, AstNode toNode) {
11358 ResolutionCopier copier = new ResolutionCopier();
11359 copier._isEqualNodes(fromNode, toNode);
11360 }
11361 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/ast/utilities.dart ('k') | pkg/analyzer/test/generated/parser_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698