af4b4d9575
Change-Id: Ief36ea6d6dc0fab4a1f6976e034418695bd2e128 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196043 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
5858 lines
202 KiB
Dart
5858 lines
202 KiB
Dart
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
||
// for details. All rights reserved. Use of this source code is governed by a
|
||
// BSD-style license that can be found in the LICENSE file.
|
||
|
||
/// Defines the AST model. The AST (Abstract Syntax Tree) model describes the
|
||
/// syntactic (as opposed to semantic) structure of Dart code. The semantic
|
||
/// structure of the code is modeled by the
|
||
/// [element model](../dart_element_element/dart_element_element-library.html).
|
||
///
|
||
/// An AST consists of nodes (instances of a subclass of [AstNode]). The nodes
|
||
/// are organized in a tree structure in which the children of a node are the
|
||
/// smaller syntactic units from which the node is composed. For example, a
|
||
/// binary expression consists of two sub-expressions (the operands) and an
|
||
/// operator. The two expressions are represented as nodes. The operator is not
|
||
/// represented as a node.
|
||
///
|
||
/// The AST is constructed by the parser based on the sequence of tokens
|
||
/// produced by the scanner. Most nodes provide direct access to the tokens used
|
||
/// to build the node. For example, the token for the operator in a binary
|
||
/// expression can be accessed from the node representing the binary expression.
|
||
///
|
||
/// While any node can theoretically be the root of an AST structure, almost all
|
||
/// of the AST structures known to the analyzer have a [CompilationUnit] as the
|
||
/// root of the structure. A compilation unit represents all of the Dart code in
|
||
/// a single file.
|
||
///
|
||
/// An AST can be either unresolved or resolved. When an AST is unresolved
|
||
/// certain properties will not have been computed and the accessors for those
|
||
/// properties will return `null`. The documentation for those getters should
|
||
/// describe that this is a possibility.
|
||
///
|
||
/// When an AST is resolved, the identifiers in the AST will be associated with
|
||
/// the elements that they refer to and every expression in the AST will have a
|
||
/// type associated with it.
|
||
import 'package:analyzer/dart/analysis/features.dart';
|
||
import 'package:analyzer/dart/ast/precedence.dart';
|
||
import 'package:analyzer/dart/ast/syntactic_entity.dart';
|
||
import 'package:analyzer/dart/ast/token.dart';
|
||
import 'package:analyzer/dart/element/element.dart';
|
||
import 'package:analyzer/dart/element/type.dart';
|
||
import 'package:analyzer/src/generated/java_engine.dart';
|
||
import 'package:analyzer/src/generated/source.dart' show LineInfo, Source;
|
||
import 'package:analyzer/src/generated/utilities_dart.dart';
|
||
|
||
/// Two or more string literals that are implicitly concatenated because of
|
||
/// being adjacent (separated only by whitespace).
|
||
///
|
||
/// While the grammar only allows adjacent strings when all of the strings are
|
||
/// of the same kind (single line or multi-line), this class doesn't enforce
|
||
/// that restriction.
|
||
///
|
||
/// adjacentStrings ::=
|
||
/// [StringLiteral] [StringLiteral]+
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class AdjacentStrings implements StringLiteral {
|
||
/// Return the strings that are implicitly concatenated.
|
||
NodeList<StringLiteral> get strings;
|
||
}
|
||
|
||
/// An AST node that can be annotated with both a documentation comment and a
|
||
/// list of annotations.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class AnnotatedNode implements AstNode {
|
||
/// Return the documentation comment associated with this node, or `null` if
|
||
/// this node does not have a documentation comment associated with it.
|
||
Comment? get documentationComment;
|
||
|
||
/// Set the documentation comment associated with this node to the given
|
||
/// [comment].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set documentationComment(Comment? comment);
|
||
|
||
/// Return the first token following the comment and metadata.
|
||
Token get firstTokenAfterCommentAndMetadata;
|
||
|
||
/// Return the annotations associated with this node.
|
||
NodeList<Annotation> get metadata;
|
||
|
||
/// Return a list containing the comment and annotations associated with this
|
||
/// node, sorted in lexical order.
|
||
List<AstNode> get sortedCommentAndAnnotations;
|
||
}
|
||
|
||
/// An annotation that can be associated with an AST node.
|
||
///
|
||
/// metadata ::=
|
||
/// annotation*
|
||
///
|
||
/// annotation ::=
|
||
/// '@' metadatum
|
||
///
|
||
/// metadatum ::=
|
||
/// [Identifier]
|
||
/// | qualifiedName
|
||
/// | constructorDesignation argumentPart
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Annotation implements AstNode {
|
||
/// Return the arguments to the constructor being invoked, or `null` if this
|
||
/// annotation is not the invocation of a constructor.
|
||
ArgumentList? get arguments;
|
||
|
||
/// Set the arguments to the constructor being invoked to the given
|
||
/// [arguments].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set arguments(ArgumentList? arguments);
|
||
|
||
/// Return the at sign that introduced the annotation.
|
||
Token get atSign;
|
||
|
||
/// Set the at sign that introduced the annotation to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set atSign(Token token);
|
||
|
||
/// Return the name of the constructor being invoked, or `null` if this
|
||
/// annotation is not the invocation of a named constructor.
|
||
SimpleIdentifier? get constructorName;
|
||
|
||
/// Set the name of the constructor being invoked to the given [name].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set constructorName(SimpleIdentifier? name);
|
||
|
||
/// Return the element associated with this annotation, or `null` if the AST
|
||
/// structure has not been resolved or if this annotation could not be
|
||
/// resolved.
|
||
Element? get element;
|
||
|
||
/// Set the element associated with this annotation to the given [element].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set element(Element? element);
|
||
|
||
/// Return the element annotation representing this annotation in the element
|
||
/// model; `null` when the AST has not been resolved.
|
||
ElementAnnotation? get elementAnnotation;
|
||
|
||
/// Set the element annotation representing this annotation in the element
|
||
/// model to the given [annotation].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set elementAnnotation(ElementAnnotation? annotation);
|
||
|
||
/// Return the name of the class defining the constructor that is being
|
||
/// invoked or the name of the field that is being referenced.
|
||
Identifier get name;
|
||
|
||
/// Set the name of the class defining the constructor that is being invoked
|
||
/// or the name of the field that is being referenced to the given [name].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(Identifier name);
|
||
|
||
@override
|
||
AstNode get parent;
|
||
|
||
/// Return the period before the constructor name, or `null` if this
|
||
/// annotation is not the invocation of a named constructor.
|
||
Token? get period;
|
||
|
||
/// Set the period before the constructor name to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set period(Token? token);
|
||
|
||
/// Returns the type arguments to the constructor being invoked, or `null` if
|
||
/// (a) this annotation is not the invocation of a constructor or (b) this
|
||
/// annotation does not specify type arguments explicitly.
|
||
///
|
||
/// Note that type arguments are only valid if [Feature.generic_metadata] is
|
||
/// enabled.
|
||
TypeArgumentList? get typeArguments;
|
||
}
|
||
|
||
/// A list of arguments in the invocation of an executable element (that is, a
|
||
/// function, method, or constructor).
|
||
///
|
||
/// argumentList ::=
|
||
/// '(' arguments? ')'
|
||
///
|
||
/// arguments ::=
|
||
/// [NamedExpression] (',' [NamedExpression])*
|
||
/// | [Expression] (',' [Expression])* (',' [NamedExpression])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ArgumentList implements AstNode {
|
||
/// Return the expressions producing the values of the arguments.
|
||
///
|
||
/// Although the language requires that positional arguments appear before
|
||
/// named arguments, this class allows them to be intermixed.
|
||
NodeList<Expression> get arguments;
|
||
|
||
/// Set the parameter elements corresponding to each of the arguments in this
|
||
/// list to the given list of [parameters]. The list of parameters must be the
|
||
/// same length as the number of arguments, but can contain `null` entries if
|
||
/// a given argument does not correspond to a formal parameter.
|
||
@Deprecated('Clients should not build AST manually')
|
||
set correspondingStaticParameters(List<ParameterElement?> parameters);
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Set the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token token);
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Set the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token token);
|
||
}
|
||
|
||
/// An as expression.
|
||
///
|
||
/// asExpression ::=
|
||
/// [Expression] 'as' [TypeAnnotation]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class AsExpression implements Expression {
|
||
/// Return the 'as' operator.
|
||
Token get asOperator;
|
||
|
||
/// Set the 'as' operator to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set asOperator(Token token);
|
||
|
||
/// Return the expression used to compute the value being cast.
|
||
Expression get expression;
|
||
|
||
/// Set the expression used to compute the value being cast to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the type being cast to.
|
||
TypeAnnotation get type;
|
||
|
||
/// Set the type being cast to to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set type(TypeAnnotation type);
|
||
}
|
||
|
||
/// An assert in the initializer list of a constructor.
|
||
///
|
||
/// assertInitializer ::=
|
||
/// 'assert' '(' [Expression] (',' [Expression])? ')'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class AssertInitializer implements Assertion, ConstructorInitializer {}
|
||
|
||
/// An assertion, either in a block or in the initializer list of a constructor.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Assertion implements AstNode {
|
||
/// Return the token representing the 'assert' keyword.
|
||
Token get assertKeyword;
|
||
|
||
/// Set the token representing the 'assert' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set assertKeyword(Token token);
|
||
|
||
/// Return the comma between the [condition] and the [message], or `null` if
|
||
/// no message was supplied.
|
||
Token? get comma;
|
||
|
||
/// Set the comma between the [condition] and the [message] to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set comma(Token? token);
|
||
|
||
/// Return the condition that is being asserted to be `true`.
|
||
Expression get condition;
|
||
|
||
/// Set the condition that is being asserted to be `true` to the given
|
||
/// [condition].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set condition(Expression condition);
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Set the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token token);
|
||
|
||
/// Return the message to report if the assertion fails, or `null` if no
|
||
/// message was supplied.
|
||
Expression? get message;
|
||
|
||
/// Set the message to report if the assertion fails to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set message(Expression? expression);
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Set the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token token);
|
||
}
|
||
|
||
/// An assert statement.
|
||
///
|
||
/// assertStatement ::=
|
||
/// 'assert' '(' [Expression] (',' [Expression])? ')' ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class AssertStatement implements Assertion, Statement {
|
||
/// Return the semicolon terminating the statement.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the statement to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
}
|
||
|
||
/// An assignment expression.
|
||
///
|
||
/// assignmentExpression ::=
|
||
/// [Expression] operator [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class AssignmentExpression
|
||
implements
|
||
NullShortableExpression,
|
||
MethodReferenceExpression,
|
||
CompoundAssignmentExpression {
|
||
/// Return the expression used to compute the left hand side.
|
||
Expression get leftHandSide;
|
||
|
||
/// Return the expression used to compute the left hand side.
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftHandSide(Expression expression);
|
||
|
||
/// Return the assignment operator being applied.
|
||
Token get operator;
|
||
|
||
/// Set the assignment operator being applied to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set operator(Token token);
|
||
|
||
/// Return the expression used to compute the right hand side.
|
||
Expression get rightHandSide;
|
||
|
||
/// Set the expression used to compute the left hand side to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightHandSide(Expression expression);
|
||
}
|
||
|
||
/// A node in the AST structure for a Dart program.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class AstNode implements SyntacticEntity {
|
||
/// A comparator that can be used to sort AST nodes in lexical order.
|
||
///
|
||
/// In other words, `compare` will return a negative value if the offset of
|
||
/// the first node is less than the offset of the second node, zero (0) if
|
||
/// the nodes have the same offset, and a positive value if the offset of the
|
||
/// first node is greater than the offset of the second node.
|
||
static Comparator<AstNode> LEXICAL_ORDER =
|
||
(AstNode first, AstNode second) => first.offset - second.offset;
|
||
|
||
/// Return the first token included in this node's source range.
|
||
Token get beginToken;
|
||
|
||
/// Return an iterator that can be used to iterate through all the entities
|
||
/// (either AST nodes or tokens) that make up the contents of this node,
|
||
/// including doc comments but excluding other comments.
|
||
Iterable<SyntacticEntity> get childEntities;
|
||
|
||
/// Return the offset of the character immediately following the last
|
||
/// character of this node's source range.
|
||
///
|
||
/// This is equivalent to `node.getOffset() + node.getLength()`. For a
|
||
/// compilation unit this will be equal to the length of the unit's source.
|
||
/// For synthetic nodes this will be equivalent to the node's offset (because
|
||
/// the length is zero (0) by definition).
|
||
@override
|
||
int get end;
|
||
|
||
/// Return the last token included in this node's source range.
|
||
Token get endToken;
|
||
|
||
/// Return `true` if this node is a synthetic node.
|
||
///
|
||
/// A synthetic node is a node that was introduced by the parser in order to
|
||
/// recover from an error in the code. Synthetic nodes always have a length
|
||
/// of zero (`0`).
|
||
bool get isSynthetic;
|
||
|
||
@override
|
||
int get length;
|
||
|
||
@override
|
||
int get offset;
|
||
|
||
/// Return this node's parent node, or `null` if this node is the root of an
|
||
/// AST structure.
|
||
///
|
||
/// Note that the relationship between an AST node and its parent node may
|
||
/// change over the lifetime of a node.
|
||
AstNode? get parent;
|
||
|
||
/// Return the node at the root of this node's AST structure.
|
||
///
|
||
/// Note that this method's performance is linear with respect to the depth
|
||
/// of the node in the AST structure (O(depth)).
|
||
AstNode get root;
|
||
|
||
/// Use the given [visitor] to visit this node.
|
||
///
|
||
/// Return the value returned by the visitor as a result of visiting this
|
||
/// node.
|
||
E? accept<E>(AstVisitor<E> visitor);
|
||
|
||
/// Return the token before [target] or `null` if it cannot be found.
|
||
Token? findPrevious(Token target);
|
||
|
||
/// Return the value of the property with the given [name], or `null` if this
|
||
/// node does not have a property with the given name.
|
||
E? getProperty<E>(String name);
|
||
|
||
/// Set the value of the property with the given [name] to the given [value].
|
||
/// If the value is `null`, the property will effectively be removed.
|
||
void setProperty(String name, Object? value);
|
||
|
||
/// Return either this node or the most immediate ancestor of this node for
|
||
/// which the [predicate] returns `true`, or `null` if there is no such node.
|
||
E? thisOrAncestorMatching<E extends AstNode>(Predicate<AstNode> predicate);
|
||
|
||
/// Return either this node or the most immediate ancestor of this node that
|
||
/// has the given type, or `null` if there is no such node.
|
||
E? thisOrAncestorOfType<E extends AstNode>();
|
||
|
||
/// Return a textual description of this node in a form approximating valid
|
||
/// source.
|
||
///
|
||
/// The returned string will not be valid source primarily in the case where
|
||
/// the node itself is not well-formed.
|
||
String toSource();
|
||
|
||
/// Use the given [visitor] to visit all of the children of this node.
|
||
///
|
||
/// The children will be visited in lexical order.
|
||
void visitChildren(AstVisitor visitor);
|
||
}
|
||
|
||
/// An object that can be used to visit an AST structure.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class. There are classes
|
||
/// that implement this interface that provide useful default behaviors in
|
||
/// `package:analyzer/dart/ast/visitor.dart`. A couple of the most useful
|
||
/// include
|
||
/// * SimpleAstVisitor which implements every visit method by doing nothing,
|
||
/// * RecursiveAstVisitor which will cause every node in a structure to be
|
||
/// visited, and
|
||
/// * ThrowingAstVisitor which implements every visit method by throwing an
|
||
/// exception.
|
||
abstract class AstVisitor<R> {
|
||
R? visitAdjacentStrings(AdjacentStrings node);
|
||
|
||
R? visitAnnotation(Annotation node);
|
||
|
||
R? visitArgumentList(ArgumentList node);
|
||
|
||
R? visitAsExpression(AsExpression node);
|
||
|
||
R? visitAssertInitializer(AssertInitializer node);
|
||
|
||
R? visitAssertStatement(AssertStatement assertStatement);
|
||
|
||
R? visitAssignmentExpression(AssignmentExpression node);
|
||
|
||
R? visitAwaitExpression(AwaitExpression node);
|
||
|
||
R? visitBinaryExpression(BinaryExpression node);
|
||
|
||
R? visitBlock(Block node);
|
||
|
||
R? visitBlockFunctionBody(BlockFunctionBody node);
|
||
|
||
R? visitBooleanLiteral(BooleanLiteral node);
|
||
|
||
R? visitBreakStatement(BreakStatement node);
|
||
|
||
R? visitCascadeExpression(CascadeExpression node);
|
||
|
||
R? visitCatchClause(CatchClause node);
|
||
|
||
R? visitClassDeclaration(ClassDeclaration node);
|
||
|
||
R? visitClassTypeAlias(ClassTypeAlias node);
|
||
|
||
R? visitComment(Comment node);
|
||
|
||
R? visitCommentReference(CommentReference node);
|
||
|
||
R? visitCompilationUnit(CompilationUnit node);
|
||
|
||
R? visitConditionalExpression(ConditionalExpression node);
|
||
|
||
R? visitConfiguration(Configuration node);
|
||
|
||
R? visitConstructorDeclaration(ConstructorDeclaration node);
|
||
|
||
R? visitConstructorFieldInitializer(ConstructorFieldInitializer node);
|
||
|
||
R? visitConstructorName(ConstructorName node);
|
||
|
||
R? visitContinueStatement(ContinueStatement node);
|
||
|
||
R? visitDeclaredIdentifier(DeclaredIdentifier node);
|
||
|
||
R? visitDefaultFormalParameter(DefaultFormalParameter node);
|
||
|
||
R? visitDoStatement(DoStatement node);
|
||
|
||
R? visitDottedName(DottedName node);
|
||
|
||
R? visitDoubleLiteral(DoubleLiteral node);
|
||
|
||
R? visitEmptyFunctionBody(EmptyFunctionBody node);
|
||
|
||
R? visitEmptyStatement(EmptyStatement node);
|
||
|
||
R? visitEnumConstantDeclaration(EnumConstantDeclaration node);
|
||
|
||
R? visitEnumDeclaration(EnumDeclaration node);
|
||
|
||
R? visitExportDirective(ExportDirective node);
|
||
|
||
R? visitExpressionFunctionBody(ExpressionFunctionBody node);
|
||
|
||
R? visitExpressionStatement(ExpressionStatement node);
|
||
|
||
R? visitExtendsClause(ExtendsClause node);
|
||
|
||
R? visitExtensionDeclaration(ExtensionDeclaration node);
|
||
|
||
R? visitExtensionOverride(ExtensionOverride node);
|
||
|
||
R? visitFieldDeclaration(FieldDeclaration node);
|
||
|
||
R? visitFieldFormalParameter(FieldFormalParameter node);
|
||
|
||
R? visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node);
|
||
|
||
R? visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node);
|
||
|
||
R? visitForElement(ForElement node);
|
||
|
||
R? visitFormalParameterList(FormalParameterList node);
|
||
|
||
R? visitForPartsWithDeclarations(ForPartsWithDeclarations node);
|
||
|
||
R? visitForPartsWithExpression(ForPartsWithExpression node);
|
||
|
||
R? visitForStatement(ForStatement node);
|
||
|
||
R? visitFunctionDeclaration(FunctionDeclaration node);
|
||
|
||
R? visitFunctionDeclarationStatement(FunctionDeclarationStatement node);
|
||
|
||
R? visitFunctionExpression(FunctionExpression node);
|
||
|
||
R? visitFunctionExpressionInvocation(FunctionExpressionInvocation node);
|
||
|
||
R? visitFunctionTypeAlias(FunctionTypeAlias functionTypeAlias);
|
||
|
||
R? visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node);
|
||
|
||
R? visitGenericFunctionType(GenericFunctionType node);
|
||
|
||
R? visitGenericTypeAlias(GenericTypeAlias node);
|
||
|
||
R? visitHideCombinator(HideCombinator node);
|
||
|
||
R? visitIfElement(IfElement node);
|
||
|
||
R? visitIfStatement(IfStatement node);
|
||
|
||
R? visitImplementsClause(ImplementsClause node);
|
||
|
||
R? visitImportDirective(ImportDirective node);
|
||
|
||
R? visitIndexExpression(IndexExpression node);
|
||
|
||
R? visitInstanceCreationExpression(InstanceCreationExpression node);
|
||
|
||
R? visitIntegerLiteral(IntegerLiteral node);
|
||
|
||
R? visitInterpolationExpression(InterpolationExpression node);
|
||
|
||
R? visitInterpolationString(InterpolationString node);
|
||
|
||
R? visitIsExpression(IsExpression node);
|
||
|
||
R? visitLabel(Label node);
|
||
|
||
R? visitLabeledStatement(LabeledStatement node);
|
||
|
||
R? visitLibraryDirective(LibraryDirective node);
|
||
|
||
R? visitLibraryIdentifier(LibraryIdentifier node);
|
||
|
||
R? visitListLiteral(ListLiteral node);
|
||
|
||
R? visitMapLiteralEntry(MapLiteralEntry node);
|
||
|
||
R? visitMethodDeclaration(MethodDeclaration node);
|
||
|
||
R? visitMethodInvocation(MethodInvocation node);
|
||
|
||
R? visitMixinDeclaration(MixinDeclaration node);
|
||
|
||
R? visitNamedExpression(NamedExpression node);
|
||
|
||
R? visitNativeClause(NativeClause node);
|
||
|
||
R? visitNativeFunctionBody(NativeFunctionBody node);
|
||
|
||
R? visitNullLiteral(NullLiteral node);
|
||
|
||
R? visitOnClause(OnClause node);
|
||
|
||
R? visitParenthesizedExpression(ParenthesizedExpression node);
|
||
|
||
R? visitPartDirective(PartDirective node);
|
||
|
||
R? visitPartOfDirective(PartOfDirective node);
|
||
|
||
R? visitPostfixExpression(PostfixExpression node);
|
||
|
||
R? visitPrefixedIdentifier(PrefixedIdentifier node);
|
||
|
||
R? visitPrefixExpression(PrefixExpression node);
|
||
|
||
R? visitPropertyAccess(PropertyAccess node);
|
||
|
||
R? visitRedirectingConstructorInvocation(
|
||
RedirectingConstructorInvocation node);
|
||
|
||
R? visitRethrowExpression(RethrowExpression node);
|
||
|
||
R? visitReturnStatement(ReturnStatement node);
|
||
|
||
R? visitScriptTag(ScriptTag node);
|
||
|
||
R? visitSetOrMapLiteral(SetOrMapLiteral node);
|
||
|
||
R? visitShowCombinator(ShowCombinator node);
|
||
|
||
R? visitSimpleFormalParameter(SimpleFormalParameter node);
|
||
|
||
R? visitSimpleIdentifier(SimpleIdentifier node);
|
||
|
||
R? visitSimpleStringLiteral(SimpleStringLiteral node);
|
||
|
||
R? visitSpreadElement(SpreadElement node);
|
||
|
||
R? visitStringInterpolation(StringInterpolation node);
|
||
|
||
R? visitSuperConstructorInvocation(SuperConstructorInvocation node);
|
||
|
||
R? visitSuperExpression(SuperExpression node);
|
||
|
||
R? visitSwitchCase(SwitchCase node);
|
||
|
||
R? visitSwitchDefault(SwitchDefault node);
|
||
|
||
R? visitSwitchStatement(SwitchStatement node);
|
||
|
||
R? visitSymbolLiteral(SymbolLiteral node);
|
||
|
||
R? visitThisExpression(ThisExpression node);
|
||
|
||
R? visitThrowExpression(ThrowExpression node);
|
||
|
||
R? visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node);
|
||
|
||
R? visitTryStatement(TryStatement node);
|
||
|
||
R? visitTypeArgumentList(TypeArgumentList node);
|
||
|
||
R? visitTypeName(TypeName node);
|
||
|
||
R? visitTypeParameter(TypeParameter node);
|
||
|
||
R? visitTypeParameterList(TypeParameterList node);
|
||
|
||
R? visitVariableDeclaration(VariableDeclaration node);
|
||
|
||
R? visitVariableDeclarationList(VariableDeclarationList node);
|
||
|
||
R? visitVariableDeclarationStatement(VariableDeclarationStatement node);
|
||
|
||
R? visitWhileStatement(WhileStatement node);
|
||
|
||
R? visitWithClause(WithClause node);
|
||
|
||
R? visitYieldStatement(YieldStatement node);
|
||
}
|
||
|
||
/// An await expression.
|
||
///
|
||
/// awaitExpression ::=
|
||
/// 'await' [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class AwaitExpression implements Expression {
|
||
/// Return the 'await' keyword.
|
||
Token get awaitKeyword;
|
||
|
||
/// Set the 'await' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set awaitKeyword(Token token);
|
||
|
||
/// Return the expression whose value is being waited on.
|
||
Expression get expression;
|
||
|
||
/// Set the expression whose value is being waited on to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
}
|
||
|
||
/// A binary (infix) expression.
|
||
///
|
||
/// binaryExpression ::=
|
||
/// [Expression] [Token] [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class BinaryExpression
|
||
implements Expression, MethodReferenceExpression {
|
||
/// Return the expression used to compute the left operand.
|
||
Expression get leftOperand;
|
||
|
||
/// Set the expression used to compute the left operand to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftOperand(Expression expression);
|
||
|
||
/// Return the binary operator being applied.
|
||
Token get operator;
|
||
|
||
/// Set the binary operator being applied to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set operator(Token token);
|
||
|
||
/// Return the expression used to compute the right operand.
|
||
Expression get rightOperand;
|
||
|
||
/// Set the expression used to compute the right operand to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightOperand(Expression expression);
|
||
|
||
/// The function type of the invocation, or `null` if the AST structure has
|
||
/// not been resolved, or if the invocation could not be resolved.
|
||
FunctionType? get staticInvokeType;
|
||
|
||
/// Sets the function type of the invocation.
|
||
@Deprecated('Clients should not build AST manually')
|
||
set staticInvokeType(FunctionType? value);
|
||
}
|
||
|
||
/// A sequence of statements.
|
||
///
|
||
/// block ::=
|
||
/// '{' statement* '}'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Block implements Statement {
|
||
/// Return the left curly bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Set the left curly bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftBracket(Token token);
|
||
|
||
/// Return the right curly bracket.
|
||
Token get rightBracket;
|
||
|
||
/// Set the right curly bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightBracket(Token token);
|
||
|
||
/// Return the statements contained in the block.
|
||
NodeList<Statement> get statements;
|
||
}
|
||
|
||
/// A function body that consists of a block of statements.
|
||
///
|
||
/// blockFunctionBody ::=
|
||
/// ('async' | 'async' '*' | 'sync' '*')? [Block]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class BlockFunctionBody implements FunctionBody {
|
||
/// Return the block representing the body of the function.
|
||
Block get block;
|
||
|
||
/// Set the block representing the body of the function to the given [block].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set block(Block block);
|
||
|
||
/// Set token representing the 'async' or 'sync' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token? token);
|
||
|
||
/// Set the star following the 'async' or 'sync' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set star(Token? token);
|
||
}
|
||
|
||
/// A boolean literal expression.
|
||
///
|
||
/// booleanLiteral ::=
|
||
/// 'false' | 'true'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class BooleanLiteral implements Literal {
|
||
/// Return the token representing the literal.
|
||
Token get literal;
|
||
|
||
/// Set the token representing the literal to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set literal(Token token);
|
||
|
||
/// Return the value of the literal.
|
||
bool get value;
|
||
}
|
||
|
||
/// A break statement.
|
||
///
|
||
/// breakStatement ::=
|
||
/// 'break' [SimpleIdentifier]? ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class BreakStatement implements Statement {
|
||
/// Return the token representing the 'break' keyword.
|
||
Token get breakKeyword;
|
||
|
||
/// Set the token representing the 'break' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set breakKeyword(Token token);
|
||
|
||
/// Return the label associated with the statement, or `null` if there is no
|
||
/// label.
|
||
SimpleIdentifier? get label;
|
||
|
||
/// Set the label associated with the statement to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set label(SimpleIdentifier? identifier);
|
||
|
||
/// Return the semicolon terminating the statement.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the statement to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the node from which this break statement is breaking.
|
||
///
|
||
/// This will be either a [Statement] (in the case of breaking out of a
|
||
/// loop), a [SwitchMember] (in the case of a labeled break statement whose
|
||
/// label matches a label on a switch case in an enclosing switch statement),
|
||
/// or `null` if the AST has not yet been resolved or if the target could not
|
||
/// be resolved. Note that if the source code has errors, the target might be
|
||
/// invalid (e.g. trying to break to a switch case).
|
||
AstNode? get target;
|
||
|
||
/// Set the node from which this break statement is breaking to the given
|
||
/// [node].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set target(AstNode? node);
|
||
}
|
||
|
||
/// A sequence of cascaded expressions: expressions that share a common target.
|
||
///
|
||
/// There are three kinds of expressions that can be used in a cascade
|
||
/// expression: [IndexExpression], [MethodInvocation] and [PropertyAccess].
|
||
///
|
||
/// cascadeExpression ::=
|
||
/// [Expression] cascadeSection*
|
||
///
|
||
/// cascadeSection ::=
|
||
/// ('..' | '?..') (cascadeSelector arguments*)
|
||
/// (assignableSelector arguments*)*
|
||
/// (assignmentOperator expressionWithoutCascade)?
|
||
///
|
||
/// cascadeSelector ::=
|
||
/// '[ ' expression '] '
|
||
/// | identifier
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class CascadeExpression
|
||
implements Expression, NullShortableExpression {
|
||
/// Return the cascade sections sharing the common target.
|
||
NodeList<Expression> get cascadeSections;
|
||
|
||
/// Whether this cascade is null aware (as opposed to non-null).
|
||
bool get isNullAware;
|
||
|
||
/// Return the target of the cascade sections.
|
||
Expression get target;
|
||
|
||
/// Set the target of the cascade sections to the given [target].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set target(Expression target);
|
||
}
|
||
|
||
/// A catch clause within a try statement.
|
||
///
|
||
/// onPart ::=
|
||
/// catchPart [Block]
|
||
/// | 'on' type catchPart? [Block]
|
||
///
|
||
/// catchPart ::=
|
||
/// 'catch' '(' [SimpleIdentifier] (',' [SimpleIdentifier])? ')'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class CatchClause implements AstNode {
|
||
/// Return the body of the catch block.
|
||
Block get body;
|
||
|
||
/// Set the body of the catch block to the given [block].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set body(Block block);
|
||
|
||
/// Return the token representing the 'catch' keyword, or `null` if there is
|
||
/// no 'catch' keyword.
|
||
Token? get catchKeyword;
|
||
|
||
/// Set the token representing the 'catch' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set catchKeyword(Token? token);
|
||
|
||
/// Return the comma separating the exception parameter from the stack trace
|
||
/// parameter, or `null` if there is no stack trace parameter.
|
||
Token? get comma;
|
||
|
||
/// Set the comma separating the exception parameter from the stack trace
|
||
/// parameter to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set comma(Token? token);
|
||
|
||
/// Return the parameter whose value will be the exception that was thrown, or
|
||
/// `null` if there is no 'catch' keyword.
|
||
SimpleIdentifier? get exceptionParameter;
|
||
|
||
/// Set the parameter whose value will be the exception that was thrown to the
|
||
/// given [parameter].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set exceptionParameter(SimpleIdentifier? parameter);
|
||
|
||
/// Return the type of exceptions caught by this catch clause, or `null` if
|
||
/// this catch clause catches every type of exception.
|
||
TypeAnnotation? get exceptionType;
|
||
|
||
/// Set the type of exceptions caught by this catch clause to the given
|
||
/// [exceptionType].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set exceptionType(TypeAnnotation? exceptionType);
|
||
|
||
/// Return the left parenthesis, or `null` if there is no 'catch' keyword.
|
||
Token? get leftParenthesis;
|
||
|
||
/// Set the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token? token);
|
||
|
||
/// Return the token representing the 'on' keyword, or `null` if there is no
|
||
/// 'on' keyword.
|
||
Token? get onKeyword;
|
||
|
||
/// Set the token representing the 'on' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set onKeyword(Token? token);
|
||
|
||
/// Return the right parenthesis, or `null` if there is no 'catch' keyword.
|
||
Token? get rightParenthesis;
|
||
|
||
/// Set the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token? token);
|
||
|
||
/// Return the parameter whose value will be the stack trace associated with
|
||
/// the exception, or `null` if there is no stack trace parameter.
|
||
SimpleIdentifier? get stackTraceParameter;
|
||
|
||
/// Set the parameter whose value will be the stack trace associated with the
|
||
/// exception to the given [parameter].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set stackTraceParameter(SimpleIdentifier? parameter);
|
||
}
|
||
|
||
/// The declaration of a class.
|
||
///
|
||
/// classDeclaration ::=
|
||
/// 'abstract'? 'class' [SimpleIdentifier] [TypeParameterList]?
|
||
/// ([ExtendsClause] [WithClause]?)?
|
||
/// [ImplementsClause]?
|
||
/// '{' [ClassMember]* '}'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ClassDeclaration implements ClassOrMixinDeclaration {
|
||
/// Return the 'abstract' keyword, or `null` if the keyword was absent.
|
||
Token? get abstractKeyword;
|
||
|
||
/// Set the 'abstract' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set abstractKeyword(Token? token);
|
||
|
||
/// Return the token representing the 'class' keyword.
|
||
Token get classKeyword;
|
||
|
||
/// Set the token representing the 'class' keyword.
|
||
@Deprecated('Clients should not build AST manually')
|
||
set classKeyword(Token token);
|
||
|
||
/// Return the extends clause for this class, or `null` if the class does not
|
||
/// extend any other class.
|
||
ExtendsClause? get extendsClause;
|
||
|
||
/// Set the extends clause for this class to the given [extendsClause].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set extendsClause(ExtendsClause? extendsClause);
|
||
|
||
/// Set the implements clause for the class to the given [implementsClause].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set implementsClause(ImplementsClause? implementsClause);
|
||
|
||
/// Return `true` if this class is declared to be an abstract class.
|
||
bool get isAbstract;
|
||
|
||
/// Set the left curly bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftBracket(Token token);
|
||
|
||
/// Return the native clause for this class, or `null` if the class does not
|
||
/// have a native clause.
|
||
NativeClause? get nativeClause;
|
||
|
||
/// Set the native clause for this class to the given [nativeClause].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set nativeClause(NativeClause? nativeClause);
|
||
|
||
/// Set the right curly bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightBracket(Token token);
|
||
|
||
/// Set the type parameters for the class to the given list of
|
||
/// [typeParameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeParameters(TypeParameterList? typeParameters);
|
||
|
||
/// Return the with clause for the class, or `null` if the class does not have
|
||
/// a with clause.
|
||
WithClause? get withClause;
|
||
|
||
/// Set the with clause for the class to the given [withClause].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set withClause(WithClause? withClause);
|
||
|
||
/// Return the constructor declared in the class with the given [name], or
|
||
/// `null` if there is no such constructor.
|
||
///
|
||
/// If the [name] is `null` then the default constructor will be searched
|
||
/// for.
|
||
ConstructorDeclaration? getConstructor(String? name);
|
||
}
|
||
|
||
/// A node that declares a name within the scope of a class declarations.
|
||
///
|
||
/// When the 'extension-methods' experiment is enabled, these nodes can also be
|
||
/// located inside extension declarations.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ClassMember implements Declaration {}
|
||
|
||
/// The declaration of a class or mixin.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ClassOrMixinDeclaration implements NamedCompilationUnitMember {
|
||
@override
|
||
ClassElement? get declaredElement;
|
||
|
||
/// Returns the implements clause for the class/mixin, or `null` if the
|
||
/// class/mixin does not implement any interfaces.
|
||
ImplementsClause? get implementsClause;
|
||
|
||
/// Returns the left curly bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Returns the members defined by the class/mixin.
|
||
NodeList<ClassMember> get members;
|
||
|
||
@override
|
||
SimpleIdentifier get name;
|
||
|
||
/// Returns the right curly bracket.
|
||
Token get rightBracket;
|
||
|
||
/// Returns the type parameters for the class/mixin, or `null` if the
|
||
/// class/mixin does not have any type parameters.
|
||
TypeParameterList? get typeParameters;
|
||
|
||
/// Returns the field declared in the class/mixin with the given [name], or
|
||
/// `null` if there is no such field.
|
||
VariableDeclaration? getField(String name);
|
||
|
||
/// Returns the method declared in the class/mixin with the given [name], or
|
||
/// `null` if there is no such method.
|
||
MethodDeclaration? getMethod(String name);
|
||
}
|
||
|
||
/// A class type alias.
|
||
///
|
||
/// classTypeAlias ::=
|
||
/// [SimpleIdentifier] [TypeParameterList]? '=' 'abstract'? mixinApplication
|
||
///
|
||
/// mixinApplication ::=
|
||
/// [TypeName] [WithClause] [ImplementsClause]? ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ClassTypeAlias implements TypeAlias {
|
||
/// Return the token for the 'abstract' keyword, or `null` if this is not
|
||
/// defining an abstract class.
|
||
Token? get abstractKeyword;
|
||
|
||
/// Set the token for the 'abstract' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set abstractKeyword(Token? token);
|
||
|
||
@override
|
||
ClassElement? get declaredElement;
|
||
|
||
/// Return the token for the '=' separating the name from the definition.
|
||
Token get equals;
|
||
|
||
/// Set the token for the '=' separating the name from the definition to the
|
||
/// given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set equals(Token token);
|
||
|
||
/// Return the implements clause for this class, or `null` if there is no
|
||
/// implements clause.
|
||
ImplementsClause? get implementsClause;
|
||
|
||
/// Set the implements clause for this class to the given [implementsClause].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set implementsClause(ImplementsClause? implementsClause);
|
||
|
||
/// Return `true` if this class is declared to be an abstract class.
|
||
bool get isAbstract;
|
||
|
||
@override
|
||
SimpleIdentifier get name;
|
||
|
||
/// Return the name of the superclass of the class being declared.
|
||
TypeName get superclass;
|
||
|
||
/// Set the name of the superclass of the class being declared to the given
|
||
/// [superclass] name.
|
||
@Deprecated('Clients should not build AST manually')
|
||
set superclass(TypeName superclass);
|
||
|
||
/// Return the type parameters for the class, or `null` if the class does not
|
||
/// have any type parameters.
|
||
TypeParameterList? get typeParameters;
|
||
|
||
/// Set the type parameters for the class to the given list of
|
||
/// [typeParameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeParameters(TypeParameterList? typeParameters);
|
||
|
||
/// Return the with clause for this class.
|
||
WithClause get withClause;
|
||
|
||
/// Set the with clause for this class to the given with [withClause].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set withClause(WithClause withClause);
|
||
}
|
||
|
||
/// An element in a list, map or set literal.
|
||
///
|
||
/// collectionElement ::=
|
||
/// [Expression]
|
||
/// | [IfElement]
|
||
/// | [ForElement]
|
||
/// | [MapLiteralEntry]
|
||
/// | [SpreadElement]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class CollectionElement implements AstNode {}
|
||
|
||
/// A combinator associated with an import or export directive.
|
||
///
|
||
/// combinator ::=
|
||
/// [HideCombinator]
|
||
/// | [ShowCombinator]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Combinator implements AstNode {
|
||
/// Return the 'hide' or 'show' keyword specifying what kind of processing is
|
||
/// to be done on the names.
|
||
Token get keyword;
|
||
|
||
/// Set the 'hide' or 'show' keyword specifying what kind of processing is
|
||
/// to be done on the names to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token token);
|
||
}
|
||
|
||
/// A comment within the source code.
|
||
///
|
||
/// comment ::=
|
||
/// endOfLineComment
|
||
/// | blockComment
|
||
/// | documentationComment
|
||
///
|
||
/// endOfLineComment ::=
|
||
/// '//' (CHARACTER - EOL)* EOL
|
||
///
|
||
/// blockComment ::=
|
||
/// '/ *' CHARACTER* '*/'
|
||
///
|
||
/// documentationComment ::=
|
||
/// '/ **' (CHARACTER | [CommentReference])* '*/'
|
||
/// | ('///' (CHARACTER - EOL)* EOL)+
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Comment implements AstNode {
|
||
/// Return `true` if this is a block comment.
|
||
bool get isBlock;
|
||
|
||
/// Return `true` if this is a documentation comment.
|
||
bool get isDocumentation;
|
||
|
||
/// Return `true` if this is an end-of-line comment.
|
||
bool get isEndOfLine;
|
||
|
||
/// Return the references embedded within the documentation comment.
|
||
NodeList<CommentReference> get references;
|
||
|
||
/// Return the tokens representing the comment.
|
||
List<Token> get tokens;
|
||
}
|
||
|
||
/// A reference to a Dart element that is found within a documentation comment.
|
||
///
|
||
/// commentReference ::=
|
||
/// '[' 'new'? [Identifier] ']'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class CommentReference implements AstNode {
|
||
/// Return the identifier being referenced.
|
||
Identifier get identifier;
|
||
|
||
/// Set the identifier being referenced to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set identifier(Identifier identifier);
|
||
|
||
/// Return the token representing the 'new' keyword, or `null` if there was no
|
||
/// 'new' keyword.
|
||
Token? get newKeyword;
|
||
|
||
/// Set the token representing the 'new' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set newKeyword(Token? token);
|
||
}
|
||
|
||
/// A compilation unit.
|
||
///
|
||
/// While the grammar restricts the order of the directives and declarations
|
||
/// within a compilation unit, this class does not enforce those restrictions.
|
||
/// In particular, the children of a compilation unit will be visited in lexical
|
||
/// order even if lexical order does not conform to the restrictions of the
|
||
/// grammar.
|
||
///
|
||
/// compilationUnit ::=
|
||
/// directives declarations
|
||
///
|
||
/// directives ::=
|
||
/// [ScriptTag]? [LibraryDirective]? namespaceDirective* [PartDirective]*
|
||
/// | [PartOfDirective]
|
||
///
|
||
/// namespaceDirective ::=
|
||
/// [ImportDirective]
|
||
/// | [ExportDirective]
|
||
///
|
||
/// declarations ::=
|
||
/// [CompilationUnitMember]*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class CompilationUnit implements AstNode {
|
||
/// Set the first token included in this node's source range to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set beginToken(Token token);
|
||
|
||
/// Return the declarations contained in this compilation unit.
|
||
NodeList<CompilationUnitMember> get declarations;
|
||
|
||
/// Return the element associated with this compilation unit, or `null` if the
|
||
/// AST structure has not been resolved.
|
||
CompilationUnitElement? get declaredElement;
|
||
|
||
/// Return the directives contained in this compilation unit.
|
||
NodeList<Directive> get directives;
|
||
|
||
/// Set the element associated with this compilation unit to the given
|
||
/// [element].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set element(CompilationUnitElement? element);
|
||
|
||
/// Set the last token included in this node's source range to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set endToken(Token token);
|
||
|
||
/// The set of features available to this compilation unit.
|
||
///
|
||
/// Determined by some combination of the .packages file, the enclosing
|
||
/// package's SDK version constraint, and/or the presence of a `@dart`
|
||
/// directive in a comment at the top of the file.
|
||
FeatureSet get featureSet;
|
||
|
||
/// The language version override specified for this compilation unit using a
|
||
/// token like '// @dart = 2.7', or `null` if no override is specified.
|
||
LanguageVersionToken? get languageVersionToken;
|
||
|
||
/// Return the line information for this compilation unit.
|
||
LineInfo? get lineInfo;
|
||
|
||
/// Set the line information for this compilation unit to the given [info].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set lineInfo(LineInfo? info);
|
||
|
||
/// Return the script tag at the beginning of the compilation unit, or `null`
|
||
/// if there is no script tag in this compilation unit.
|
||
ScriptTag? get scriptTag;
|
||
|
||
/// Set the script tag at the beginning of the compilation unit to the given
|
||
/// [scriptTag].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set scriptTag(ScriptTag? scriptTag);
|
||
|
||
/// Return a list containing all of the directives and declarations in this
|
||
/// compilation unit, sorted in lexical order.
|
||
List<AstNode> get sortedDirectivesAndDeclarations;
|
||
}
|
||
|
||
/// A node that declares one or more names within the scope of a compilation
|
||
/// unit.
|
||
///
|
||
/// compilationUnitMember ::=
|
||
/// [ClassDeclaration]
|
||
/// | [MixinDeclaration]
|
||
/// | [ExtensionDeclaration]
|
||
/// | [EnumDeclaration]
|
||
/// | [TypeAlias]
|
||
/// | [FunctionDeclaration]
|
||
/// | [TopLevelVariableDeclaration]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class CompilationUnitMember implements Declaration {}
|
||
|
||
/// A potentially compound assignment.
|
||
///
|
||
/// A compound assignment is any node in which a single expression is used to
|
||
/// specify both where to access a value to be operated on (the "read") and to
|
||
/// specify where to store the result of the operation (the "write"). This
|
||
/// happens in an [AssignmentExpression] when the assignment operator is a
|
||
/// compound assignment operator, and in a [PrefixExpression] or
|
||
/// [PostfixExpression] when the operator is an increment operator.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class CompoundAssignmentExpression {
|
||
/// The element that is used to read the value.
|
||
///
|
||
/// If this node is not a compound assignment, this element is `null`.
|
||
///
|
||
/// In valid code this element can be a [LocalVariableElement], a
|
||
/// [ParameterElement], or a [PropertyAccessorElement] getter.
|
||
///
|
||
/// In invalid code this element is `null`, for example `int += 2`. For
|
||
/// recovery [writeElement] is filled, and can be used for navigation.
|
||
///
|
||
/// This element is `null` if the AST structure has not been resolved, or
|
||
/// if the target could not be resolved.
|
||
Element? get readElement;
|
||
|
||
/// The type of the value read with the [readElement].
|
||
///
|
||
/// If this node is not a compound assignment, this type is `null`.
|
||
///
|
||
/// In invalid code, e.g. `int += 2`, this type is `dynamic`.
|
||
///
|
||
/// This type is `null` if the AST structure has not been resolved.
|
||
///
|
||
/// If the target could not be resolved, this type is `dynamic`.
|
||
DartType? get readType;
|
||
|
||
/// The element that is used to write the result.
|
||
///
|
||
/// In valid code this is a [LocalVariableElement], [ParameterElement], or a
|
||
/// [PropertyAccessorElement] setter.
|
||
///
|
||
/// In invalid code, for recovery, we might use other elements, for example a
|
||
/// [PropertyAccessorElement] getter `myGetter = 0` even though the getter
|
||
/// cannot be used to write a value. We do this to help the user to navigate
|
||
/// to the getter, and maybe add the corresponding setter.
|
||
///
|
||
/// If this node is a compound assignment, e. g. `x += 2`, both [readElement]
|
||
/// and [writeElement] could be not `null`.
|
||
///
|
||
/// This element is `null` if the AST structure has not been resolved, or
|
||
/// if the target could not be resolved.
|
||
Element? get writeElement;
|
||
|
||
/// The types of assigned values must be subtypes of this type.
|
||
///
|
||
/// If the target could not be resolved, this type is `dynamic`.
|
||
DartType? get writeType;
|
||
}
|
||
|
||
/// A conditional expression.
|
||
///
|
||
/// conditionalExpression ::=
|
||
/// [Expression] '?' [Expression] ':' [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ConditionalExpression implements Expression {
|
||
/// Return the token used to separate the then expression from the else
|
||
/// expression.
|
||
Token get colon;
|
||
|
||
/// Set the token used to separate the then expression from the else
|
||
/// expression to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set colon(Token token);
|
||
|
||
/// Return the condition used to determine which of the expressions is
|
||
/// executed next.
|
||
Expression get condition;
|
||
|
||
/// Set the condition used to determine which of the expressions is executed
|
||
/// next to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set condition(Expression expression);
|
||
|
||
/// Return the expression that is executed if the condition evaluates to
|
||
/// `false`.
|
||
Expression get elseExpression;
|
||
|
||
/// Set the expression that is executed if the condition evaluates to `false`
|
||
/// to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set elseExpression(Expression expression);
|
||
|
||
/// Return the token used to separate the condition from the then expression.
|
||
Token get question;
|
||
|
||
/// Set the token used to separate the condition from the then expression to
|
||
/// the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set question(Token token);
|
||
|
||
/// Return the expression that is executed if the condition evaluates to
|
||
/// `true`.
|
||
Expression get thenExpression;
|
||
|
||
/// Set the expression that is executed if the condition evaluates to `true`
|
||
/// to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set thenExpression(Expression expression);
|
||
}
|
||
|
||
/// A configuration in either an import or export directive.
|
||
///
|
||
/// configuration ::=
|
||
/// 'if' '(' test ')' uri
|
||
///
|
||
/// test ::=
|
||
/// dottedName ('==' stringLiteral)?
|
||
///
|
||
/// dottedName ::=
|
||
/// identifier ('.' identifier)*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Configuration implements AstNode {
|
||
/// Return the token for the equal operator, or `null` if the condition does
|
||
/// not include an equality test.
|
||
Token? get equalToken;
|
||
|
||
/// Set the token for the equal operator to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set equalToken(Token? token);
|
||
|
||
/// Return the token for the 'if' keyword.
|
||
Token get ifKeyword;
|
||
|
||
/// Set the token for the 'if' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set ifKeyword(Token token);
|
||
|
||
/// Return the token for the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Set the token for the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token token);
|
||
|
||
/// Return the name of the declared variable whose value is being used in the
|
||
/// condition.
|
||
DottedName get name;
|
||
|
||
/// Set the name of the declared variable whose value is being used in the
|
||
/// condition to the given [name].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(DottedName name);
|
||
|
||
/// Return the token for the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Set the token for the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token token);
|
||
|
||
/// Return the URI of the implementation library to be used if the condition
|
||
/// is true.
|
||
StringLiteral get uri;
|
||
|
||
/// Set the URI of the implementation library to be used if the condition is
|
||
/// true to the given [uri].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set uri(StringLiteral uri);
|
||
|
||
/// Return the source to which the [uri] was resolved.
|
||
Source? get uriSource;
|
||
|
||
/// Set the source to which the [uri] was resolved to the given [source].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set uriSource(Source? source);
|
||
|
||
/// Return the value to which the value of the declared variable will be
|
||
/// compared, or `null` if the condition does not include an equality test.
|
||
StringLiteral? get value;
|
||
|
||
/// Set the value to which the value of the declared variable will be
|
||
/// compared to the given [value].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set value(StringLiteral? value);
|
||
}
|
||
|
||
/// A constructor declaration.
|
||
///
|
||
/// constructorDeclaration ::=
|
||
/// constructorSignature [FunctionBody]?
|
||
/// | constructorName formalParameterList ':' 'this' ('.' [SimpleIdentifier])? arguments
|
||
///
|
||
/// constructorSignature ::=
|
||
/// 'external'? constructorName formalParameterList initializerList?
|
||
/// | 'external'? 'factory' factoryName formalParameterList initializerList?
|
||
/// | 'external'? 'const' constructorName formalParameterList initializerList?
|
||
///
|
||
/// constructorName ::=
|
||
/// [SimpleIdentifier] ('.' [SimpleIdentifier])?
|
||
///
|
||
/// factoryName ::=
|
||
/// [Identifier] ('.' [SimpleIdentifier])?
|
||
///
|
||
/// initializerList ::=
|
||
/// ':' [ConstructorInitializer] (',' [ConstructorInitializer])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ConstructorDeclaration implements ClassMember {
|
||
/// Return the body of the constructor.
|
||
FunctionBody get body;
|
||
|
||
/// Set the body of the constructor to the given [functionBody].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set body(FunctionBody functionBody);
|
||
|
||
/// Return the token for the 'const' keyword, or `null` if the constructor is
|
||
/// not a const constructor.
|
||
Token? get constKeyword;
|
||
|
||
/// Set the token for the 'const' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set constKeyword(Token? token);
|
||
|
||
@override
|
||
ConstructorElement? get declaredElement;
|
||
|
||
/// Return the token for the 'external' keyword to the given [token].
|
||
Token? get externalKeyword;
|
||
|
||
/// Set the token for the 'external' keyword, or `null` if the constructor
|
||
/// is not external.
|
||
@Deprecated('Clients should not build AST manually')
|
||
set externalKeyword(Token? token);
|
||
|
||
/// Return the token for the 'factory' keyword, or `null` if the constructor
|
||
/// is not a factory constructor.
|
||
Token? get factoryKeyword;
|
||
|
||
/// Set the token for the 'factory' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set factoryKeyword(Token? token);
|
||
|
||
/// Return the initializers associated with the constructor.
|
||
NodeList<ConstructorInitializer> get initializers;
|
||
|
||
/// Return the name of the constructor, or `null` if the constructor being
|
||
/// declared is unnamed.
|
||
SimpleIdentifier? get name;
|
||
|
||
/// Set the name of the constructor to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(SimpleIdentifier? identifier);
|
||
|
||
/// Return the parameters associated with the constructor.
|
||
FormalParameterList get parameters;
|
||
|
||
/// Set the parameters associated with the constructor to the given list of
|
||
/// [parameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set parameters(FormalParameterList parameters);
|
||
|
||
/// Return the token for the period before the constructor name, or `null` if
|
||
/// the constructor being declared is unnamed.
|
||
Token? get period;
|
||
|
||
/// Set the token for the period before the constructor name to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set period(Token? token);
|
||
|
||
/// Return the name of the constructor to which this constructor will be
|
||
/// redirected, or `null` if this is not a redirecting factory constructor.
|
||
ConstructorName? get redirectedConstructor;
|
||
|
||
/// Set the name of the constructor to which this constructor will be
|
||
/// redirected to the given [redirectedConstructor] name.
|
||
@Deprecated('Clients should not build AST manually')
|
||
set redirectedConstructor(ConstructorName? redirectedConstructor);
|
||
|
||
/// Return the type of object being created.
|
||
///
|
||
/// This can be different than the type in which the constructor is being
|
||
/// declared if the constructor is the implementation of a factory
|
||
/// constructor.
|
||
Identifier get returnType;
|
||
|
||
/// Set the type of object being created to the given [typeName].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set returnType(Identifier typeName);
|
||
|
||
/// Return the token for the separator (colon or equals) before the
|
||
/// initializer list or redirection, or `null` if there are no initializers.
|
||
Token? get separator;
|
||
|
||
/// Set the token for the separator (colon or equals) before the initializer
|
||
/// list or redirection to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set separator(Token? token);
|
||
}
|
||
|
||
/// The initialization of a field within a constructor's initialization list.
|
||
///
|
||
/// fieldInitializer ::=
|
||
/// ('this' '.')? [SimpleIdentifier] '=' [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ConstructorFieldInitializer implements ConstructorInitializer {
|
||
/// Return the token for the equal sign between the field name and the
|
||
/// expression.
|
||
Token get equals;
|
||
|
||
/// Set the token for the equal sign between the field name and the
|
||
/// expression to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set equals(Token token);
|
||
|
||
/// Return the expression computing the value to which the field will be
|
||
/// initialized.
|
||
Expression get expression;
|
||
|
||
/// Set the expression computing the value to which the field will be
|
||
/// initialized to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the name of the field being initialized.
|
||
SimpleIdentifier get fieldName;
|
||
|
||
/// Set the name of the field being initialized to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set fieldName(SimpleIdentifier identifier);
|
||
|
||
/// Return the token for the period after the 'this' keyword, or `null` if
|
||
/// there is no 'this' keyword.
|
||
Token? get period;
|
||
|
||
/// Set the token for the period after the 'this' keyword to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set period(Token? token);
|
||
|
||
/// Return the token for the 'this' keyword, or `null` if there is no 'this'
|
||
/// keyword.
|
||
Token? get thisKeyword;
|
||
|
||
/// Set the token for the 'this' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set thisKeyword(Token? token);
|
||
}
|
||
|
||
/// A node that can occur in the initializer list of a constructor declaration.
|
||
///
|
||
/// constructorInitializer ::=
|
||
/// [SuperConstructorInvocation]
|
||
/// | [ConstructorFieldInitializer]
|
||
/// | [RedirectingConstructorInvocation]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ConstructorInitializer implements AstNode {}
|
||
|
||
/// The name of a constructor.
|
||
///
|
||
/// constructorName ::=
|
||
/// type ('.' identifier)?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ConstructorName implements AstNode, ConstructorReferenceNode {
|
||
/// Return the name of the constructor, or `null` if the specified constructor
|
||
/// is the unnamed constructor.
|
||
SimpleIdentifier? get name;
|
||
|
||
/// Set the name of the constructor to the given [name].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(SimpleIdentifier? name);
|
||
|
||
/// Return the token for the period before the constructor name, or `null` if
|
||
/// the specified constructor is the unnamed constructor.
|
||
Token? get period;
|
||
|
||
/// Set the token for the period before the constructor name to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set period(Token? token);
|
||
|
||
/// Return the name of the type defining the constructor.
|
||
TypeName get type;
|
||
|
||
/// Set the name of the type defining the constructor to the given [type]
|
||
/// name.
|
||
@Deprecated('Clients should not build AST manually')
|
||
set type(TypeName type);
|
||
}
|
||
|
||
/// An AST node that makes reference to a constructor.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ConstructorReferenceNode implements AstNode {
|
||
/// Return the element associated with the referenced constructor based on
|
||
/// static type information, or `null` if the AST structure has not been
|
||
/// resolved or if the constructor could not be resolved.
|
||
ConstructorElement? get staticElement;
|
||
|
||
/// Set the element associated with the referenced constructor based on static
|
||
/// type information to the given [element].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set staticElement(ConstructorElement? element);
|
||
}
|
||
|
||
/// A continue statement.
|
||
///
|
||
/// continueStatement ::=
|
||
/// 'continue' [SimpleIdentifier]? ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ContinueStatement implements Statement {
|
||
/// Return the token representing the 'continue' keyword.
|
||
Token get continueKeyword;
|
||
|
||
/// Set the token representing the 'continue' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set continueKeyword(Token token);
|
||
|
||
/// Return the label associated with the statement, or `null` if there is no
|
||
/// label.
|
||
SimpleIdentifier? get label;
|
||
|
||
/// Set the label associated with the statement to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set label(SimpleIdentifier? identifier);
|
||
|
||
/// Return the semicolon terminating the statement.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the statement to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the node to which this continue statement is continuing.
|
||
///
|
||
/// This will be either a [Statement] (in the case of continuing a loop), a
|
||
/// [SwitchMember] (in the case of continuing from one switch case to
|
||
/// another), or `null` if the AST has not yet been resolved or if the target
|
||
/// could not be resolved. Note that if the source code has errors, the
|
||
/// target might be invalid (e.g. the target may be in an enclosing
|
||
/// function).
|
||
AstNode? get target;
|
||
|
||
/// Set the node to which this continue statement is continuing to the given
|
||
/// [node].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set target(AstNode? node);
|
||
}
|
||
|
||
/// A node that represents the declaration of one or more names.
|
||
///
|
||
/// Each declared name is visible within a name scope.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Declaration implements AnnotatedNode {
|
||
/// Return the element associated with this declaration, or `null` if either
|
||
/// this node corresponds to a list of declarations or if the AST structure
|
||
/// has not been resolved.
|
||
Element? get declaredElement;
|
||
}
|
||
|
||
/// The declaration of a single identifier.
|
||
///
|
||
/// declaredIdentifier ::=
|
||
/// [Annotation] finalConstVarOrType [SimpleIdentifier]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class DeclaredIdentifier implements Declaration {
|
||
@override
|
||
LocalVariableElement? get declaredElement;
|
||
|
||
/// Return the name of the variable being declared.
|
||
SimpleIdentifier get identifier;
|
||
|
||
/// Set the name of the variable being declared to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set identifier(SimpleIdentifier identifier);
|
||
|
||
/// Return `true` if this variable was declared with the 'const' modifier.
|
||
bool get isConst;
|
||
|
||
/// Return `true` if this variable was declared with the 'final' modifier.
|
||
/// Variables that are declared with the 'const' modifier will return `false`
|
||
/// even though they are implicitly final.
|
||
bool get isFinal;
|
||
|
||
/// Return the token representing either the 'final', 'const' or 'var'
|
||
/// keyword, or `null` if no keyword was used.
|
||
Token? get keyword;
|
||
|
||
/// Set the token representing either the 'final', 'const' or 'var' keyword to
|
||
/// the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token? token);
|
||
|
||
/// Return the name of the declared type of the parameter, or `null` if the
|
||
/// parameter does not have a declared type.
|
||
TypeAnnotation? get type;
|
||
|
||
/// Set the declared type of the parameter to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set type(TypeAnnotation? type);
|
||
}
|
||
|
||
/// A formal parameter with a default value.
|
||
///
|
||
/// There are two kinds of parameters that are both represented by this class:
|
||
/// named formal parameters and positional formal parameters.
|
||
///
|
||
/// defaultFormalParameter ::=
|
||
/// [NormalFormalParameter] ('=' [Expression])?
|
||
///
|
||
/// defaultNamedParameter ::=
|
||
/// [NormalFormalParameter] (':' [Expression])?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class DefaultFormalParameter implements FormalParameter {
|
||
/// Return the expression computing the default value for the parameter, or
|
||
/// `null` if there is no default value.
|
||
Expression? get defaultValue;
|
||
|
||
/// Set the expression computing the default value for the parameter to the
|
||
/// given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set defaultValue(Expression? expression);
|
||
|
||
/// Set the kind of this parameter to the given [kind].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set kind(ParameterKind kind);
|
||
|
||
/// Return the formal parameter with which the default value is associated.
|
||
NormalFormalParameter get parameter;
|
||
|
||
/// Set the formal parameter with which the default value is associated to the
|
||
/// given [formalParameter].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set parameter(NormalFormalParameter formalParameter);
|
||
|
||
/// Return the token separating the parameter from the default value, or
|
||
/// `null` if there is no default value.
|
||
Token? get separator;
|
||
|
||
/// Set the token separating the parameter from the default value to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set separator(Token? token);
|
||
}
|
||
|
||
/// A node that represents a directive.
|
||
///
|
||
/// directive ::=
|
||
/// [ExportDirective]
|
||
/// | [ImportDirective]
|
||
/// | [LibraryDirective]
|
||
/// | [PartDirective]
|
||
/// | [PartOfDirective]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Directive implements AnnotatedNode {
|
||
/// Return the element associated with this directive, or `null` if the AST
|
||
/// structure has not been resolved or if this directive could not be
|
||
/// resolved.
|
||
Element? get element;
|
||
|
||
/// Set the element associated with this directive to the given [element].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set element(Element? element);
|
||
|
||
/// Return the token representing the keyword that introduces this directive
|
||
/// ('import', 'export', 'library' or 'part').
|
||
Token get keyword;
|
||
}
|
||
|
||
/// A do statement.
|
||
///
|
||
/// doStatement ::=
|
||
/// 'do' [Statement] 'while' '(' [Expression] ')' ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class DoStatement implements Statement {
|
||
/// Return the body of the loop.
|
||
Statement get body;
|
||
|
||
/// Set the body of the loop to the given [statement].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set body(Statement statement);
|
||
|
||
/// Return the condition that determines when the loop will terminate.
|
||
Expression get condition;
|
||
|
||
/// Set the condition that determines when the loop will terminate to the
|
||
/// given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set condition(Expression expression);
|
||
|
||
/// Return the token representing the 'do' keyword.
|
||
Token get doKeyword;
|
||
|
||
/// Set the token representing the 'do' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set doKeyword(Token token);
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Set the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token token);
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Set the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token token);
|
||
|
||
/// Return the semicolon terminating the statement.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the statement to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the token representing the 'while' keyword.
|
||
Token get whileKeyword;
|
||
|
||
/// Set the token representing the 'while' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set whileKeyword(Token token);
|
||
}
|
||
|
||
/// A dotted name, used in a configuration within an import or export directive.
|
||
///
|
||
/// dottedName ::=
|
||
/// [SimpleIdentifier] ('.' [SimpleIdentifier])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class DottedName implements AstNode {
|
||
/// Return the components of the identifier.
|
||
NodeList<SimpleIdentifier> get components;
|
||
}
|
||
|
||
/// A floating point literal expression.
|
||
///
|
||
/// doubleLiteral ::=
|
||
/// decimalDigit+ ('.' decimalDigit*)? exponent?
|
||
/// | '.' decimalDigit+ exponent?
|
||
///
|
||
/// exponent ::=
|
||
/// ('e' | 'E') ('+' | '-')? decimalDigit+
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class DoubleLiteral implements Literal {
|
||
/// Return the token representing the literal.
|
||
Token get literal;
|
||
|
||
/// Set the token representing the literal to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set literal(Token token);
|
||
|
||
/// Return the value of the literal.
|
||
double get value;
|
||
|
||
/// Set the value of the literal to the given [value].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set value(double value);
|
||
}
|
||
|
||
/// An empty function body, which can only appear in constructors or abstract
|
||
/// methods.
|
||
///
|
||
/// emptyFunctionBody ::=
|
||
/// ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class EmptyFunctionBody implements FunctionBody {
|
||
/// Return the token representing the semicolon that marks the end of the
|
||
/// function body.
|
||
Token get semicolon;
|
||
|
||
/// Set the token representing the semicolon that marks the end of the
|
||
/// function body to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
}
|
||
|
||
/// An empty statement.
|
||
///
|
||
/// emptyStatement ::=
|
||
/// ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class EmptyStatement implements Statement {
|
||
/// Return the semicolon terminating the statement.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the statement to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
}
|
||
|
||
/// The declaration of an enum constant.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class EnumConstantDeclaration implements Declaration {
|
||
/// Return the name of the constant.
|
||
SimpleIdentifier get name;
|
||
|
||
/// Set the name of the constant to the given [name].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(SimpleIdentifier name);
|
||
}
|
||
|
||
/// The declaration of an enumeration.
|
||
///
|
||
/// enumType ::=
|
||
/// metadata 'enum' [SimpleIdentifier] '{' [SimpleIdentifier] (',' [SimpleIdentifier])* (',')? '}'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class EnumDeclaration implements NamedCompilationUnitMember {
|
||
/// Return the enumeration constants being declared.
|
||
NodeList<EnumConstantDeclaration> get constants;
|
||
|
||
@override
|
||
ClassElement? get declaredElement;
|
||
|
||
/// Return the 'enum' keyword.
|
||
Token get enumKeyword;
|
||
|
||
/// Set the 'enum' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set enumKeyword(Token token);
|
||
|
||
/// Return the left curly bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Set the left curly bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftBracket(Token token);
|
||
|
||
@override
|
||
SimpleIdentifier get name;
|
||
|
||
/// Return the right curly bracket.
|
||
Token get rightBracket;
|
||
|
||
/// Set the right curly bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightBracket(Token token);
|
||
}
|
||
|
||
/// An export directive.
|
||
///
|
||
/// exportDirective ::=
|
||
/// [Annotation] 'export' [StringLiteral] [Combinator]* ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ExportDirective implements NamespaceDirective {
|
||
@override
|
||
ExportElement? get element;
|
||
}
|
||
|
||
/// A node that represents an expression.
|
||
///
|
||
/// expression ::=
|
||
/// [AssignmentExpression]
|
||
/// | [ConditionalExpression] cascadeSection*
|
||
/// | [ThrowExpression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Expression implements CollectionElement {
|
||
/// An expression _e_ is said to _occur in a constant context_,
|
||
/// * if _e_ is an element of a constant list literal, or a key or value of an
|
||
/// entry of a constant map literal.
|
||
/// * if _e_ is an actual argument of a constant object expression or of a
|
||
/// metadata annotation.
|
||
/// * if _e_ is the initializing expression of a constant variable
|
||
/// declaration.
|
||
/// * if _e_ is a switch case expression.
|
||
/// * if _e_ is an immediate subexpression of an expression _e1_ which occurs
|
||
/// in a constant context, unless _e1_ is a `throw` expression or a function
|
||
/// literal.
|
||
///
|
||
/// This roughly means that everything which is inside a syntactically
|
||
/// constant expression is in a constant context. A `throw` expression is
|
||
/// currently not allowed in a constant expression, but extensions affecting
|
||
/// that status may be considered. A similar situation arises for function
|
||
/// literals.
|
||
///
|
||
/// Note that the default value of an optional formal parameter is _not_ a
|
||
/// constant context. This choice reserves some freedom to modify the
|
||
/// semantics of default values.
|
||
bool get inConstantContext;
|
||
|
||
/// Return `true` if this expression is syntactically valid for the LHS of an
|
||
/// [AssignmentExpression].
|
||
bool get isAssignable;
|
||
|
||
/// Return the precedence of this expression.
|
||
///
|
||
/// The precedence is a positive integer value that defines how the source
|
||
/// code is parsed into an AST. For example `a * b + c` is parsed as `(a * b)
|
||
/// + c` because the precedence of `*` is greater than the precedence of `+`.
|
||
Precedence get precedence;
|
||
|
||
/// If this expression is an argument to an invocation, and the AST structure
|
||
/// has been resolved, and the function being invoked is known based on static
|
||
/// type information, and this expression corresponds to one of the parameters
|
||
/// of the function being invoked, then return the parameter element
|
||
/// representing the parameter to which the value of this expression will be
|
||
/// bound. Otherwise, return `null`.
|
||
ParameterElement? get staticParameterElement;
|
||
|
||
/// Return the static type of this expression, or `null` if the AST structure
|
||
/// has not been resolved.
|
||
DartType? get staticType;
|
||
|
||
/// Set the static type of this expression to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set staticType(DartType? type);
|
||
|
||
/// If this expression is a parenthesized expression, return the result of
|
||
/// unwrapping the expression inside the parentheses. Otherwise, return this
|
||
/// expression.
|
||
Expression get unParenthesized;
|
||
}
|
||
|
||
/// A function body consisting of a single expression.
|
||
///
|
||
/// expressionFunctionBody ::=
|
||
/// 'async'? '=>' [Expression] ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ExpressionFunctionBody implements FunctionBody {
|
||
/// Return the expression representing the body of the function.
|
||
Expression get expression;
|
||
|
||
/// Set the expression representing the body of the function to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the token introducing the expression that represents the body of the
|
||
/// function.
|
||
Token get functionDefinition;
|
||
|
||
/// Set the token introducing the expression that represents the body of the
|
||
/// function to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set functionDefinition(Token token);
|
||
|
||
/// Set token representing the 'async' or 'sync' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token? token);
|
||
|
||
/// Return the semicolon terminating the statement.
|
||
Token? get semicolon;
|
||
|
||
/// Set the semicolon terminating the statement to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token? token);
|
||
}
|
||
|
||
/// An expression used as a statement.
|
||
///
|
||
/// expressionStatement ::=
|
||
/// [Expression]? ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ExpressionStatement implements Statement {
|
||
/// Return the expression that comprises the statement.
|
||
Expression get expression;
|
||
|
||
/// Set the expression that comprises the statement to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the semicolon terminating the statement, or `null` if the
|
||
/// expression is a function expression and therefore isn't followed by a
|
||
/// semicolon.
|
||
Token? get semicolon;
|
||
|
||
/// Set the semicolon terminating the statement to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token? token);
|
||
}
|
||
|
||
/// The "extends" clause in a class declaration.
|
||
///
|
||
/// extendsClause ::=
|
||
/// 'extends' [TypeName]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ExtendsClause implements AstNode {
|
||
/// Return the token representing the 'extends' keyword.
|
||
Token get extendsKeyword;
|
||
|
||
/// Set the token representing the 'extends' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set extendsKeyword(Token token);
|
||
|
||
/// Return the name of the class that is being extended.
|
||
TypeName get superclass;
|
||
|
||
/// Set the name of the class that is being extended to the given [name].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set superclass(TypeName name);
|
||
}
|
||
|
||
/// The declaration of an extension of a type.
|
||
///
|
||
/// extension ::=
|
||
/// 'extension' [SimpleIdentifier]? [TypeParameterList]?
|
||
/// 'on' [TypeAnnotation] '{' [ClassMember]* '}'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ExtensionDeclaration implements CompilationUnitMember {
|
||
@override
|
||
ExtensionElement? get declaredElement;
|
||
|
||
/// Return the type that is being extended.
|
||
TypeAnnotation get extendedType;
|
||
|
||
/// Return the token representing the 'extension' keyword.
|
||
Token get extensionKeyword;
|
||
|
||
/// Return the left curly bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Return the members being added to the extended class.
|
||
NodeList<ClassMember> get members;
|
||
|
||
/// Return the name of the extension, or `null` if the extension does not have
|
||
/// a name.
|
||
SimpleIdentifier? get name;
|
||
|
||
/// Return the token representing the 'on' keyword.
|
||
Token get onKeyword;
|
||
|
||
/// Return the right curly bracket.
|
||
Token get rightBracket;
|
||
|
||
/// Return the type parameters for the extension, or `null` if the extension
|
||
/// does not have any type parameters.
|
||
TypeParameterList? get typeParameters;
|
||
}
|
||
|
||
/// An override to force resolution to choose a member from a specific
|
||
/// extension.
|
||
///
|
||
/// extensionOverride ::=
|
||
/// [Identifier] [TypeArgumentList]? [ArgumentList]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ExtensionOverride implements Expression {
|
||
/// Return the list of arguments to the override. In valid code this will
|
||
/// contain a single argument, which evaluates to the object being extended.
|
||
ArgumentList get argumentList;
|
||
|
||
/// Return the actual type extended by this override, produced by applying
|
||
/// [typeArgumentTypes] to the generic type extended by the extension.
|
||
///
|
||
/// Return `null` if the AST structure has not been resolved.
|
||
DartType? get extendedType;
|
||
|
||
/// Return the name of the extension being selected.
|
||
Identifier get extensionName;
|
||
|
||
/// Whether this override is null aware (as opposed to non-null).
|
||
bool get isNullAware;
|
||
|
||
/// Return the forced extension element.
|
||
///
|
||
/// Return `null` if the AST structure has not been resolved.
|
||
ExtensionElement? get staticElement;
|
||
|
||
/// Return the type arguments to be applied to the extension, or `null` if no
|
||
/// type arguments were provided.
|
||
TypeArgumentList? get typeArguments;
|
||
|
||
/// Return the actual type arguments to be applied to the extension, either
|
||
/// explicitly specified in [typeArguments], or inferred.
|
||
///
|
||
/// If the AST has been resolved, never returns `null`, returns an empty list
|
||
/// if the extension does not have type parameters.
|
||
///
|
||
/// Return `null` if the AST structure has not been resolved.
|
||
List<DartType>? get typeArgumentTypes;
|
||
}
|
||
|
||
/// The declaration of one or more fields of the same type.
|
||
///
|
||
/// fieldDeclaration ::=
|
||
/// 'static' 'const' <type>? <staticFinalDeclarationList>
|
||
/// | 'static' 'final' <type>? <staticFinalDeclarationList>
|
||
/// | 'static' 'late' 'final' <type>? <initializedIdentifierList>
|
||
/// | 'static' 'late'? <varOrType> <initializedIdentifierList>
|
||
/// | 'covariant' 'late'? <varOrType> <initializedIdentifierList>
|
||
/// | 'late'? 'final' <type>? <initializedIdentifierList>
|
||
/// | 'late'? <varOrType> <initializedIdentifierList>
|
||
/// | 'external' ('static'? <finalVarOrType> | 'covariant' <varOrType>)
|
||
/// <identifierList>
|
||
/// | 'abstract' (<finalVarOrType> | 'covariant' <varOrType>)
|
||
/// <identifierList>
|
||
///
|
||
/// (Note: there is no <fieldDeclaration> production in the grammar; this is a
|
||
/// subset of the grammar production <declaration>, which encompasses everything
|
||
/// that can appear inside a class declaration except methods).
|
||
///
|
||
/// Prior to the 'extension-methods' experiment, these nodes were always
|
||
/// children of a class declaration. When the experiment is enabled, these nodes
|
||
/// can also be children of an extension declaration.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FieldDeclaration implements ClassMember {
|
||
/// The `abstract` keyword, or `null` if the keyword was not used.
|
||
Token? get abstractKeyword;
|
||
|
||
/// The 'covariant' keyword, or `null` if the keyword was not used.
|
||
Token? get covariantKeyword;
|
||
|
||
/// Set the token for the 'covariant' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set covariantKeyword(Token? token);
|
||
|
||
/// The `external` keyword, or `null` if the keyword was not used.
|
||
Token? get externalKeyword;
|
||
|
||
/// Return the fields being declared.
|
||
VariableDeclarationList get fields;
|
||
|
||
/// Set the fields being declared to the given list of [fields].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set fields(VariableDeclarationList fields);
|
||
|
||
/// Return `true` if the fields are declared to be static.
|
||
bool get isStatic;
|
||
|
||
/// Return the semicolon terminating the declaration.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the declaration to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the token representing the 'static' keyword, or `null` if the
|
||
/// fields are not static.
|
||
Token? get staticKeyword;
|
||
|
||
/// Set the token representing the 'static' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set staticKeyword(Token? token);
|
||
}
|
||
|
||
/// A field formal parameter.
|
||
///
|
||
/// fieldFormalParameter ::=
|
||
/// ('final' [TypeAnnotation] | 'const' [TypeAnnotation] | 'var' | [TypeAnnotation])?
|
||
/// 'this' '.' [SimpleIdentifier] ([TypeParameterList]? [FormalParameterList])?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FieldFormalParameter implements NormalFormalParameter {
|
||
@override
|
||
SimpleIdentifier get identifier;
|
||
|
||
/// Return the token representing either the 'final', 'const' or 'var'
|
||
/// keyword, or `null` if no keyword was used.
|
||
Token? get keyword;
|
||
|
||
/// Set the token representing either the 'final', 'const' or 'var' keyword to
|
||
/// the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token? token);
|
||
|
||
/// Return the parameters of the function-typed parameter, or `null` if this
|
||
/// is not a function-typed field formal parameter.
|
||
FormalParameterList? get parameters;
|
||
|
||
/// Set the parameters of the function-typed parameter to the given
|
||
/// [parameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set parameters(FormalParameterList? parameters);
|
||
|
||
/// Return the token representing the period.
|
||
Token get period;
|
||
|
||
/// Set the token representing the period to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set period(Token token);
|
||
|
||
/// If the parameter is function-typed, and has the question mark, then its
|
||
/// function type is nullable. Having a nullable function type means that the
|
||
/// parameter can be null.
|
||
Token? get question;
|
||
|
||
/// Return the token representing the 'this' keyword.
|
||
Token get thisKeyword;
|
||
|
||
/// Set the token representing the 'this' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set thisKeyword(Token token);
|
||
|
||
/// Return the declared type of the parameter, or `null` if the parameter does
|
||
/// not have a declared type.
|
||
///
|
||
/// Note that if this is a function-typed field formal parameter this is the
|
||
/// return type of the function.
|
||
TypeAnnotation? get type;
|
||
|
||
/// Set the declared type of the parameter to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set type(TypeAnnotation? type);
|
||
|
||
/// Return the type parameters associated with this method, or `null` if this
|
||
/// method is not a generic method.
|
||
TypeParameterList? get typeParameters;
|
||
|
||
/// Set the type parameters associated with this method to the given
|
||
/// [typeParameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeParameters(TypeParameterList? typeParameters);
|
||
}
|
||
|
||
/// The parts of a for-each loop that control the iteration.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ForEachParts implements ForLoopParts {
|
||
/// Return the token representing the 'in' keyword.
|
||
Token get inKeyword;
|
||
|
||
/// Return the expression evaluated to produce the iterator.
|
||
Expression get iterable;
|
||
}
|
||
|
||
/// The parts of a for-each loop that control the iteration when the loop
|
||
/// variable is declared as part of the for loop.
|
||
///
|
||
/// forLoopParts ::=
|
||
/// [DeclaredIdentifier] 'in' [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ForEachPartsWithDeclaration implements ForEachParts {
|
||
/// Return the declaration of the loop variable.
|
||
DeclaredIdentifier get loopVariable;
|
||
}
|
||
|
||
/// The parts of a for-each loop that control the iteration when the loop
|
||
/// variable is declared outside of the for loop.
|
||
///
|
||
/// forLoopParts ::=
|
||
/// [SimpleIdentifier] 'in' [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ForEachPartsWithIdentifier implements ForEachParts {
|
||
/// Return the loop variable.
|
||
SimpleIdentifier get identifier;
|
||
}
|
||
|
||
/// The basic structure of a for element.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ForElement implements CollectionElement {
|
||
/// Return the token representing the 'await' keyword, or `null` if there was
|
||
/// no 'await' keyword.
|
||
Token? get awaitKeyword;
|
||
|
||
/// Return the body of the loop.
|
||
CollectionElement get body;
|
||
|
||
/// Return the token representing the 'for' keyword.
|
||
Token get forKeyword;
|
||
|
||
/// Return the parts of the for element that control the iteration.
|
||
ForLoopParts get forLoopParts;
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
}
|
||
|
||
/// The parts of a for or for-each loop that control the iteration.
|
||
///
|
||
/// forLoopParts ::=
|
||
/// [VariableDeclaration] ';' [Expression]? ';' expressionList?
|
||
/// | [Expression]? ';' [Expression]? ';' expressionList?
|
||
/// | [DeclaredIdentifier] 'in' [Expression]
|
||
/// | [SimpleIdentifier] 'in' [Expression]
|
||
///
|
||
/// expressionList ::=
|
||
/// [Expression] (',' [Expression])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ForLoopParts implements AstNode {}
|
||
|
||
/// A node representing a parameter to a function.
|
||
///
|
||
/// formalParameter ::=
|
||
/// [NormalFormalParameter]
|
||
/// | [DefaultFormalParameter]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FormalParameter implements AstNode {
|
||
/// The 'covariant' keyword, or `null` if the keyword was not used.
|
||
Token? get covariantKeyword;
|
||
|
||
/// Return the element representing this parameter, or `null` if this
|
||
/// parameter has not been resolved.
|
||
ParameterElement? get declaredElement;
|
||
|
||
/// Return the name of the parameter being declared, or `null` if the
|
||
/// parameter doesn't have a name, such as when it's part of a generic
|
||
/// function type.
|
||
SimpleIdentifier? get identifier;
|
||
|
||
/// Return `true` if this parameter was declared with the 'const' modifier.
|
||
bool get isConst;
|
||
|
||
/// Return `true` if this parameter was declared with the 'final' modifier.
|
||
///
|
||
/// Parameters that are declared with the 'const' modifier will return
|
||
/// `false` even though they are implicitly final.
|
||
bool get isFinal;
|
||
|
||
/// Return `true` if this parameter is a named parameter.
|
||
///
|
||
/// Named parameters can either be required or optional.
|
||
bool get isNamed;
|
||
|
||
/// Return `true` if this parameter is an optional parameter.
|
||
///
|
||
/// Optional parameters can either be positional or named.
|
||
bool get isOptional;
|
||
|
||
/// Return `true` if this parameter is both an optional and named parameter.
|
||
bool get isOptionalNamed;
|
||
|
||
/// Return `true` if this parameter is both an optional and positional
|
||
/// parameter.
|
||
bool get isOptionalPositional;
|
||
|
||
/// Return `true` if this parameter is a positional parameter.
|
||
///
|
||
/// Positional parameters can either be required or optional.
|
||
bool get isPositional;
|
||
|
||
/// Return `true` if this parameter is a required parameter.
|
||
///
|
||
/// Required parameters can either be positional or named.
|
||
///
|
||
/// Note: this will return `false` for a named parameter that is annotated
|
||
/// with the `@required` annotation.
|
||
bool get isRequired;
|
||
|
||
/// Return `true` if this parameter is both a required and named parameter.
|
||
///
|
||
/// Note: this will return `false` for a named parameter that is annotated
|
||
/// with the `@required` annotation.
|
||
bool get isRequiredNamed;
|
||
|
||
/// Return `true` if this parameter is both a required and positional
|
||
/// parameter.
|
||
bool get isRequiredPositional;
|
||
|
||
/// Return the annotations associated with this parameter.
|
||
NodeList<Annotation> get metadata;
|
||
|
||
/// The 'required' keyword, or `null` if the keyword was not used.
|
||
Token? get requiredKeyword;
|
||
}
|
||
|
||
/// The formal parameter list of a method declaration, function declaration, or
|
||
/// function type alias.
|
||
///
|
||
/// While the grammar requires all optional formal parameters to follow all of
|
||
/// the normal formal parameters and at most one grouping of optional formal
|
||
/// parameters, this class does not enforce those constraints. All parameters
|
||
/// are flattened into a single list, which can have any or all kinds of
|
||
/// parameters (normal, named, and positional) in any order.
|
||
///
|
||
/// formalParameterList ::=
|
||
/// '(' ')'
|
||
/// | '(' normalFormalParameters (',' optionalFormalParameters)? ')'
|
||
/// | '(' optionalFormalParameters ')'
|
||
///
|
||
/// normalFormalParameters ::=
|
||
/// [NormalFormalParameter] (',' [NormalFormalParameter])*
|
||
///
|
||
/// optionalFormalParameters ::=
|
||
/// optionalPositionalFormalParameters
|
||
/// | namedFormalParameters
|
||
///
|
||
/// optionalPositionalFormalParameters ::=
|
||
/// '[' [DefaultFormalParameter] (',' [DefaultFormalParameter])* ']'
|
||
///
|
||
/// namedFormalParameters ::=
|
||
/// '{' [DefaultFormalParameter] (',' [DefaultFormalParameter])* '}'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FormalParameterList implements AstNode {
|
||
/// Return the left square bracket ('[') or left curly brace ('{') introducing
|
||
/// the optional parameters, or `null` if there are no optional parameters.
|
||
Token? get leftDelimiter;
|
||
|
||
/// Set the left square bracket ('[') or left curly brace ('{') introducing
|
||
/// the optional parameters to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftDelimiter(Token? token);
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Set the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token token);
|
||
|
||
/// Return a list containing the elements representing the parameters in this
|
||
/// list.
|
||
///
|
||
/// The list will contain `null`s if the parameters in this list have not
|
||
/// been resolved.
|
||
List<ParameterElement?> get parameterElements;
|
||
|
||
/// Return the parameters associated with the method.
|
||
NodeList<FormalParameter> get parameters;
|
||
|
||
/// Return the right square bracket (']') or right curly brace ('}')
|
||
/// terminating the optional parameters, or `null` if there are no optional
|
||
/// parameters.
|
||
Token? get rightDelimiter;
|
||
|
||
/// Set the right square bracket (']') or right curly brace ('}') terminating
|
||
/// the optional parameters to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightDelimiter(Token? token);
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Set the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token token);
|
||
}
|
||
|
||
/// The parts of a for loop that control the iteration.
|
||
///
|
||
/// forLoopParts ::=
|
||
/// [VariableDeclaration] ';' [Expression]? ';' expressionList?
|
||
/// | [Expression]? ';' [Expression]? ';' expressionList?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ForParts implements ForLoopParts {
|
||
/// Return the condition used to determine when to terminate the loop, or
|
||
/// `null` if there is no condition.
|
||
Expression? get condition;
|
||
|
||
/// Return the semicolon separating the initializer and the condition.
|
||
Token get leftSeparator;
|
||
|
||
/// Return the semicolon separating the condition and the updater.
|
||
Token get rightSeparator;
|
||
|
||
/// Return the list of expressions run after each execution of the loop body.
|
||
NodeList<Expression> get updaters;
|
||
}
|
||
|
||
/// The parts of a for loop that control the iteration when there are one or
|
||
/// more variable declarations as part of the for loop.
|
||
///
|
||
/// forLoopParts ::=
|
||
/// [VariableDeclarationList] ';' [Expression]? ';' expressionList?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ForPartsWithDeclarations implements ForParts {
|
||
/// Return the declaration of the loop variables.
|
||
VariableDeclarationList get variables;
|
||
}
|
||
|
||
/// The parts of a for loop that control the iteration when there are no
|
||
/// variable declarations as part of the for loop.
|
||
///
|
||
/// forLoopParts ::=
|
||
/// [Expression]? ';' [Expression]? ';' expressionList?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ForPartsWithExpression implements ForParts {
|
||
/// Return the initialization expression, or `null` if there is no
|
||
/// initialization expression.
|
||
Expression? get initialization;
|
||
}
|
||
|
||
/// A for or for-each statement.
|
||
///
|
||
/// forStatement ::=
|
||
/// 'for' '(' forLoopParts ')' [Statement]
|
||
///
|
||
/// forLoopParts ::=
|
||
/// [VariableDeclaration] ';' [Expression]? ';' expressionList?
|
||
/// | [Expression]? ';' [Expression]? ';' expressionList?
|
||
/// | [DeclaredIdentifier] 'in' [Expression]
|
||
/// | [SimpleIdentifier] 'in' [Expression]
|
||
///
|
||
/// This is the class that is used to represent a for loop when either the
|
||
/// 'control-flow-collections' or 'spread-collections' experiments are enabled.
|
||
/// If neither of those experiments are enabled, then either `ForStatement` or
|
||
/// `ForEachStatement` will be used.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ForStatement implements Statement {
|
||
/// Return the token representing the 'await' keyword, or `null` if there is
|
||
/// no 'await' keyword.
|
||
Token? get awaitKeyword;
|
||
|
||
/// Return the body of the loop.
|
||
Statement get body;
|
||
|
||
/// Return the token representing the 'for' keyword.
|
||
Token get forKeyword;
|
||
|
||
/// Return the parts of the for element that control the iteration.
|
||
ForLoopParts get forLoopParts;
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
}
|
||
|
||
/// A node representing the body of a function or method.
|
||
///
|
||
/// functionBody ::=
|
||
/// [BlockFunctionBody]
|
||
/// | [EmptyFunctionBody]
|
||
/// | [ExpressionFunctionBody]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FunctionBody implements AstNode {
|
||
/// Return `true` if this function body is asynchronous.
|
||
bool get isAsynchronous;
|
||
|
||
/// Return `true` if this function body is a generator.
|
||
bool get isGenerator;
|
||
|
||
/// Return `true` if this function body is synchronous.
|
||
bool get isSynchronous;
|
||
|
||
/// Return the token representing the 'async' or 'sync' keyword, or `null` if
|
||
/// there is no such keyword.
|
||
Token? get keyword;
|
||
|
||
/// Return the star following the 'async' or 'sync' keyword, or `null` if
|
||
/// there is no star.
|
||
Token? get star;
|
||
|
||
/// If [variable] is a local variable or parameter declared anywhere within
|
||
/// the top level function or method containing this [FunctionBody], return a
|
||
/// boolean indicating whether [variable] is potentially mutated within a
|
||
/// local function other than the function in which it is declared.
|
||
///
|
||
/// If [variable] is not a local variable or parameter declared within the top
|
||
/// level function or method containing this [FunctionBody], return `false`.
|
||
///
|
||
/// Throws an exception if resolution has not yet been performed.
|
||
bool isPotentiallyMutatedInClosure(VariableElement variable);
|
||
|
||
/// If [variable] is a local variable or parameter declared anywhere within
|
||
/// the top level function or method containing this [FunctionBody], return a
|
||
/// boolean indicating whether [variable] is potentially mutated within the
|
||
/// scope of its declaration.
|
||
///
|
||
/// If [variable] is not a local variable or parameter declared within the top
|
||
/// level function or method containing this [FunctionBody], return `false`.
|
||
///
|
||
/// Throws an exception if resolution has not yet been performed.
|
||
bool isPotentiallyMutatedInScope(VariableElement variable);
|
||
}
|
||
|
||
/// A top-level function declaration.
|
||
///
|
||
/// functionDeclaration ::=
|
||
/// 'external' functionSignature
|
||
/// | functionSignature [FunctionBody]
|
||
///
|
||
/// functionSignature ::=
|
||
/// [Type]? ('get' | 'set')? [SimpleIdentifier] [FormalParameterList]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FunctionDeclaration implements NamedCompilationUnitMember {
|
||
@override
|
||
ExecutableElement? get declaredElement;
|
||
|
||
/// Return the token representing the 'external' keyword, or `null` if this is
|
||
/// not an external function.
|
||
Token? get externalKeyword;
|
||
|
||
/// Set the token representing the 'external' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set externalKeyword(Token? token);
|
||
|
||
/// Return the function expression being wrapped.
|
||
FunctionExpression get functionExpression;
|
||
|
||
/// Set the function expression being wrapped to the given
|
||
/// [functionExpression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set functionExpression(FunctionExpression functionExpression);
|
||
|
||
/// Return `true` if this function declares a getter.
|
||
bool get isGetter;
|
||
|
||
/// Return `true` if this function declares a setter.
|
||
bool get isSetter;
|
||
|
||
@override
|
||
SimpleIdentifier get name;
|
||
|
||
/// Return the token representing the 'get' or 'set' keyword, or `null` if
|
||
/// this is a function declaration rather than a property declaration.
|
||
Token? get propertyKeyword;
|
||
|
||
/// Set the token representing the 'get' or 'set' keyword to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set propertyKeyword(Token? token);
|
||
|
||
/// Return the return type of the function, or `null` if no return type was
|
||
/// declared.
|
||
TypeAnnotation? get returnType;
|
||
|
||
/// Set the return type of the function to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set returnType(TypeAnnotation? type);
|
||
}
|
||
|
||
/// A [FunctionDeclaration] used as a statement.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FunctionDeclarationStatement implements Statement {
|
||
/// Return the function declaration being wrapped.
|
||
FunctionDeclaration get functionDeclaration;
|
||
|
||
/// Set the function declaration being wrapped to the given
|
||
/// [functionDeclaration].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set functionDeclaration(FunctionDeclaration functionDeclaration);
|
||
}
|
||
|
||
/// A function expression.
|
||
///
|
||
/// functionExpression ::=
|
||
/// [TypeParameterList]? [FormalParameterList] [FunctionBody]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FunctionExpression implements Expression {
|
||
/// Return the body of the function.
|
||
FunctionBody get body;
|
||
|
||
/// Set the body of the function to the given [functionBody].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set body(FunctionBody functionBody);
|
||
|
||
/// Return the element associated with the function, or `null` if the AST
|
||
/// structure has not been resolved.
|
||
ExecutableElement? get declaredElement;
|
||
|
||
/// Return the parameters associated with the function, or `null` if the
|
||
/// function is part of a top-level getter.
|
||
FormalParameterList? get parameters;
|
||
|
||
/// Set the parameters associated with the function to the given list of
|
||
/// [parameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set parameters(FormalParameterList? parameters);
|
||
|
||
/// Return the type parameters associated with this method, or `null` if this
|
||
/// method is not a generic method.
|
||
TypeParameterList? get typeParameters;
|
||
|
||
/// Set the type parameters associated with this method to the given
|
||
/// [typeParameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeParameters(TypeParameterList? typeParameters);
|
||
}
|
||
|
||
/// The invocation of a function resulting from evaluating an expression.
|
||
///
|
||
/// Invocations of methods and other forms of functions are represented by
|
||
/// [MethodInvocation] nodes. Invocations of getters and setters are represented
|
||
/// by either [PrefixedIdentifier] or [PropertyAccess] nodes.
|
||
///
|
||
/// functionExpressionInvocation ::=
|
||
/// [Expression] [TypeArgumentList]? [ArgumentList]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FunctionExpressionInvocation
|
||
implements NullShortableExpression, InvocationExpression {
|
||
/// Set the list of arguments to the method to the given [argumentList].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set argumentList(ArgumentList argumentList);
|
||
|
||
/// Return the expression producing the function being invoked.
|
||
@override
|
||
Expression get function;
|
||
|
||
/// Set the expression producing the function being invoked to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set function(Expression expression);
|
||
|
||
/// Return the element associated with the function being invoked based on
|
||
/// static type information, or `null` if the AST structure has not been
|
||
/// resolved or the function could not be resolved.
|
||
ExecutableElement? get staticElement;
|
||
|
||
/// Set the element associated with the function being invoked based on static
|
||
/// type information to the given [element].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set staticElement(ExecutableElement? element);
|
||
|
||
/// Set the type arguments to be applied to the method being invoked to the
|
||
/// given [typeArguments].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeArguments(TypeArgumentList? typeArguments);
|
||
}
|
||
|
||
/// A function type alias.
|
||
///
|
||
/// functionTypeAlias ::=
|
||
/// functionPrefix [TypeParameterList]? [FormalParameterList] ';'
|
||
///
|
||
/// functionPrefix ::=
|
||
/// [TypeAnnotation]? [SimpleIdentifier]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FunctionTypeAlias implements TypeAlias {
|
||
@override
|
||
// ignore: deprecated_member_use_from_same_package
|
||
FunctionTypeAliasElement? get declaredElement;
|
||
|
||
/// Return the parameters associated with the function type.
|
||
FormalParameterList get parameters;
|
||
|
||
/// Set the parameters associated with the function type to the given list of
|
||
/// [parameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set parameters(FormalParameterList parameters);
|
||
|
||
/// Return the return type of the function type being defined, or `null` if no
|
||
/// return type was given.
|
||
TypeAnnotation? get returnType;
|
||
|
||
/// Set the return type of the function type being defined to the given
|
||
/// [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set returnType(TypeAnnotation? type);
|
||
|
||
/// Return the type parameters for the function type, or `null` if the
|
||
/// function type does not have any type parameters.
|
||
TypeParameterList? get typeParameters;
|
||
|
||
/// Set the type parameters for the function type to the given list of
|
||
/// [typeParameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeParameters(TypeParameterList? typeParameters);
|
||
}
|
||
|
||
/// A function-typed formal parameter.
|
||
///
|
||
/// functionSignature ::=
|
||
/// [TypeAnnotation]? [SimpleIdentifier] [TypeParameterList]?
|
||
/// [FormalParameterList] '?'?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class FunctionTypedFormalParameter implements NormalFormalParameter {
|
||
@override
|
||
SimpleIdentifier get identifier;
|
||
|
||
/// Return the parameters of the function-typed parameter.
|
||
FormalParameterList get parameters;
|
||
|
||
/// Set the parameters of the function-typed parameter to the given
|
||
/// [parameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set parameters(FormalParameterList parameters);
|
||
|
||
/// Return the question mark indicating that the function type is nullable, or
|
||
/// `null` if there is no question mark. Having a nullable function type means
|
||
/// that the parameter can be null.
|
||
Token? get question;
|
||
|
||
/// Return the return type of the function, or `null` if the function does not
|
||
/// have a return type.
|
||
TypeAnnotation? get returnType;
|
||
|
||
/// Set the return type of the function to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set returnType(TypeAnnotation? type);
|
||
|
||
/// Return the type parameters associated with this function, or `null` if
|
||
/// this function is not a generic function.
|
||
TypeParameterList? get typeParameters;
|
||
|
||
/// Set the type parameters associated with this method to the given
|
||
/// [typeParameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeParameters(TypeParameterList? typeParameters);
|
||
}
|
||
|
||
/// An anonymous function type.
|
||
///
|
||
/// functionType ::=
|
||
/// [TypeAnnotation]? 'Function' [TypeParameterList]?
|
||
/// [FormalParameterList] '?'?
|
||
///
|
||
/// where the FormalParameterList is being used to represent the following
|
||
/// grammar, despite the fact that FormalParameterList can represent a much
|
||
/// larger grammar than the one below. This is done in order to simplify the
|
||
/// implementation.
|
||
///
|
||
/// parameterTypeList ::=
|
||
/// () |
|
||
/// ( normalParameterTypes ,? ) |
|
||
/// ( normalParameterTypes , optionalParameterTypes ) |
|
||
/// ( optionalParameterTypes )
|
||
/// namedParameterTypes ::=
|
||
/// { namedParameterType (, namedParameterType)* ,? }
|
||
/// namedParameterType ::=
|
||
/// [TypeAnnotation]? [SimpleIdentifier]
|
||
/// normalParameterTypes ::=
|
||
/// normalParameterType (, normalParameterType)*
|
||
/// normalParameterType ::=
|
||
/// [TypeAnnotation] [SimpleIdentifier]?
|
||
/// optionalParameterTypes ::=
|
||
/// optionalPositionalParameterTypes | namedParameterTypes
|
||
/// optionalPositionalParameterTypes ::=
|
||
/// [ normalParameterTypes ,? ]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class GenericFunctionType implements TypeAnnotation {
|
||
/// Return the keyword 'Function'.
|
||
Token get functionKeyword;
|
||
|
||
/// Set the keyword 'Function' to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set functionKeyword(Token token);
|
||
|
||
/// Return the parameters associated with the function type.
|
||
FormalParameterList get parameters;
|
||
|
||
/// Set the parameters associated with the function type to the given list of
|
||
/// [parameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set parameters(FormalParameterList parameters);
|
||
|
||
/// Set the question mark indicating that the type is nullable to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set question(Token? token);
|
||
|
||
/// Return the return type of the function type being defined, or `null` if
|
||
/// no return type was given.
|
||
TypeAnnotation? get returnType;
|
||
|
||
/// Set the return type of the function type being defined to the given[type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set returnType(TypeAnnotation? type);
|
||
|
||
/// Return the type parameters for the function type, or `null` if the
|
||
/// function type does not have any type parameters.
|
||
TypeParameterList? get typeParameters;
|
||
|
||
/// Set the type parameters for the function type to the given list of
|
||
/// [typeParameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeParameters(TypeParameterList? typeParameters);
|
||
}
|
||
|
||
/// A generic type alias.
|
||
///
|
||
/// functionTypeAlias ::=
|
||
/// metadata 'typedef' [SimpleIdentifier] [TypeParameterList]? = [FunctionType] ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class GenericTypeAlias implements TypeAlias {
|
||
/// Return the equal sign separating the name being defined from the function
|
||
/// type.
|
||
Token get equals;
|
||
|
||
/// Set the equal sign separating the name being defined from the function
|
||
/// type to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set equals(Token token);
|
||
|
||
/// Return the type of function being defined by the alias.
|
||
///
|
||
/// When the non-function type aliases feature is enabled and the denoted
|
||
/// type is not a [GenericFunctionType], return `null`.
|
||
GenericFunctionType? get functionType;
|
||
|
||
/// Set the type of function being defined by the alias to the given
|
||
/// [functionType].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set functionType(GenericFunctionType? functionType);
|
||
|
||
/// Return the type being defined by the alias.
|
||
TypeAnnotation get type;
|
||
|
||
/// Return the type parameters for the function type, or `null` if the
|
||
/// function type does not have any type parameters.
|
||
TypeParameterList? get typeParameters;
|
||
|
||
/// Set the type parameters for the function type to the given list of
|
||
/// [typeParameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeParameters(TypeParameterList? typeParameters);
|
||
}
|
||
|
||
/// A combinator that restricts the names being imported to those that are not
|
||
/// in a given list.
|
||
///
|
||
/// hideCombinator ::=
|
||
/// 'hide' [SimpleIdentifier] (',' [SimpleIdentifier])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class HideCombinator implements Combinator {
|
||
/// Return the list of names from the library that are hidden by this
|
||
/// combinator.
|
||
NodeList<SimpleIdentifier> get hiddenNames;
|
||
}
|
||
|
||
/// A node that represents an identifier.
|
||
///
|
||
/// identifier ::=
|
||
/// [SimpleIdentifier]
|
||
/// | [PrefixedIdentifier]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Identifier implements Expression {
|
||
/// Return the lexical representation of the identifier.
|
||
String get name;
|
||
|
||
/// Return the element associated with this identifier based on static type
|
||
/// information, or `null` if the AST structure has not been resolved or if
|
||
/// this identifier could not be resolved.
|
||
///
|
||
/// One example of the latter case is an identifier that is not defined
|
||
/// within the scope in which it appears.
|
||
Element? get staticElement;
|
||
|
||
/// Return `true` if the given [name] is visible only within the library in
|
||
/// which it is declared.
|
||
static bool isPrivateName(String name) => name.startsWith('_');
|
||
}
|
||
|
||
/// The basic structure of an if element.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class IfElement implements CollectionElement {
|
||
/// Return the condition used to determine which of the statements is executed
|
||
/// next.
|
||
Expression get condition;
|
||
|
||
/// Return the statement that is executed if the condition evaluates to
|
||
/// `false`, or `null` if there is no else statement.
|
||
CollectionElement? get elseElement;
|
||
|
||
/// Return the token representing the 'else' keyword, or `null` if there is no
|
||
/// else statement.
|
||
Token? get elseKeyword;
|
||
|
||
/// Return the token representing the 'if' keyword.
|
||
Token get ifKeyword;
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Return the statement that is executed if the condition evaluates to
|
||
/// `true`.
|
||
CollectionElement get thenElement;
|
||
}
|
||
|
||
/// An if statement.
|
||
///
|
||
/// ifStatement ::=
|
||
/// 'if' '(' [Expression] ')' [Statement] ('else' [Statement])?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class IfStatement implements Statement {
|
||
/// Return the condition used to determine which of the statements is executed
|
||
/// next.
|
||
Expression get condition;
|
||
|
||
/// Set the condition used to determine which of the statements is executed
|
||
/// next to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set condition(Expression expression);
|
||
|
||
/// Return the token representing the 'else' keyword, or `null` if there is no
|
||
/// else statement.
|
||
Token? get elseKeyword;
|
||
|
||
/// Set the token representing the 'else' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set elseKeyword(Token? token);
|
||
|
||
/// Return the statement that is executed if the condition evaluates to
|
||
/// `false`, or `null` if there is no else statement.
|
||
Statement? get elseStatement;
|
||
|
||
/// Set the statement that is executed if the condition evaluates to `false`
|
||
/// to the given [statement].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set elseStatement(Statement? statement);
|
||
|
||
/// Return the token representing the 'if' keyword.
|
||
Token get ifKeyword;
|
||
|
||
/// Set the token representing the 'if' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set ifKeyword(Token token);
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Set the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token token);
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Set the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token token);
|
||
|
||
/// Return the statement that is executed if the condition evaluates to
|
||
/// `true`.
|
||
Statement get thenStatement;
|
||
|
||
/// Set the statement that is executed if the condition evaluates to `true` to
|
||
/// the given [statement].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set thenStatement(Statement statement);
|
||
}
|
||
|
||
/// The "implements" clause in an class declaration.
|
||
///
|
||
/// implementsClause ::=
|
||
/// 'implements' [TypeName] (',' [TypeName])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ImplementsClause implements AstNode {
|
||
/// Return the token representing the 'implements' keyword.
|
||
Token get implementsKeyword;
|
||
|
||
/// Set the token representing the 'implements' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set implementsKeyword(Token token);
|
||
|
||
/// Return the list of the interfaces that are being implemented.
|
||
NodeList<TypeName> get interfaces;
|
||
}
|
||
|
||
/// An import directive.
|
||
///
|
||
/// importDirective ::=
|
||
/// [Annotation] 'import' [StringLiteral] ('as' identifier)? [Combinator]* ';'
|
||
/// | [Annotation] 'import' [StringLiteral] 'deferred' 'as' identifier [Combinator]* ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ImportDirective implements NamespaceDirective {
|
||
static Comparator<ImportDirective> COMPARATOR =
|
||
(ImportDirective import1, ImportDirective import2) {
|
||
//
|
||
// uri
|
||
//
|
||
StringLiteral uri1 = import1.uri;
|
||
StringLiteral uri2 = import2.uri;
|
||
String? uriStr1 = uri1.stringValue;
|
||
String? uriStr2 = uri2.stringValue;
|
||
if (uriStr1 != null || uriStr2 != null) {
|
||
if (uriStr1 == null) {
|
||
return -1;
|
||
} else if (uriStr2 == null) {
|
||
return 1;
|
||
} else {
|
||
int compare = uriStr1.compareTo(uriStr2);
|
||
if (compare != 0) {
|
||
return compare;
|
||
}
|
||
}
|
||
}
|
||
//
|
||
// as
|
||
//
|
||
SimpleIdentifier? prefix1 = import1.prefix;
|
||
SimpleIdentifier? prefix2 = import2.prefix;
|
||
String? prefixStr1 = prefix1?.name;
|
||
String? prefixStr2 = prefix2?.name;
|
||
if (prefixStr1 != null || prefixStr2 != null) {
|
||
if (prefixStr1 == null) {
|
||
return -1;
|
||
} else if (prefixStr2 == null) {
|
||
return 1;
|
||
} else {
|
||
int compare = prefixStr1.compareTo(prefixStr2);
|
||
if (compare != 0) {
|
||
return compare;
|
||
}
|
||
}
|
||
}
|
||
//
|
||
// hides and shows
|
||
//
|
||
NodeList<Combinator> combinators1 = import1.combinators;
|
||
List<String> allHides1 = <String>[];
|
||
List<String> allShows1 = <String>[];
|
||
int length1 = combinators1.length;
|
||
for (int i = 0; i < length1; i++) {
|
||
Combinator combinator = combinators1[i];
|
||
if (combinator is HideCombinator) {
|
||
NodeList<SimpleIdentifier> hides = combinator.hiddenNames;
|
||
int hideLength = hides.length;
|
||
for (int j = 0; j < hideLength; j++) {
|
||
SimpleIdentifier simpleIdentifier = hides[j];
|
||
allHides1.add(simpleIdentifier.name);
|
||
}
|
||
} else {
|
||
NodeList<SimpleIdentifier> shows =
|
||
(combinator as ShowCombinator).shownNames;
|
||
int showLength = shows.length;
|
||
for (int j = 0; j < showLength; j++) {
|
||
SimpleIdentifier simpleIdentifier = shows[j];
|
||
allShows1.add(simpleIdentifier.name);
|
||
}
|
||
}
|
||
}
|
||
NodeList<Combinator> combinators2 = import2.combinators;
|
||
List<String> allHides2 = <String>[];
|
||
List<String> allShows2 = <String>[];
|
||
int length2 = combinators2.length;
|
||
for (int i = 0; i < length2; i++) {
|
||
Combinator combinator = combinators2[i];
|
||
if (combinator is HideCombinator) {
|
||
NodeList<SimpleIdentifier> hides = combinator.hiddenNames;
|
||
int hideLength = hides.length;
|
||
for (int j = 0; j < hideLength; j++) {
|
||
SimpleIdentifier simpleIdentifier = hides[j];
|
||
allHides2.add(simpleIdentifier.name);
|
||
}
|
||
} else {
|
||
NodeList<SimpleIdentifier> shows =
|
||
(combinator as ShowCombinator).shownNames;
|
||
int showLength = shows.length;
|
||
for (int j = 0; j < showLength; j++) {
|
||
SimpleIdentifier simpleIdentifier = shows[j];
|
||
allShows2.add(simpleIdentifier.name);
|
||
}
|
||
}
|
||
}
|
||
// test lengths of combinator lists first
|
||
if (allHides1.length != allHides2.length) {
|
||
return allHides1.length - allHides2.length;
|
||
}
|
||
if (allShows1.length != allShows2.length) {
|
||
return allShows1.length - allShows2.length;
|
||
}
|
||
// next ensure that the lists are equivalent
|
||
if (!allHides1.toSet().containsAll(allHides2)) {
|
||
return -1;
|
||
}
|
||
if (!allShows1.toSet().containsAll(allShows2)) {
|
||
return -1;
|
||
}
|
||
return 0;
|
||
};
|
||
|
||
/// Return the token representing the 'as' keyword, or `null` if the imported
|
||
/// names are not prefixed.
|
||
Token? get asKeyword;
|
||
|
||
/// Set the token representing the 'as' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set asKeyword(Token? token);
|
||
|
||
/// Return the token representing the 'deferred' keyword, or `null` if the
|
||
/// imported URI is not deferred.
|
||
Token? get deferredKeyword;
|
||
|
||
/// Set the token representing the 'deferred' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set deferredKeyword(Token? token);
|
||
|
||
@override
|
||
ImportElement? get element;
|
||
|
||
/// Return the prefix to be used with the imported names, or `null` if the
|
||
/// imported names are not prefixed.
|
||
SimpleIdentifier? get prefix;
|
||
|
||
/// Set the prefix to be used with the imported names to the given
|
||
/// [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set prefix(SimpleIdentifier? identifier);
|
||
}
|
||
|
||
/// An index expression.
|
||
///
|
||
/// indexExpression ::=
|
||
/// [Expression] '[' [Expression] ']'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class IndexExpression
|
||
implements NullShortableExpression, MethodReferenceExpression {
|
||
/// Return the expression used to compute the index.
|
||
Expression get index;
|
||
|
||
/// Set the expression used to compute the index to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set index(Expression expression);
|
||
|
||
/// Return `true` if this expression is cascaded.
|
||
///
|
||
/// If it is, then the target of this expression is not stored locally but is
|
||
/// stored in the nearest ancestor that is a [CascadeExpression].
|
||
bool get isCascaded;
|
||
|
||
/// Whether this index expression is null aware (as opposed to non-null).
|
||
bool get isNullAware;
|
||
|
||
/// Return the left square bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Set the left square bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftBracket(Token token);
|
||
|
||
/// Return the period (".." | "?..") before a cascaded index expression, or
|
||
/// `null` if this index expression is not part of a cascade expression.
|
||
Token? get period;
|
||
|
||
/// Set the period ("..") before a cascaded index expression to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set period(Token? token);
|
||
|
||
/// Return the question mark before the left bracket, or `null` if there is no
|
||
/// question mark.
|
||
Token? get question;
|
||
|
||
/// Return the expression used to compute the object being indexed.
|
||
///
|
||
/// If this index expression is not part of a cascade expression, then this
|
||
/// is the same as [target]. If this index expression is part of a cascade
|
||
/// expression, then the target expression stored with the cascade expression
|
||
/// is returned.
|
||
Expression get realTarget;
|
||
|
||
/// Return the right square bracket.
|
||
Token get rightBracket;
|
||
|
||
/// Return the expression used to compute the object being indexed, or `null`
|
||
/// if this index expression is part of a cascade expression.
|
||
///
|
||
/// Use [realTarget] to get the target independent of whether this is part of
|
||
/// a cascade expression.
|
||
Expression? get target;
|
||
|
||
/// Set the expression used to compute the object being indexed to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set target(Expression? expression);
|
||
|
||
/// Return `true` if this expression is computing a right-hand value (that is,
|
||
/// if this expression is in a context where the operator '[]' will be
|
||
/// invoked).
|
||
///
|
||
/// Note that [inGetterContext] and [inSetterContext] are not opposites, nor
|
||
/// are they mutually exclusive. In other words, it is possible for both
|
||
/// methods to return `true` when invoked on the same node.
|
||
// TODO(brianwilkerson) Convert this to a getter.
|
||
bool inGetterContext();
|
||
|
||
/// Return `true` if this expression is computing a left-hand value (that is,
|
||
/// if this expression is in a context where the operator '[]=' will be
|
||
/// invoked).
|
||
///
|
||
/// Note that [inGetterContext] and [inSetterContext] are not opposites, nor
|
||
/// are they mutually exclusive. In other words, it is possible for both
|
||
/// methods to return `true` when invoked on the same node.
|
||
// TODO(brianwilkerson) Convert this to a getter.
|
||
bool inSetterContext();
|
||
}
|
||
|
||
/// An instance creation expression.
|
||
///
|
||
/// newExpression ::=
|
||
/// ('new' | 'const')? [TypeName] ('.' [SimpleIdentifier])? [ArgumentList]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class InstanceCreationExpression implements Expression {
|
||
/// Return the list of arguments to the constructor.
|
||
ArgumentList get argumentList;
|
||
|
||
/// Set the list of arguments to the constructor to the given [argumentList].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set argumentList(ArgumentList argumentList);
|
||
|
||
/// Return the name of the constructor to be invoked.
|
||
ConstructorName get constructorName;
|
||
|
||
/// Set the name of the constructor to be invoked to the given [name].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set constructorName(ConstructorName name);
|
||
|
||
/// Return `true` if this creation expression is used to invoke a constant
|
||
/// constructor, either because the keyword `const` was explicitly provided or
|
||
/// because no keyword was provided and this expression is in a constant
|
||
/// context.
|
||
bool get isConst;
|
||
|
||
/// Return the 'new' or 'const' keyword used to indicate how an object should
|
||
/// be created, or `null` if the keyword was not explicitly provided.
|
||
Token? get keyword;
|
||
|
||
/// Set the 'new' or 'const' keyword used to indicate how an object should be
|
||
/// created to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token? token);
|
||
}
|
||
|
||
/// An integer literal expression.
|
||
///
|
||
/// integerLiteral ::=
|
||
/// decimalIntegerLiteral
|
||
/// | hexadecimalIntegerLiteral
|
||
///
|
||
/// decimalIntegerLiteral ::=
|
||
/// decimalDigit+
|
||
///
|
||
/// hexadecimalIntegerLiteral ::=
|
||
/// '0x' hexadecimalDigit+
|
||
/// | '0X' hexadecimalDigit+
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class IntegerLiteral implements Literal {
|
||
/// Return the token representing the literal.
|
||
Token get literal;
|
||
|
||
/// Set the token representing the literal to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set literal(Token token);
|
||
|
||
/// Return the value of the literal, or `null` when [literal] does not
|
||
/// represent a valid `int` value, for example because of overflow.
|
||
int? get value;
|
||
|
||
/// Set the value of the literal to the given [value].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set value(int? value);
|
||
}
|
||
|
||
/// A node within a [StringInterpolation].
|
||
///
|
||
/// interpolationElement ::=
|
||
/// [InterpolationExpression]
|
||
/// | [InterpolationString]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class InterpolationElement implements AstNode {}
|
||
|
||
/// An expression embedded in a string interpolation.
|
||
///
|
||
/// interpolationExpression ::=
|
||
/// '$' [SimpleIdentifier]
|
||
/// | '$' '{' [Expression] '}'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class InterpolationExpression implements InterpolationElement {
|
||
/// Return the expression to be evaluated for the value to be converted into a
|
||
/// string.
|
||
Expression get expression;
|
||
|
||
/// Set the expression to be evaluated for the value to be converted into a
|
||
/// string to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the token used to introduce the interpolation expression; either
|
||
/// '$' if the expression is a simple identifier or '${' if the expression is
|
||
/// a full expression.
|
||
Token get leftBracket;
|
||
|
||
/// Set the token used to introduce the interpolation expression; either '$'
|
||
/// if the expression is a simple identifier or '${' if the expression is a
|
||
/// full expression to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftBracket(Token token);
|
||
|
||
/// Return the right curly bracket, or `null` if the expression is an
|
||
/// identifier without brackets.
|
||
Token? get rightBracket;
|
||
|
||
/// Set the right curly bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightBracket(Token? token);
|
||
}
|
||
|
||
/// A non-empty substring of an interpolated string.
|
||
///
|
||
/// interpolationString ::=
|
||
/// characters
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class InterpolationString implements InterpolationElement {
|
||
/// Return the characters that will be added to the string.
|
||
Token get contents;
|
||
|
||
/// Set the characters that will be added to the string to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set contents(Token token);
|
||
|
||
/// Return the offset of the after-last contents character.
|
||
int get contentsEnd;
|
||
|
||
/// Return the offset of the first contents character.
|
||
int get contentsOffset;
|
||
|
||
/// Return the value of the literal.
|
||
String get value;
|
||
|
||
/// Set the value of the literal to the given [value].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set value(String value);
|
||
}
|
||
|
||
/// The invocation of a function or method; either a
|
||
/// [FunctionExpressionInvocation] or a [MethodInvocation].
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class InvocationExpression implements Expression {
|
||
/// Return the list of arguments to the method.
|
||
ArgumentList get argumentList;
|
||
|
||
/// The expression that identifies the function or method being invoked.
|
||
/// For example:
|
||
///
|
||
/// (o.m)<TArgs>(args); // target will be `o.m`
|
||
/// o.m<TArgs>(args); // target will be `m`
|
||
///
|
||
/// In either case, the [function.staticType] will be the
|
||
/// [staticInvokeType] before applying type arguments `TArgs`.
|
||
Expression get function;
|
||
|
||
/// Return the function type of the invocation based on the static type
|
||
/// information, or `null` if the AST structure has not been resolved, or if
|
||
/// the invoke could not be resolved.
|
||
///
|
||
/// This will usually be a [FunctionType], but it can also be `dynamic` or
|
||
/// `Function`. In the case of interface types that have a `call` method, we
|
||
/// store the type of that `call` method here as parameterized.
|
||
DartType? get staticInvokeType;
|
||
|
||
/// Sets the function type of the invocation based on the static type
|
||
/// information.
|
||
@Deprecated('Clients should not build AST manually')
|
||
set staticInvokeType(DartType? value);
|
||
|
||
/// Return the type arguments to be applied to the method being invoked, or
|
||
/// `null` if no type arguments were provided.
|
||
TypeArgumentList? get typeArguments;
|
||
|
||
/// Return the actual type arguments of the invocation, either explicitly
|
||
/// specified in [typeArguments], or inferred.
|
||
///
|
||
/// If the AST has been resolved, never returns `null`, returns an empty list
|
||
/// if the [function] does not have type parameters.
|
||
///
|
||
/// Return `null` if the AST structure has not been resolved.
|
||
List<DartType>? get typeArgumentTypes;
|
||
}
|
||
|
||
/// An is expression.
|
||
///
|
||
/// isExpression ::=
|
||
/// [Expression] 'is' '!'? [TypeAnnotation]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class IsExpression implements Expression {
|
||
/// Return the expression used to compute the value whose type is being
|
||
/// tested.
|
||
Expression get expression;
|
||
|
||
/// Set the expression used to compute the value whose type is being tested to
|
||
/// the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the is operator.
|
||
Token get isOperator;
|
||
|
||
/// Set the is operator to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set isOperator(Token token);
|
||
|
||
/// Return the not operator, or `null` if the sense of the test is not
|
||
/// negated.
|
||
Token? get notOperator;
|
||
|
||
/// Set the not operator to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set notOperator(Token? token);
|
||
|
||
/// Return the type being tested for.
|
||
TypeAnnotation get type;
|
||
|
||
/// Set the type being tested for to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set type(TypeAnnotation type);
|
||
}
|
||
|
||
/// A label on either a [LabeledStatement] or a [NamedExpression].
|
||
///
|
||
/// label ::=
|
||
/// [SimpleIdentifier] ':'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Label implements AstNode {
|
||
/// Return the colon that separates the label from the statement.
|
||
Token get colon;
|
||
|
||
/// Set the colon that separates the label from the statement to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set colon(Token token);
|
||
|
||
/// Return the label being associated with the statement.
|
||
SimpleIdentifier get label;
|
||
|
||
/// Set the label being associated with the statement to the given [label].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set label(SimpleIdentifier label);
|
||
}
|
||
|
||
/// A statement that has a label associated with them.
|
||
///
|
||
/// labeledStatement ::=
|
||
/// [Label]+ [Statement]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class LabeledStatement implements Statement {
|
||
/// Return the labels being associated with the statement.
|
||
NodeList<Label> get labels;
|
||
|
||
/// Return the statement with which the labels are being associated.
|
||
Statement get statement;
|
||
|
||
/// Set the statement with which the labels are being associated to the given
|
||
/// [statement].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set statement(Statement statement);
|
||
}
|
||
|
||
/// A library directive.
|
||
///
|
||
/// libraryDirective ::=
|
||
/// [Annotation] 'library' [Identifier] ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class LibraryDirective implements Directive {
|
||
/// Return the token representing the 'library' keyword.
|
||
Token get libraryKeyword;
|
||
|
||
/// Set the token representing the 'library' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set libraryKeyword(Token token);
|
||
|
||
/// Return the name of the library being defined.
|
||
LibraryIdentifier get name;
|
||
|
||
/// Set the name of the library being defined to the given [name].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(LibraryIdentifier name);
|
||
|
||
/// Return the semicolon terminating the directive.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the directive to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
}
|
||
|
||
/// The identifier for a library.
|
||
///
|
||
/// libraryIdentifier ::=
|
||
/// [SimpleIdentifier] ('.' [SimpleIdentifier])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class LibraryIdentifier implements Identifier {
|
||
/// Return the components of the identifier.
|
||
NodeList<SimpleIdentifier> get components;
|
||
}
|
||
|
||
/// A list literal.
|
||
///
|
||
/// listLiteral ::=
|
||
/// 'const'? [TypeAnnotationList]? '[' elements? ']'
|
||
///
|
||
/// elements ::=
|
||
/// [CollectionElement] (',' [CollectionElement])* ','?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ListLiteral implements TypedLiteral {
|
||
/// Return the syntactic elements used to compute the elements of the list.
|
||
NodeList<CollectionElement> get elements;
|
||
|
||
/// Return the left square bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Set the left square bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftBracket(Token token);
|
||
|
||
/// Return the right square bracket.
|
||
Token get rightBracket;
|
||
|
||
/// Set the right square bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightBracket(Token token);
|
||
}
|
||
|
||
/// A node that represents a literal expression.
|
||
///
|
||
/// literal ::=
|
||
/// [BooleanLiteral]
|
||
/// | [DoubleLiteral]
|
||
/// | [IntegerLiteral]
|
||
/// | [ListLiteral]
|
||
/// | [NullLiteral]
|
||
/// | [SetOrMapLiteral]
|
||
/// | [StringLiteral]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Literal implements Expression {}
|
||
|
||
/// A single key/value pair in a map literal.
|
||
///
|
||
/// mapLiteralEntry ::=
|
||
/// [Expression] ':' [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class MapLiteralEntry implements CollectionElement {
|
||
/// Return the expression computing the key with which the value will be
|
||
/// associated.
|
||
Expression get key;
|
||
|
||
/// Set the expression computing the key with which the value will be
|
||
/// associated to the given [string].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set key(Expression string);
|
||
|
||
/// Return the colon that separates the key from the value.
|
||
Token get separator;
|
||
|
||
/// Set the colon that separates the key from the value to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set separator(Token token);
|
||
|
||
/// Return the expression computing the value that will be associated with the
|
||
/// key.
|
||
Expression get value;
|
||
|
||
/// Set the expression computing the value that will be associated with the
|
||
/// key to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set value(Expression expression);
|
||
}
|
||
|
||
/// A method declaration.
|
||
///
|
||
/// methodDeclaration ::=
|
||
/// methodSignature [FunctionBody]
|
||
///
|
||
/// methodSignature ::=
|
||
/// 'external'? ('abstract' | 'static')? [Type]? ('get' | 'set')?
|
||
/// methodName [TypeParameterList] [FormalParameterList]
|
||
///
|
||
/// methodName ::=
|
||
/// [SimpleIdentifier]
|
||
/// | 'operator' [SimpleIdentifier]
|
||
///
|
||
/// Prior to the 'extension-methods' experiment, these nodes were always
|
||
/// children of a class declaration. When the experiment is enabled, these nodes
|
||
/// can also be children of an extension declaration.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class MethodDeclaration implements ClassMember {
|
||
/// Return the body of the method.
|
||
FunctionBody get body;
|
||
|
||
/// Set the body of the method to the given [functionBody].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set body(FunctionBody functionBody);
|
||
|
||
@override
|
||
ExecutableElement? get declaredElement;
|
||
|
||
/// Return the token for the 'external' keyword, or `null` if the constructor
|
||
/// is not external.
|
||
Token? get externalKeyword;
|
||
|
||
/// Set the token for the 'external' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set externalKeyword(Token? token);
|
||
|
||
/// Return `true` if this method is declared to be an abstract method.
|
||
bool get isAbstract;
|
||
|
||
/// Return `true` if this method declares a getter.
|
||
bool get isGetter;
|
||
|
||
/// Return `true` if this method declares an operator.
|
||
bool get isOperator;
|
||
|
||
/// Return `true` if this method declares a setter.
|
||
bool get isSetter;
|
||
|
||
/// Return `true` if this method is declared to be a static method.
|
||
bool get isStatic;
|
||
|
||
/// Return the token representing the 'abstract' or 'static' keyword, or
|
||
/// `null` if neither modifier was specified.
|
||
Token? get modifierKeyword;
|
||
|
||
/// Set the token representing the 'abstract' or 'static' keyword to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set modifierKeyword(Token? token);
|
||
|
||
/// Return the name of the method.
|
||
SimpleIdentifier get name;
|
||
|
||
/// Set the name of the method to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(SimpleIdentifier identifier);
|
||
|
||
/// Return the token representing the 'operator' keyword, or `null` if this
|
||
/// method does not declare an operator.
|
||
Token? get operatorKeyword;
|
||
|
||
/// Set the token representing the 'operator' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set operatorKeyword(Token? token);
|
||
|
||
/// Return the parameters associated with the method, or `null` if this method
|
||
/// declares a getter.
|
||
FormalParameterList? get parameters;
|
||
|
||
/// Set the parameters associated with the method to the given list of
|
||
/// [parameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set parameters(FormalParameterList? parameters);
|
||
|
||
/// Return the token representing the 'get' or 'set' keyword, or `null` if
|
||
/// this is a method declaration rather than a property declaration.
|
||
Token? get propertyKeyword;
|
||
|
||
/// Set the token representing the 'get' or 'set' keyword to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set propertyKeyword(Token? token);
|
||
|
||
/// Return the return type of the method, or `null` if no return type was
|
||
/// declared.
|
||
TypeAnnotation? get returnType;
|
||
|
||
/// Set the return type of the method to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set returnType(TypeAnnotation? type);
|
||
|
||
/// Return the type parameters associated with this method, or `null` if this
|
||
/// method is not a generic method.
|
||
TypeParameterList? get typeParameters;
|
||
|
||
/// Set the type parameters associated with this method to the given
|
||
/// [typeParameters].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeParameters(TypeParameterList? typeParameters);
|
||
}
|
||
|
||
/// The invocation of either a function or a method.
|
||
///
|
||
/// Invocations of functions resulting from evaluating an expression are
|
||
/// represented by [FunctionExpressionInvocation] nodes. Invocations of getters
|
||
/// and setters are represented by either [PrefixedIdentifier] or
|
||
/// [PropertyAccess] nodes.
|
||
///
|
||
/// methodInvocation ::=
|
||
/// ([Expression] '.')? [SimpleIdentifier] [TypeArgumentList]? [ArgumentList]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class MethodInvocation
|
||
implements NullShortableExpression, InvocationExpression {
|
||
/// Set the list of arguments to the method to the given [argumentList].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set argumentList(ArgumentList argumentList);
|
||
|
||
/// Return `true` if this expression is cascaded.
|
||
///
|
||
/// If it is, then the target of this expression is not stored locally but is
|
||
/// stored in the nearest ancestor that is a [CascadeExpression].
|
||
bool get isCascaded;
|
||
|
||
/// Whether this method invocation is null aware (as opposed to non-null).
|
||
bool get isNullAware;
|
||
|
||
/// Return the name of the method being invoked.
|
||
SimpleIdentifier get methodName;
|
||
|
||
/// Set the name of the method being invoked to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set methodName(SimpleIdentifier identifier);
|
||
|
||
/// Return the operator that separates the target from the method name, or
|
||
/// `null` if there is no target.
|
||
///
|
||
/// In an ordinary method invocation this will be period ('.'). In a cascade
|
||
/// section this will be the cascade operator ('..').
|
||
Token? get operator;
|
||
|
||
/// Set the operator that separates the target from the method name to the
|
||
/// given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set operator(Token? token);
|
||
|
||
/// Return the expression used to compute the receiver of the invocation.
|
||
///
|
||
/// If this invocation is not part of a cascade expression, then this is the
|
||
/// same as [target]. If this invocation is part of a cascade expression,
|
||
/// then the target stored with the cascade expression is returned.
|
||
Expression? get realTarget;
|
||
|
||
/// Return the expression producing the object on which the method is defined,
|
||
/// or `null` if there is no target (that is, the target is implicitly `this`)
|
||
/// or if this method invocation is part of a cascade expression.
|
||
///
|
||
/// Use [realTarget] to get the target independent of whether this is part of
|
||
/// a cascade expression.
|
||
Expression? get target;
|
||
|
||
/// Set the expression producing the object on which the method is defined to
|
||
/// the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set target(Expression? expression);
|
||
|
||
/// Set the type arguments to be applied to the method being invoked to the
|
||
/// given [typeArguments].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeArguments(TypeArgumentList? typeArguments);
|
||
}
|
||
|
||
/// An expression that implicitly makes reference to a method.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class MethodReferenceExpression implements AstNode {
|
||
/// Return the element associated with the expression based on the static
|
||
/// types, or `null` if the AST structure has not been resolved, or there is
|
||
/// no meaningful static element to return (e.g. because this is a
|
||
/// non-compound assignment expression, or because the method referred to
|
||
/// could not be resolved).
|
||
MethodElement? get staticElement;
|
||
|
||
/// Set the element associated with the expression based on static types to
|
||
/// the given [element].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set staticElement(MethodElement? element);
|
||
}
|
||
|
||
/// The declaration of a mixin.
|
||
///
|
||
/// mixinDeclaration ::=
|
||
/// metadata? 'mixin' [SimpleIdentifier] [TypeParameterList]?
|
||
/// [OnClause]? [ImplementsClause]? '{' [ClassMember]* '}'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class MixinDeclaration implements ClassOrMixinDeclaration {
|
||
/// Return the token representing the 'mixin' keyword.
|
||
Token get mixinKeyword;
|
||
|
||
/// Return the on clause for the mixin, or `null` if the mixin does not have
|
||
/// any superclass constraints.
|
||
OnClause? get onClause;
|
||
}
|
||
|
||
/// A node that declares a single name within the scope of a compilation unit.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class NamedCompilationUnitMember implements CompilationUnitMember {
|
||
/// Return the name of the member being declared.
|
||
SimpleIdentifier get name;
|
||
|
||
/// Set the name of the member being declared to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(SimpleIdentifier identifier);
|
||
}
|
||
|
||
/// An expression that has a name associated with it. They are used in method
|
||
/// invocations when there are named parameters.
|
||
///
|
||
/// namedExpression ::=
|
||
/// [Label] [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class NamedExpression implements Expression {
|
||
/// Return the element representing the parameter being named by this
|
||
/// expression, or `null` if the AST structure has not been resolved or if
|
||
/// there is no parameter with the same name as this expression.
|
||
ParameterElement? get element;
|
||
|
||
/// Return the expression with which the name is associated.
|
||
Expression get expression;
|
||
|
||
/// Set the expression with which the name is associated to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the name associated with the expression.
|
||
Label get name;
|
||
|
||
/// Set the name associated with the expression to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(Label identifier);
|
||
}
|
||
|
||
/// A named type, which can optionally include type arguments.
|
||
///
|
||
/// namedType ::=
|
||
/// [Identifier] typeArguments?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class NamedType implements TypeAnnotation {
|
||
/// Return `true` if this type is a deferred type.
|
||
///
|
||
/// 15.1 Static Types: A type <i>T</i> is deferred iff it is of the form
|
||
/// </i>p.T</i> where <i>p</i> is a deferred prefix.
|
||
bool get isDeferred;
|
||
|
||
/// Return the name of the type.
|
||
Identifier get name;
|
||
|
||
/// Set the name of the type to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(Identifier identifier);
|
||
|
||
/// Set the question mark indicating that the type is nullable to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set question(Token? token);
|
||
|
||
/// Set the type being named to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set type(DartType? type);
|
||
|
||
/// Return the type arguments associated with the type, or `null` if there are
|
||
/// no type arguments.
|
||
TypeArgumentList? get typeArguments;
|
||
|
||
/// Set the type arguments associated with the type to the given
|
||
/// [typeArguments].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeArguments(TypeArgumentList? typeArguments);
|
||
}
|
||
|
||
/// A node that represents a directive that impacts the namespace of a library.
|
||
///
|
||
/// directive ::=
|
||
/// [ExportDirective]
|
||
/// | [ImportDirective]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class NamespaceDirective implements UriBasedDirective {
|
||
/// Return the combinators used to control how names are imported or exported.
|
||
NodeList<Combinator> get combinators;
|
||
|
||
/// Return the configurations used to control which library will actually be
|
||
/// loaded at run-time.
|
||
NodeList<Configuration> get configurations;
|
||
|
||
/// Set the token representing the keyword that introduces this directive
|
||
/// ('import', 'export', 'library' or 'part') to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token token);
|
||
|
||
/// Return the source that was selected based on the declared variables.
|
||
///
|
||
/// This will be the source from the first configuration whose condition is
|
||
/// true, or the `[uriSource]` if either there are no configurations or if
|
||
/// there are no configurations whose condition is true.
|
||
Source? get selectedSource;
|
||
|
||
/// Return the content of the URI that was selected based on the declared
|
||
/// variables.
|
||
///
|
||
/// This will be the URI from the first configuration whose condition is
|
||
/// true, or the `[uriContent]` if either there are no configurations or if
|
||
/// there are no configurations whose condition is true.
|
||
String? get selectedUriContent;
|
||
|
||
/// Return the semicolon terminating the directive.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the directive to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
@override
|
||
LibraryElement? get uriElement;
|
||
}
|
||
|
||
/// The "native" clause in an class declaration.
|
||
///
|
||
/// nativeClause ::=
|
||
/// 'native' [StringLiteral]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class NativeClause implements AstNode {
|
||
/// Return the name of the native object that implements the class.
|
||
StringLiteral? get name;
|
||
|
||
/// Set the name of the native object that implements the class to the given
|
||
/// [name].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(StringLiteral? name);
|
||
|
||
/// Return the token representing the 'native' keyword.
|
||
Token get nativeKeyword;
|
||
|
||
/// Set the token representing the 'native' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set nativeKeyword(Token token);
|
||
}
|
||
|
||
/// A function body that consists of a native keyword followed by a string
|
||
/// literal.
|
||
///
|
||
/// nativeFunctionBody ::=
|
||
/// 'native' [SimpleStringLiteral] ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class NativeFunctionBody implements FunctionBody {
|
||
/// Return the token representing 'native' that marks the start of the
|
||
/// function body.
|
||
Token get nativeKeyword;
|
||
|
||
/// Set the token representing 'native' that marks the start of the function
|
||
/// body to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set nativeKeyword(Token token);
|
||
|
||
/// Return the token representing the semicolon that marks the end of the
|
||
/// function body.
|
||
Token get semicolon;
|
||
|
||
/// Set the token representing the semicolon that marks the end of the
|
||
/// function body to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the string literal representing the string after the 'native'
|
||
/// token.
|
||
StringLiteral? get stringLiteral;
|
||
|
||
/// Set the string literal representing the string after the 'native' token to
|
||
/// the given [stringLiteral].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set stringLiteral(StringLiteral? stringLiteral);
|
||
}
|
||
|
||
/// A list of AST nodes that have a common parent.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class NodeList<E extends AstNode> implements List<E> {
|
||
/// Return the first token included in this node list's source range, or
|
||
/// `null` if the list is empty.
|
||
Token? get beginToken;
|
||
|
||
/// Return the last token included in this node list's source range, or `null`
|
||
/// if the list is empty.
|
||
Token? get endToken;
|
||
|
||
/// Return the node that is the parent of each of the elements in the list.
|
||
AstNode get owner;
|
||
|
||
/// Return the node at the given [index] in the list or throw a [RangeError]
|
||
/// if [index] is out of bounds.
|
||
@override
|
||
E operator [](int index);
|
||
|
||
/// Set the node at the given [index] in the list to the given [node] or throw
|
||
/// a [RangeError] if [index] is out of bounds.
|
||
@Deprecated('Clients should not build AST manually')
|
||
@override
|
||
void operator []=(int index, E node);
|
||
|
||
/// Use the given [visitor] to visit each of the nodes in this list.
|
||
void accept(AstVisitor visitor);
|
||
}
|
||
|
||
/// A formal parameter that is required (is not optional).
|
||
///
|
||
/// normalFormalParameter ::=
|
||
/// [FunctionTypedFormalParameter]
|
||
/// | [FieldFormalParameter]
|
||
/// | [SimpleFormalParameter]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class NormalFormalParameter implements FormalParameter {
|
||
/// Set the token for the 'covariant' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set covariantKeyword(Token? token);
|
||
|
||
/// Return the documentation comment associated with this parameter, or `null`
|
||
/// if this parameter does not have a documentation comment associated with
|
||
/// it.
|
||
Comment? get documentationComment;
|
||
|
||
/// Set the documentation comment associated with this parameter to the given
|
||
/// [comment].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set documentationComment(Comment? comment);
|
||
|
||
/// Set the name of the parameter being declared to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set identifier(SimpleIdentifier? identifier);
|
||
|
||
/// Set the metadata associated with this node to the given [metadata].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set metadata(List<Annotation> metadata);
|
||
|
||
/// Return a list containing the comment and annotations associated with this
|
||
/// parameter, sorted in lexical order.
|
||
List<AstNode> get sortedCommentAndAnnotations;
|
||
}
|
||
|
||
/// A null literal expression.
|
||
///
|
||
/// nullLiteral ::=
|
||
/// 'null'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class NullLiteral implements Literal {
|
||
/// Return the token representing the literal.
|
||
Token get literal;
|
||
|
||
/// Set the token representing the literal to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set literal(Token token);
|
||
}
|
||
|
||
/// Abstract interface for expressions that may participate in null-shorting.
|
||
abstract class NullShortableExpression implements Expression {
|
||
/// Returns the expression that terminates any null shorting that might occur
|
||
/// in this expression. This may be called regardless of whether this
|
||
/// expression is itself null-aware.
|
||
///
|
||
/// For example, the statement `a?.b[c] = d;` contains the following
|
||
/// null-shortable subexpressions:
|
||
/// - `a?.b`
|
||
/// - `a?.b[c]`
|
||
/// - `a?.b[c] = d`
|
||
///
|
||
/// Calling [nullShortingTermination] on any of these subexpressions yields
|
||
/// the expression `a?.b[c] = d`, indicating that the null-shorting induced by
|
||
/// the `?.` causes the rest of the subexpression `a?.b[c] = d` to be skipped.
|
||
Expression get nullShortingTermination;
|
||
}
|
||
|
||
/// The "on" clause in a mixin declaration.
|
||
///
|
||
/// onClause ::=
|
||
/// 'on' [TypeName] (',' [TypeName])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class OnClause implements AstNode {
|
||
/// Return the token representing the 'on' keyword.
|
||
Token get onKeyword;
|
||
|
||
/// Return the list of the classes are superclass constraints for the mixin.
|
||
NodeList<TypeName> get superclassConstraints;
|
||
}
|
||
|
||
/// A parenthesized expression.
|
||
///
|
||
/// parenthesizedExpression ::=
|
||
/// '(' [Expression] ')'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ParenthesizedExpression implements Expression {
|
||
/// Return the expression within the parentheses.
|
||
Expression get expression;
|
||
|
||
/// Set the expression within the parentheses to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Set the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token token);
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Set the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token token);
|
||
}
|
||
|
||
/// A part directive.
|
||
///
|
||
/// partDirective ::=
|
||
/// [Annotation] 'part' [StringLiteral] ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class PartDirective implements UriBasedDirective {
|
||
/// Return the token representing the 'part' keyword.
|
||
Token get partKeyword;
|
||
|
||
/// Set the token representing the 'part' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set partKeyword(Token token);
|
||
|
||
/// Return the semicolon terminating the directive.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the directive to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
}
|
||
|
||
/// A part-of directive.
|
||
///
|
||
/// partOfDirective ::=
|
||
/// [Annotation] 'part' 'of' [Identifier] ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class PartOfDirective implements Directive {
|
||
/// Return the name of the library that the containing compilation unit is
|
||
/// part of.
|
||
LibraryIdentifier? get libraryName;
|
||
|
||
/// Set the name of the library that the containing compilation unit is part
|
||
/// of to the given [libraryName].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set libraryName(LibraryIdentifier? libraryName);
|
||
|
||
/// Return the token representing the 'of' keyword.
|
||
Token get ofKeyword;
|
||
|
||
/// Set the token representing the 'of' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set ofKeyword(Token token);
|
||
|
||
/// Return the token representing the 'part' keyword.
|
||
Token get partKeyword;
|
||
|
||
/// Set the token representing the 'part' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set partKeyword(Token token);
|
||
|
||
/// Return the semicolon terminating the directive.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the directive to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the URI of the library that the containing compilation unit is part
|
||
/// of, or `null` if no URI was given (typically because a library name was
|
||
/// provided).
|
||
StringLiteral? get uri;
|
||
|
||
/// Return the URI of the library that the containing compilation unit is part
|
||
/// of, or `null` if no URI was given (typically because a library name was
|
||
/// provided).
|
||
@Deprecated('Clients should not build AST manually')
|
||
set uri(StringLiteral? uri);
|
||
}
|
||
|
||
/// A postfix unary expression.
|
||
///
|
||
/// postfixExpression ::=
|
||
/// [Expression] [Token]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class PostfixExpression
|
||
implements
|
||
Expression,
|
||
NullShortableExpression,
|
||
MethodReferenceExpression,
|
||
CompoundAssignmentExpression {
|
||
/// Return the expression computing the operand for the operator.
|
||
Expression get operand;
|
||
|
||
/// Set the expression computing the operand for the operator to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set operand(Expression expression);
|
||
|
||
/// Return the postfix operator being applied to the operand.
|
||
Token get operator;
|
||
|
||
/// Set the postfix operator being applied to the operand to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set operator(Token token);
|
||
}
|
||
|
||
/// An identifier that is prefixed or an access to an object property where the
|
||
/// target of the property access is a simple identifier.
|
||
///
|
||
/// prefixedIdentifier ::=
|
||
/// [SimpleIdentifier] '.' [SimpleIdentifier]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class PrefixedIdentifier implements Identifier {
|
||
/// Return the identifier being prefixed.
|
||
SimpleIdentifier get identifier;
|
||
|
||
/// Set the identifier being prefixed to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set identifier(SimpleIdentifier identifier);
|
||
|
||
/// Return `true` if this type is a deferred type. If the AST structure has
|
||
/// not been resolved, then return `false`.
|
||
///
|
||
/// 15.1 Static Types: A type <i>T</i> is deferred iff it is of the form
|
||
/// </i>p.T</i> where <i>p</i> is a deferred prefix.
|
||
bool get isDeferred;
|
||
|
||
/// Return the period used to separate the prefix from the identifier.
|
||
Token get period;
|
||
|
||
/// Set the period used to separate the prefix from the identifier to the
|
||
/// given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set period(Token token);
|
||
|
||
/// Return the prefix associated with the library in which the identifier is
|
||
/// defined.
|
||
SimpleIdentifier get prefix;
|
||
|
||
/// Set the prefix associated with the library in which the identifier is
|
||
/// defined to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set prefix(SimpleIdentifier identifier);
|
||
}
|
||
|
||
/// A prefix unary expression.
|
||
///
|
||
/// prefixExpression ::=
|
||
/// [Token] [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class PrefixExpression
|
||
implements
|
||
Expression,
|
||
NullShortableExpression,
|
||
MethodReferenceExpression,
|
||
CompoundAssignmentExpression {
|
||
/// Return the expression computing the operand for the operator.
|
||
Expression get operand;
|
||
|
||
/// Set the expression computing the operand for the operator to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set operand(Expression expression);
|
||
|
||
/// Return the prefix operator being applied to the operand.
|
||
Token get operator;
|
||
|
||
/// Set the prefix operator being applied to the operand to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set operator(Token token);
|
||
}
|
||
|
||
/// The access of a property of an object.
|
||
///
|
||
/// Note, however, that accesses to properties of objects can also be
|
||
/// represented as [PrefixedIdentifier] nodes in cases where the target is also
|
||
/// a simple identifier.
|
||
///
|
||
/// propertyAccess ::=
|
||
/// [Expression] '.' [SimpleIdentifier]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class PropertyAccess implements NullShortableExpression {
|
||
/// Return `true` if this expression is cascaded.
|
||
///
|
||
/// If it is, then the target of this expression is not stored locally but is
|
||
/// stored in the nearest ancestor that is a [CascadeExpression].
|
||
bool get isCascaded;
|
||
|
||
/// Whether this property access is null aware (as opposed to non-null).
|
||
bool get isNullAware;
|
||
|
||
/// Return the property access operator.
|
||
Token get operator;
|
||
|
||
/// Set the property access operator to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set operator(Token token);
|
||
|
||
/// Return the name of the property being accessed.
|
||
SimpleIdentifier get propertyName;
|
||
|
||
/// Set the name of the property being accessed to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set propertyName(SimpleIdentifier identifier);
|
||
|
||
/// Return the expression used to compute the receiver of the invocation.
|
||
///
|
||
/// If this invocation is not part of a cascade expression, then this is the
|
||
/// same as [target]. If this invocation is part of a cascade expression,
|
||
/// then the target stored with the cascade expression is returned.
|
||
Expression get realTarget;
|
||
|
||
/// Return the expression computing the object defining the property being
|
||
/// accessed, or `null` if this property access is part of a cascade
|
||
/// expression.
|
||
///
|
||
/// Use [realTarget] to get the target independent of whether this is part of
|
||
/// a cascade expression.
|
||
Expression? get target;
|
||
|
||
/// Set the expression computing the object defining the property being
|
||
/// accessed to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set target(Expression? expression);
|
||
}
|
||
|
||
/// The invocation of a constructor in the same class from within a
|
||
/// constructor's initialization list.
|
||
///
|
||
/// redirectingConstructorInvocation ::=
|
||
/// 'this' ('.' identifier)? arguments
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class RedirectingConstructorInvocation
|
||
implements ConstructorInitializer, ConstructorReferenceNode {
|
||
/// Return the list of arguments to the constructor.
|
||
ArgumentList get argumentList;
|
||
|
||
/// Set the list of arguments to the constructor to the given [argumentList].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set argumentList(ArgumentList argumentList);
|
||
|
||
/// Return the name of the constructor that is being invoked, or `null` if the
|
||
/// unnamed constructor is being invoked.
|
||
SimpleIdentifier? get constructorName;
|
||
|
||
/// Set the name of the constructor that is being invoked to the given
|
||
/// [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set constructorName(SimpleIdentifier? identifier);
|
||
|
||
/// Return the token for the period before the name of the constructor that is
|
||
/// being invoked, or `null` if the unnamed constructor is being invoked.
|
||
Token? get period;
|
||
|
||
/// Set the token for the period before the name of the constructor that is
|
||
/// being invoked to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set period(Token? token);
|
||
|
||
/// Return the token for the 'this' keyword.
|
||
Token get thisKeyword;
|
||
|
||
/// Set the token for the 'this' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set thisKeyword(Token token);
|
||
}
|
||
|
||
/// A rethrow expression.
|
||
///
|
||
/// rethrowExpression ::=
|
||
/// 'rethrow'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class RethrowExpression implements Expression {
|
||
/// Return the token representing the 'rethrow' keyword.
|
||
Token get rethrowKeyword;
|
||
|
||
/// Set the token representing the 'rethrow' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rethrowKeyword(Token token);
|
||
}
|
||
|
||
/// A return statement.
|
||
///
|
||
/// returnStatement ::=
|
||
/// 'return' [Expression]? ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ReturnStatement implements Statement {
|
||
/// Return the expression computing the value to be returned, or `null` if no
|
||
/// explicit value was provided.
|
||
Expression? get expression;
|
||
|
||
/// Set the expression computing the value to be returned to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression? expression);
|
||
|
||
/// Return the token representing the 'return' keyword.
|
||
Token get returnKeyword;
|
||
|
||
/// Set the token representing the 'return' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set returnKeyword(Token token);
|
||
|
||
/// Return the semicolon terminating the statement.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the statement to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
}
|
||
|
||
/// A script tag that can optionally occur at the beginning of a compilation
|
||
/// unit.
|
||
///
|
||
/// scriptTag ::=
|
||
/// '#!' (~NEWLINE)* NEWLINE
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ScriptTag implements AstNode {
|
||
/// Return the token representing this script tag.
|
||
Token get scriptTag;
|
||
|
||
/// Set the token representing this script tag to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set scriptTag(Token token);
|
||
}
|
||
|
||
/// A set or map literal.
|
||
///
|
||
/// setOrMapLiteral ::=
|
||
/// 'const'? [TypeArgumentList]? '{' elements? '}'
|
||
///
|
||
/// elements ::=
|
||
/// [CollectionElement] ( ',' [CollectionElement] )* ','?
|
||
///
|
||
/// This is the class that is used to represent either a map or set literal when
|
||
/// either the 'control-flow-collections' or 'spread-collections' experiments
|
||
/// are enabled. If neither of those experiments are enabled, then `MapLiteral`
|
||
/// will be used to represent a map literal and `SetLiteral` will be used for
|
||
/// set literals.
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SetOrMapLiteral implements TypedLiteral {
|
||
/// Return the syntactic elements used to compute the elements of the set or
|
||
/// map.
|
||
NodeList<CollectionElement> get elements;
|
||
|
||
/// Return `true` if this literal represents a map literal.
|
||
///
|
||
/// This getter will always return `false` if [isSet] returns `true`.
|
||
///
|
||
/// However, this getter is _not_ the inverse of [isSet]. It is possible for
|
||
/// both getters to return `false` if
|
||
///
|
||
/// - the AST has not been resolved (because determining the kind of the
|
||
/// literal is done during resolution),
|
||
/// - the literal is ambiguous (contains one or more spread elements and none
|
||
/// of those elements can be used to determine the kind of the literal), or
|
||
/// - the literal is invalid because it contains both expressions (for sets)
|
||
/// and map entries (for maps).
|
||
///
|
||
/// In both of the latter two cases there will be compilation errors
|
||
/// associated with the literal.
|
||
bool get isMap;
|
||
|
||
/// Return `true` if this literal represents a set literal.
|
||
///
|
||
/// This getter will always return `false` if [isMap] returns `true`.
|
||
///
|
||
/// However, this getter is _not_ the inverse of [isMap]. It is possible for
|
||
/// both getters to return `false` if
|
||
///
|
||
/// - the AST has not been resolved (because determining the kind of the
|
||
/// literal is done during resolution),
|
||
/// - the literal is ambiguous (contains one or more spread elements and none
|
||
/// of those elements can be used to determine the kind of the literal), or
|
||
/// - the literal is invalid because it contains both expressions (for sets)
|
||
/// and map entries (for maps).
|
||
///
|
||
/// In both of the latter two cases there will be compilation errors
|
||
/// associated with the literal.
|
||
bool get isSet;
|
||
|
||
/// Return the left curly bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Return the right curly bracket.
|
||
Token get rightBracket;
|
||
}
|
||
|
||
/// A combinator that restricts the names being imported to those in a given list.
|
||
///
|
||
/// showCombinator ::=
|
||
/// 'show' [SimpleIdentifier] (',' [SimpleIdentifier])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ShowCombinator implements Combinator {
|
||
/// Return the list of names from the library that are made visible by this
|
||
/// combinator.
|
||
NodeList<SimpleIdentifier> get shownNames;
|
||
}
|
||
|
||
/// A simple formal parameter.
|
||
///
|
||
/// simpleFormalParameter ::=
|
||
/// ('final' [TypeAnnotation] | 'var' | [TypeAnnotation])? [SimpleIdentifier]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SimpleFormalParameter implements NormalFormalParameter {
|
||
/// Return the token representing either the 'final', 'const' or 'var'
|
||
/// keyword, or `null` if no keyword was used.
|
||
Token? get keyword;
|
||
|
||
/// Set the token representing either the 'final', 'const' or 'var' keyword to
|
||
/// the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token? token);
|
||
|
||
/// Return the declared type of the parameter, or `null` if the parameter does
|
||
/// not have a declared type.
|
||
TypeAnnotation? get type;
|
||
|
||
/// Set the declared type of the parameter to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set type(TypeAnnotation? type);
|
||
}
|
||
|
||
/// A simple identifier.
|
||
///
|
||
/// simpleIdentifier ::=
|
||
/// initialCharacter internalCharacter*
|
||
///
|
||
/// initialCharacter ::= '_' | '$' | letter
|
||
///
|
||
/// internalCharacter ::= '_' | '$' | letter | digit
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SimpleIdentifier implements Identifier {
|
||
/// Return `true` if this identifier is the "name" part of a prefixed
|
||
/// identifier or a method invocation.
|
||
bool get isQualified;
|
||
|
||
/// Set the element associated with this identifier based on static type
|
||
/// information to the given [element].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set staticElement(Element? element);
|
||
|
||
/// If the identifier is a tear-off, return the inferred type arguments
|
||
/// applied to the function type of the element to produce its `[staticType]`.
|
||
///
|
||
/// Return an empty list if the function type does not have type parameters.
|
||
///
|
||
/// Return an empty list if the context type has type parameters.
|
||
///
|
||
/// Return `null` if not a tear-off.
|
||
///
|
||
/// Return `null` if the AST structure has not been resolved.
|
||
List<DartType>? get tearOffTypeArgumentTypes;
|
||
|
||
/// Return the token representing the identifier.
|
||
Token get token;
|
||
|
||
/// Set the token representing the identifier to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set token(Token token);
|
||
|
||
/// Return `true` if this identifier is the name being declared in a
|
||
/// declaration.
|
||
// TODO(brianwilkerson) Convert this to a getter.
|
||
bool inDeclarationContext();
|
||
|
||
/// Return `true` if this expression is computing a right-hand value.
|
||
///
|
||
/// Note that [inGetterContext] and [inSetterContext] are not opposites, nor
|
||
/// are they mutually exclusive. In other words, it is possible for both
|
||
/// methods to return `true` when invoked on the same node.
|
||
// TODO(brianwilkerson) Convert this to a getter.
|
||
bool inGetterContext();
|
||
|
||
/// Return `true` if this expression is computing a left-hand value.
|
||
///
|
||
/// Note that [inGetterContext] and [inSetterContext] are not opposites, nor
|
||
/// are they mutually exclusive. In other words, it is possible for both
|
||
/// methods to return `true` when invoked on the same node.
|
||
// TODO(brianwilkerson) Convert this to a getter.
|
||
bool inSetterContext();
|
||
}
|
||
|
||
/// A string literal expression that does not contain any interpolations.
|
||
///
|
||
/// simpleStringLiteral ::=
|
||
/// rawStringLiteral
|
||
/// | basicStringLiteral
|
||
///
|
||
/// rawStringLiteral ::=
|
||
/// 'r' basicStringLiteral
|
||
///
|
||
/// basicStringLiteral ::=
|
||
/// multiLineStringLiteral
|
||
/// | singleLineStringLiteral
|
||
///
|
||
/// multiLineStringLiteral ::=
|
||
/// "'''" characters "'''"
|
||
/// | '"""' characters '"""'
|
||
///
|
||
/// singleLineStringLiteral ::=
|
||
/// "'" characters "'"
|
||
/// | '"' characters '"'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SimpleStringLiteral implements SingleStringLiteral {
|
||
/// Return the token representing the literal.
|
||
Token get literal;
|
||
|
||
/// Set the token representing the literal to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set literal(Token token);
|
||
|
||
/// Return the value of the literal.
|
||
String get value;
|
||
|
||
/// Set the value of the literal to the given [string].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set value(String string);
|
||
}
|
||
|
||
/// A single string literal expression.
|
||
///
|
||
/// singleStringLiteral ::=
|
||
/// [SimpleStringLiteral]
|
||
/// | [StringInterpolation]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SingleStringLiteral implements StringLiteral {
|
||
/// Return the offset of the after-last contents character.
|
||
int get contentsEnd;
|
||
|
||
/// Return the offset of the first contents character.
|
||
///
|
||
/// If the string is multiline, then leading whitespaces are skipped.
|
||
int get contentsOffset;
|
||
|
||
/// Return `true` if this string literal is a multi-line string.
|
||
bool get isMultiline;
|
||
|
||
/// Return `true` if this string literal is a raw string.
|
||
bool get isRaw;
|
||
|
||
/// Return `true` if this string literal uses single quotes (' or '''), or
|
||
/// `false` if this string literal uses double quotes (" or """).
|
||
bool get isSingleQuoted;
|
||
}
|
||
|
||
/// A spread element.
|
||
///
|
||
/// spreadElement:
|
||
/// ( '...' | '...?' ) [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SpreadElement implements CollectionElement {
|
||
/// The expression used to compute the collection being spread.
|
||
Expression get expression;
|
||
|
||
/// Whether this is a null-aware spread, as opposed to a non-null spread.
|
||
bool get isNullAware;
|
||
|
||
/// The spread operator, either '...' or '...?'.
|
||
Token get spreadOperator;
|
||
}
|
||
|
||
/// A node that represents a statement.
|
||
///
|
||
/// statement ::=
|
||
/// [Block]
|
||
/// | [VariableDeclarationStatement]
|
||
/// | [ForStatement]
|
||
/// | [ForEachStatement]
|
||
/// | [WhileStatement]
|
||
/// | [DoStatement]
|
||
/// | [SwitchStatement]
|
||
/// | [IfStatement]
|
||
/// | [TryStatement]
|
||
/// | [BreakStatement]
|
||
/// | [ContinueStatement]
|
||
/// | [ReturnStatement]
|
||
/// | [ExpressionStatement]
|
||
/// | [FunctionDeclarationStatement]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class Statement implements AstNode {
|
||
/// If this is a labeled statement, return the unlabeled portion of the
|
||
/// statement, otherwise return the statement itself.
|
||
Statement get unlabeled;
|
||
}
|
||
|
||
/// A string interpolation literal.
|
||
///
|
||
/// stringInterpolation ::=
|
||
/// ''' [InterpolationElement]* '''
|
||
/// | '"' [InterpolationElement]* '"'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class StringInterpolation implements SingleStringLiteral {
|
||
/// Return the elements that will be composed to produce the resulting string.
|
||
NodeList<InterpolationElement> get elements;
|
||
}
|
||
|
||
/// A string literal expression.
|
||
///
|
||
/// stringLiteral ::=
|
||
/// [SimpleStringLiteral]
|
||
/// | [AdjacentStrings]
|
||
/// | [StringInterpolation]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class StringLiteral implements Literal {
|
||
/// Return the value of the string literal, or `null` if the string is not a
|
||
/// constant string without any string interpolation.
|
||
String? get stringValue;
|
||
}
|
||
|
||
/// The invocation of a superclass' constructor from within a constructor's
|
||
/// initialization list.
|
||
///
|
||
/// superInvocation ::=
|
||
/// 'super' ('.' [SimpleIdentifier])? [ArgumentList]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SuperConstructorInvocation
|
||
implements ConstructorInitializer, ConstructorReferenceNode {
|
||
/// Return the list of arguments to the constructor.
|
||
ArgumentList get argumentList;
|
||
|
||
/// Set the list of arguments to the constructor to the given [argumentList].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set argumentList(ArgumentList argumentList);
|
||
|
||
/// Return the name of the constructor that is being invoked, or `null` if the
|
||
/// unnamed constructor is being invoked.
|
||
SimpleIdentifier? get constructorName;
|
||
|
||
/// Set the name of the constructor that is being invoked to the given
|
||
/// [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set constructorName(SimpleIdentifier? identifier);
|
||
|
||
/// Return the token for the period before the name of the constructor that is
|
||
/// being invoked, or `null` if the unnamed constructor is being invoked.
|
||
Token? get period;
|
||
|
||
/// Set the token for the period before the name of the constructor that is
|
||
/// being invoked to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set period(Token? token);
|
||
|
||
/// Return the token for the 'super' keyword.
|
||
Token get superKeyword;
|
||
|
||
/// Set the token for the 'super' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set superKeyword(Token token);
|
||
}
|
||
|
||
/// A super expression.
|
||
///
|
||
/// superExpression ::=
|
||
/// 'super'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SuperExpression implements Expression {
|
||
/// Return the token representing the 'super' keyword.
|
||
Token get superKeyword;
|
||
|
||
/// Set the token representing the 'super' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set superKeyword(Token token);
|
||
}
|
||
|
||
/// A case in a switch statement.
|
||
///
|
||
/// switchCase ::=
|
||
/// [SimpleIdentifier]* 'case' [Expression] ':' [Statement]*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SwitchCase implements SwitchMember {
|
||
/// Return the expression controlling whether the statements will be executed.
|
||
Expression get expression;
|
||
|
||
/// Set the expression controlling whether the statements will be executed to
|
||
/// the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
}
|
||
|
||
/// The default case in a switch statement.
|
||
///
|
||
/// switchDefault ::=
|
||
/// [SimpleIdentifier]* 'default' ':' [Statement]*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SwitchDefault implements SwitchMember {}
|
||
|
||
/// An element within a switch statement.
|
||
///
|
||
/// switchMember ::=
|
||
/// switchCase
|
||
/// | switchDefault
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SwitchMember implements AstNode {
|
||
/// Return the colon separating the keyword or the expression from the
|
||
/// statements.
|
||
Token get colon;
|
||
|
||
/// Set the colon separating the keyword or the expression from the
|
||
/// statements to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set colon(Token token);
|
||
|
||
/// Return the token representing the 'case' or 'default' keyword.
|
||
Token get keyword;
|
||
|
||
/// Set the token representing the 'case' or 'default' keyword to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token token);
|
||
|
||
/// Return the labels associated with the switch member.
|
||
NodeList<Label> get labels;
|
||
|
||
/// Return the statements that will be executed if this switch member is
|
||
/// selected.
|
||
NodeList<Statement> get statements;
|
||
}
|
||
|
||
/// A switch statement.
|
||
///
|
||
/// switchStatement ::=
|
||
/// 'switch' '(' [Expression] ')' '{' [SwitchCase]* [SwitchDefault]? '}'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SwitchStatement implements Statement {
|
||
/// Return the expression used to determine which of the switch members will
|
||
/// be selected.
|
||
Expression get expression;
|
||
|
||
/// Set the expression used to determine which of the switch members will be
|
||
/// selected to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the left curly bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Set the left curly bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftBracket(Token token);
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Set the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token token);
|
||
|
||
/// Return the switch members that can be selected by the expression.
|
||
NodeList<SwitchMember> get members;
|
||
|
||
/// Return the right curly bracket.
|
||
Token get rightBracket;
|
||
|
||
/// Set the right curly bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightBracket(Token token);
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Set the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token token);
|
||
|
||
/// Return the token representing the 'switch' keyword.
|
||
Token get switchKeyword;
|
||
|
||
/// Set the token representing the 'switch' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set switchKeyword(Token token);
|
||
}
|
||
|
||
/// A symbol literal expression.
|
||
///
|
||
/// symbolLiteral ::=
|
||
/// '#' (operator | (identifier ('.' identifier)*))
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class SymbolLiteral implements Literal {
|
||
/// Return the components of the literal.
|
||
List<Token> get components;
|
||
|
||
/// Return the token introducing the literal.
|
||
Token get poundSign;
|
||
|
||
/// Set the token introducing the literal to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set poundSign(Token token);
|
||
}
|
||
|
||
/// A this expression.
|
||
///
|
||
/// thisExpression ::=
|
||
/// 'this'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ThisExpression implements Expression {
|
||
/// Return the token representing the 'this' keyword.
|
||
Token get thisKeyword;
|
||
|
||
/// Set the token representing the 'this' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set thisKeyword(Token token);
|
||
}
|
||
|
||
/// A throw expression.
|
||
///
|
||
/// throwExpression ::=
|
||
/// 'throw' [Expression]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class ThrowExpression implements Expression {
|
||
/// Return the expression computing the exception to be thrown.
|
||
Expression get expression;
|
||
|
||
/// Set the expression computing the exception to be thrown to the given
|
||
/// [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the token representing the 'throw' keyword.
|
||
Token get throwKeyword;
|
||
|
||
/// Set the token representing the 'throw' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set throwKeyword(Token token);
|
||
}
|
||
|
||
/// The declaration of one or more top-level variables of the same type.
|
||
///
|
||
/// topLevelVariableDeclaration ::=
|
||
/// ('final' | 'const') <type>? <staticFinalDeclarationList> ';'
|
||
/// | 'late' 'final' <type>? <initializedIdentifierList> ';'
|
||
/// | 'late'? <varOrType> <initializedIdentifierList> ';'
|
||
/// | 'external' <finalVarOrType> <identifierList> ';'
|
||
///
|
||
/// (Note: there is no <topLevelVariableDeclaration> production in the grammar;
|
||
/// this is a subset of the grammar production <topLevelDeclaration>, which
|
||
/// encompasses everything that can appear inside a Dart file after part
|
||
/// directives).
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class TopLevelVariableDeclaration implements CompilationUnitMember {
|
||
/// The `external` keyword, or `null` if the keyword was not used.
|
||
Token? get externalKeyword;
|
||
|
||
/// Return the semicolon terminating the declaration.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the declaration to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the top-level variables being declared.
|
||
VariableDeclarationList get variables;
|
||
|
||
/// Set the top-level variables being declared to the given list of
|
||
/// [variables].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set variables(VariableDeclarationList variables);
|
||
}
|
||
|
||
/// A try statement.
|
||
///
|
||
/// tryStatement ::=
|
||
/// 'try' [Block] ([CatchClause]+ finallyClause? | finallyClause)
|
||
///
|
||
/// finallyClause ::=
|
||
/// 'finally' [Block]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class TryStatement implements Statement {
|
||
/// Return the body of the statement.
|
||
Block get body;
|
||
|
||
/// Set the body of the statement to the given [block].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set body(Block block);
|
||
|
||
/// Return the catch clauses contained in the try statement.
|
||
NodeList<CatchClause> get catchClauses;
|
||
|
||
/// Return the finally block contained in the try statement, or `null` if the
|
||
/// statement does not contain a finally clause.
|
||
Block? get finallyBlock;
|
||
|
||
/// Set the finally block contained in the try statement to the given [block].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set finallyBlock(Block? block);
|
||
|
||
/// Return the token representing the 'finally' keyword, or `null` if the
|
||
/// statement does not contain a finally clause.
|
||
Token? get finallyKeyword;
|
||
|
||
/// Set the token representing the 'finally' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set finallyKeyword(Token? token);
|
||
|
||
/// Return the token representing the 'try' keyword.
|
||
Token get tryKeyword;
|
||
|
||
/// Set the token representing the 'try' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set tryKeyword(Token token);
|
||
}
|
||
|
||
/// The declaration of a type alias.
|
||
///
|
||
/// typeAlias ::=
|
||
/// 'typedef' typeAliasBody
|
||
///
|
||
/// typeAliasBody ::=
|
||
/// classTypeAlias
|
||
/// | functionTypeAlias
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class TypeAlias implements NamedCompilationUnitMember {
|
||
@override
|
||
SimpleIdentifier get name;
|
||
|
||
/// Return the semicolon terminating the declaration.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the declaration to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the token representing the 'typedef' keyword.
|
||
Token get typedefKeyword;
|
||
|
||
/// Set the token representing the 'typedef' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typedefKeyword(Token token);
|
||
}
|
||
|
||
/// A type annotation.
|
||
///
|
||
/// type ::=
|
||
/// [NamedType]
|
||
/// | [GenericFunctionType]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class TypeAnnotation implements AstNode {
|
||
/// The question mark indicating that the type is nullable, or `null` if there
|
||
/// is no question mark.
|
||
Token? get question;
|
||
|
||
/// Return the type being named, or `null` if the AST structure has not been
|
||
/// resolved.
|
||
DartType? get type;
|
||
}
|
||
|
||
/// A list of type arguments.
|
||
///
|
||
/// typeArguments ::=
|
||
/// '<' typeName (',' typeName)* '>'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class TypeArgumentList implements AstNode {
|
||
/// Return the type arguments associated with the type.
|
||
NodeList<TypeAnnotation> get arguments;
|
||
|
||
/// Return the left bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Set the left bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftBracket(Token token);
|
||
|
||
/// Return the right bracket.
|
||
Token get rightBracket;
|
||
|
||
/// Set the right bracket to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightBracket(Token token);
|
||
}
|
||
|
||
/// A literal that has a type associated with it.
|
||
///
|
||
/// typedLiteral ::=
|
||
/// [ListLiteral]
|
||
/// | [SetOrMapLiteral]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class TypedLiteral implements Literal {
|
||
/// Return the token representing the 'const' keyword, or `null` if the
|
||
/// literal is not a constant.
|
||
Token? get constKeyword;
|
||
|
||
/// Set the token representing the 'const' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set constKeyword(Token? token);
|
||
|
||
/// Return `true` if this literal is a constant expression, either because the
|
||
/// keyword `const` was explicitly provided or because no keyword was provided
|
||
/// and this expression is in a constant context.
|
||
bool get isConst;
|
||
|
||
/// Return the type argument associated with this literal, or `null` if no
|
||
/// type arguments were declared.
|
||
TypeArgumentList? get typeArguments;
|
||
|
||
/// Set the type argument associated with this literal to the given
|
||
/// [typeArguments].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set typeArguments(TypeArgumentList? typeArguments);
|
||
}
|
||
|
||
/// The name of a type, which can optionally include type arguments.
|
||
///
|
||
/// typeName ::=
|
||
/// [Identifier] typeArguments?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class TypeName implements NamedType {}
|
||
|
||
/// A type parameter.
|
||
///
|
||
/// typeParameter ::=
|
||
/// [SimpleIdentifier] ('extends' [TypeAnnotation])?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class TypeParameter implements Declaration {
|
||
/// Return the upper bound for legal arguments, or `null` if there is no
|
||
/// explicit upper bound.
|
||
TypeAnnotation? get bound;
|
||
|
||
/// Set the upper bound for legal arguments to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set bound(TypeAnnotation? type);
|
||
|
||
@override
|
||
TypeParameterElement? get declaredElement;
|
||
|
||
/// Return the token representing the 'extends' keyword, or `null` if there is
|
||
/// no explicit upper bound.
|
||
Token? get extendsKeyword;
|
||
|
||
/// Set the token representing the 'extends' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set extendsKeyword(Token? token);
|
||
|
||
/// Return the name of the type parameter.
|
||
SimpleIdentifier get name;
|
||
|
||
/// Set the name of the type parameter to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(SimpleIdentifier identifier);
|
||
}
|
||
|
||
/// Type parameters within a declaration.
|
||
///
|
||
/// typeParameterList ::=
|
||
/// '<' [TypeParameter] (',' [TypeParameter])* '>'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class TypeParameterList implements AstNode {
|
||
/// Return the left angle bracket.
|
||
Token get leftBracket;
|
||
|
||
/// Return the right angle bracket.
|
||
Token get rightBracket;
|
||
|
||
/// Return the type parameters for the type.
|
||
NodeList<TypeParameter> get typeParameters;
|
||
}
|
||
|
||
/// A directive that references a URI.
|
||
///
|
||
/// uriBasedDirective ::=
|
||
/// [ExportDirective]
|
||
/// | [ImportDirective]
|
||
/// | [PartDirective]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class UriBasedDirective implements Directive {
|
||
/// Return the URI referenced by this directive.
|
||
StringLiteral get uri;
|
||
|
||
/// Set the URI referenced by this directive to the given [uri].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set uri(StringLiteral uri);
|
||
|
||
/// Return the content of the [uri], or `null` if the AST structure has not
|
||
/// been resolved, or if the [uri] has a string interpolation.
|
||
String? get uriContent;
|
||
|
||
/// Set the content of the [uri] to the given [content].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set uriContent(String? content);
|
||
|
||
/// Return the element associated with the [uri] of this directive, or `null`
|
||
/// if the AST structure has not been resolved or if the URI could not be
|
||
/// resolved.
|
||
///
|
||
/// Examples of the latter case include a directive that contains an invalid
|
||
/// URL or a URL that does not exist.
|
||
Element? get uriElement;
|
||
|
||
/// Return the source to which the [uri] was resolved.
|
||
Source? get uriSource;
|
||
|
||
/// Set the source to which the [uri] was resolved to the given [source].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set uriSource(Source? source);
|
||
}
|
||
|
||
/// An identifier that has an initial value associated with it.
|
||
///
|
||
/// Instances of this class are always children of the class
|
||
/// [VariableDeclarationList].
|
||
///
|
||
/// variableDeclaration ::=
|
||
/// [SimpleIdentifier] ('=' [Expression])?
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
// TODO(paulberry): the grammar does not allow metadata to be associated with a
|
||
// VariableDeclaration, and currently we don't record comments for it either.
|
||
// Consider changing the class hierarchy so that [VariableDeclaration] does not
|
||
// extend [Declaration].
|
||
abstract class VariableDeclaration implements Declaration {
|
||
@override
|
||
VariableElement? get declaredElement;
|
||
|
||
/// Return the equal sign separating the variable name from the initial value,
|
||
/// or `null` if the initial value was not specified.
|
||
Token? get equals;
|
||
|
||
/// Set the equal sign separating the variable name from the initial value to
|
||
/// the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set equals(Token? token);
|
||
|
||
/// Return the expression used to compute the initial value for the variable,
|
||
/// or `null` if the initial value was not specified.
|
||
Expression? get initializer;
|
||
|
||
/// Set the expression used to compute the initial value for the variable to
|
||
/// the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set initializer(Expression? expression);
|
||
|
||
/// Return `true` if this variable was declared with the 'const' modifier.
|
||
bool get isConst;
|
||
|
||
/// Return `true` if this variable was declared with the 'final' modifier.
|
||
///
|
||
/// Variables that are declared with the 'const' modifier will return `false`
|
||
/// even though they are implicitly final.
|
||
bool get isFinal;
|
||
|
||
/// Return `true` if this variable was declared with the 'late' modifier.
|
||
bool get isLate;
|
||
|
||
/// Return the name of the variable being declared.
|
||
SimpleIdentifier get name;
|
||
|
||
/// Set the name of the variable being declared to the given [identifier].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set name(SimpleIdentifier identifier);
|
||
}
|
||
|
||
/// The declaration of one or more variables of the same type.
|
||
///
|
||
/// variableDeclarationList ::=
|
||
/// finalConstVarOrType [VariableDeclaration] (',' [VariableDeclaration])*
|
||
///
|
||
/// finalConstVarOrType ::=
|
||
/// 'final' 'late'? [TypeAnnotation]?
|
||
/// | 'const' [TypeAnnotation]?
|
||
/// | 'var'
|
||
/// | 'late'? [TypeAnnotation]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class VariableDeclarationList implements AnnotatedNode {
|
||
/// Return `true` if the variables in this list were declared with the 'const'
|
||
/// modifier.
|
||
bool get isConst;
|
||
|
||
/// Return `true` if the variables in this list were declared with the 'final'
|
||
/// modifier.
|
||
///
|
||
/// Variables that are declared with the 'const' modifier will return `false`
|
||
/// even though they are implicitly final. (In other words, this is a
|
||
/// syntactic check rather than a semantic check.)
|
||
bool get isFinal;
|
||
|
||
/// Return `true` if the variables in this list were declared with the 'late'
|
||
/// modifier.
|
||
bool get isLate;
|
||
|
||
/// Return the token representing the 'final', 'const' or 'var' keyword, or
|
||
/// `null` if no keyword was included.
|
||
Token? get keyword;
|
||
|
||
/// Set the token representing the 'final', 'const' or 'var' keyword to the
|
||
/// given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set keyword(Token? token);
|
||
|
||
/// Return the token representing the 'late' keyword, or `null` if the late
|
||
/// modifier was not included.
|
||
Token? get lateKeyword;
|
||
|
||
/// Return the type of the variables being declared, or `null` if no type was
|
||
/// provided.
|
||
TypeAnnotation? get type;
|
||
|
||
/// Set the type of the variables being declared to the given [type].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set type(TypeAnnotation? type);
|
||
|
||
/// Return a list containing the individual variables being declared.
|
||
NodeList<VariableDeclaration> get variables;
|
||
}
|
||
|
||
/// A list of variables that are being declared in a context where a statement
|
||
/// is required.
|
||
///
|
||
/// variableDeclarationStatement ::=
|
||
/// [VariableDeclarationList] ';'
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class VariableDeclarationStatement implements Statement {
|
||
/// Return the semicolon terminating the statement.
|
||
Token get semicolon;
|
||
|
||
/// Set the semicolon terminating the statement to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the variables being declared.
|
||
VariableDeclarationList get variables;
|
||
|
||
/// Set the variables being declared to the given list of [variables].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set variables(VariableDeclarationList variables);
|
||
}
|
||
|
||
/// A while statement.
|
||
///
|
||
/// whileStatement ::=
|
||
/// 'while' '(' [Expression] ')' [Statement]
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class WhileStatement implements Statement {
|
||
/// Return the body of the loop.
|
||
Statement get body;
|
||
|
||
/// Set the body of the loop to the given [statement].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set body(Statement statement);
|
||
|
||
/// Return the expression used to determine whether to execute the body of the
|
||
/// loop.
|
||
Expression get condition;
|
||
|
||
/// Set the expression used to determine whether to execute the body of the
|
||
/// loop to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set condition(Expression expression);
|
||
|
||
/// Return the left parenthesis.
|
||
Token get leftParenthesis;
|
||
|
||
/// Set the left parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set leftParenthesis(Token token);
|
||
|
||
/// Return the right parenthesis.
|
||
Token get rightParenthesis;
|
||
|
||
/// Set the right parenthesis to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set rightParenthesis(Token token);
|
||
|
||
/// Return the token representing the 'while' keyword.
|
||
Token get whileKeyword;
|
||
|
||
/// Set the token representing the 'while' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set whileKeyword(Token token);
|
||
}
|
||
|
||
/// The with clause in a class declaration.
|
||
///
|
||
/// withClause ::=
|
||
/// 'with' [TypeName] (',' [TypeName])*
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class WithClause implements AstNode {
|
||
/// Return the names of the mixins that were specified.
|
||
NodeList<TypeName> get mixinTypes;
|
||
|
||
/// Return the token representing the 'with' keyword.
|
||
Token get withKeyword;
|
||
|
||
/// Set the token representing the 'with' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set withKeyword(Token token);
|
||
}
|
||
|
||
/// A yield statement.
|
||
///
|
||
/// yieldStatement ::=
|
||
/// 'yield' '*'? [Expression] ‘;’
|
||
///
|
||
/// Clients may not extend, implement or mix-in this class.
|
||
abstract class YieldStatement implements Statement {
|
||
/// Return the expression whose value will be yielded.
|
||
Expression get expression;
|
||
|
||
/// Set the expression whose value will be yielded to the given [expression].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set expression(Expression expression);
|
||
|
||
/// Return the semicolon following the expression.
|
||
Token get semicolon;
|
||
|
||
/// Return the semicolon following the expression to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set semicolon(Token token);
|
||
|
||
/// Return the star optionally following the 'yield' keyword.
|
||
Token? get star;
|
||
|
||
/// Return the star optionally following the 'yield' keyword to the given
|
||
/// [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set star(Token? token);
|
||
|
||
/// Return the 'yield' keyword.
|
||
Token get yieldKeyword;
|
||
|
||
/// Return the 'yield' keyword to the given [token].
|
||
@Deprecated('Clients should not build AST manually')
|
||
set yieldKeyword(Token token);
|
||
}
|