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

Side by Side Diff: pkg/analyzer/lib/dart/ast/ast.dart

Issue 2357803002: Add SyntacticEntity, an interface shared by AstNode and Token. (Closed)
Patch Set: Remove redundant comment Created 4 years, 3 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 /** 5 /**
6 * Defines the AST model. The AST (Abstract Syntax Tree) model describes the 6 * Defines the AST model. The AST (Abstract Syntax Tree) model describes the
7 * syntactic (as opposed to semantic) structure of Dart code. The semantic 7 * syntactic (as opposed to semantic) structure of Dart code. The semantic
8 * structure of the code is modeled by the 8 * structure of the code is modeled by the
9 * [element model](../element/element.dart). 9 * [element model](../element/element.dart).
10 * 10 *
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 * the left-hand-side to the given [element]. 503 * the left-hand-side to the given [element].
504 */ 504 */
505 void set staticElement(MethodElement element); 505 void set staticElement(MethodElement element);
506 } 506 }
507 507
508 /** 508 /**
509 * A node in the AST structure for a Dart program. 509 * A node in the AST structure for a Dart program.
510 * 510 *
511 * Clients may not extend, implement or mix-in this class. 511 * Clients may not extend, implement or mix-in this class.
512 */ 512 */
513 abstract class AstNode { 513 abstract class AstNode implements SyntacticEntity {
514 /** 514 /**
515 * An empty list of AST nodes. 515 * An empty list of AST nodes.
516 */ 516 */
517 static const List<AstNode> EMPTY_LIST = const <AstNode>[]; 517 static const List<AstNode> EMPTY_LIST = const <AstNode>[];
518 518
519 /** 519 /**
520 * A comparator that can be used to sort AST nodes in lexical order. In other 520 * A comparator that can be used to sort AST nodes in lexical order. In other
521 * words, `compare` will return a negative value if the offset of the first 521 * words, `compare` will return a negative value if the offset of the first
522 * node is less than the offset of the second node, zero (0) if the nodes have 522 * node is less than the offset of the second node, zero (0) if the nodes have
523 * the same offset, and a positive value if the offset of the first node is 523 * the same offset, and a positive value if the offset of the first node is
524 * greater than the offset of the second node. 524 * greater than the offset of the second node.
525 */ 525 */
526 static Comparator<AstNode> LEXICAL_ORDER = 526 static Comparator<AstNode> LEXICAL_ORDER =
527 (AstNode first, AstNode second) => first.offset - second.offset; 527 (AstNode first, AstNode second) => first.offset - second.offset;
528 528
529 /** 529 /**
530 * Return the first token included in this node's source range. 530 * Return the first token included in this node's source range.
531 */ 531 */
532 Token get beginToken; 532 Token get beginToken;
533 533
534 /** 534 /**
535 * Return an iterator that can be used to iterate through all the entities 535 * Return an iterator that can be used to iterate through all the entities
536 * (either AST nodes or tokens) that make up the contents of this node, 536 * (either AST nodes or tokens) that make up the contents of this node,
537 * including doc comments but excluding other comments. 537 * including doc comments but excluding other comments.
538 */ 538 */
539 Iterable /* AstNode | Token */ get childEntities; 539 Iterable<SyntacticEntity> get childEntities;
540 540
541 /** 541 /**
542 * Return the offset of the character immediately following the last character 542 * Return the offset of the character immediately following the last character
543 * of this node's source range. This is equivalent to 543 * of this node's source range. This is equivalent to
544 * `node.getOffset() + node.getLength()`. For a compilation unit this will be 544 * `node.getOffset() + node.getLength()`. For a compilation unit this will be
545 * equal to the length of the unit's source. For synthetic nodes this will be 545 * equal to the length of the unit's source. For synthetic nodes this will be
546 * equivalent to the node's offset (because the length is zero (0) by 546 * equivalent to the node's offset (because the length is zero (0) by
547 * definition). 547 * definition).
548 */ 548 */
549 @override
549 int get end; 550 int get end;
550 551
551 /** 552 /**
552 * Return the last token included in this node's source range. 553 * Return the last token included in this node's source range.
553 */ 554 */
554 Token get endToken; 555 Token get endToken;
555 556
556 /** 557 /**
557 * Return `true` if this node is a synthetic node. A synthetic node is a node 558 * Return `true` if this node is a synthetic node. A synthetic node is a node
558 * that was introduced by the parser in order to recover from an error in the 559 * that was introduced by the parser in order to recover from an error in the
559 * code. Synthetic nodes always have a length of zero (`0`). 560 * code. Synthetic nodes always have a length of zero (`0`).
560 */ 561 */
561 bool get isSynthetic; 562 bool get isSynthetic;
562 563
563 /** 564 @override
564 * Return the number of characters in the node's source range.
565 */
566 int get length; 565 int get length;
567 566
568 /** 567 @override
569 * Return the offset from the beginning of the file to the first character in
570 * the node's source range.
571 */
572 int get offset; 568 int get offset;
573 569
574 /** 570 /**
575 * Return this node's parent node, or `null` if this node is the root of an 571 * Return this node's parent node, or `null` if this node is the root of an
576 * AST structure. 572 * AST structure.
577 * 573 *
578 * Note that the relationship between an AST node and its parent node may 574 * Note that the relationship between an AST node and its parent node may
579 * change over the lifetime of a node. 575 * change over the lifetime of a node.
580 */ 576 */
581 AstNode get parent; 577 AstNode get parent;
(...skipping 7736 matching lines...) Expand 10 before | Expand all | Expand 10 after
8318 /** 8314 /**
8319 * Return the 'yield' keyword. 8315 * Return the 'yield' keyword.
8320 */ 8316 */
8321 Token get yieldKeyword; 8317 Token get yieldKeyword;
8322 8318
8323 /** 8319 /**
8324 * Return the 'yield' keyword to the given [token]. 8320 * Return the 'yield' keyword to the given [token].
8325 */ 8321 */
8326 void set yieldKeyword(Token token); 8322 void set yieldKeyword(Token token);
8327 } 8323 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/dart/ast/token.dart » ('j') | pkg/analyzer/lib/dart/ast/token.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698