Index: pkg/analyzer_experimental/lib/src/generated/ast.dart |
diff --git a/pkg/analyzer_experimental/lib/src/generated/ast.dart b/pkg/analyzer_experimental/lib/src/generated/ast.dart |
deleted file mode 100644 |
index 1c1f428c37c9e9cfd05a168abc5a9e36be44ee07..0000000000000000000000000000000000000000 |
--- a/pkg/analyzer_experimental/lib/src/generated/ast.dart |
+++ /dev/null |
@@ -1,15313 +0,0 @@ |
-// This code was auto-generated, is not intended to be edited, and is subject to |
-// significant change. Please see the README file for more information. |
-library engine.ast; |
-import 'dart:collection'; |
-import 'java_core.dart'; |
-import 'java_engine.dart'; |
-import 'source.dart' show LineInfo; |
-import 'scanner.dart'; |
-import 'engine.dart' show AnalysisEngine; |
-import 'utilities_dart.dart'; |
-import 'utilities_collection.dart' show TokenMap; |
-import 'element.dart'; |
-/** |
- * The abstract class `ASTNode` defines the behavior common to all nodes in the AST structure |
- * for a Dart program. |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class ASTNode { |
- |
- /** |
- * An empty array of ast nodes. |
- */ |
- static List<ASTNode> EMPTY_ARRAY = new List<ASTNode>(0); |
- |
- /** |
- * The parent of the node, or `null` if the node is the root of an AST structure. |
- */ |
- ASTNode _parent; |
- |
- /** |
- * A table mapping the names of properties to their values, or `null` if this node does not |
- * have any properties associated with it. |
- */ |
- Map<String, Object> _propertyMap; |
- |
- /** |
- * 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 |
- * 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) => second.offset - first.offset; |
- |
- /** |
- * Use the given visitor to visit this node. |
- * |
- * @param visitor the visitor that will visit this node |
- * @return the value returned by the visitor as a result of visiting this node |
- */ |
- accept(ASTVisitor visitor); |
- |
- /** |
- * Return the node of the given class that most immediately encloses this node, or `null` if |
- * there is no enclosing node of the given class. |
- * |
- * @param nodeClass the class of the node to be returned |
- * @return the node of the given type that encloses this node |
- */ |
- ASTNode getAncestor(Type enclosingClass) { |
- ASTNode node = this; |
- while (node != null && !isInstanceOf(node, enclosingClass)) { |
- node = node.parent; |
- } |
- ; |
- return node as ASTNode; |
- } |
- |
- /** |
- * Return the first token included in this node's source range. |
- * |
- * @return the first token included in this node's source range |
- */ |
- Token get beginToken; |
- |
- /** |
- * 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). |
- * |
- * @return the offset of the character just past the node's source range |
- */ |
- int get end => offset + length; |
- |
- /** |
- * Return the last token included in this node's source range. |
- * |
- * @return the last token included in this node's source range |
- */ |
- Token get endToken; |
- |
- /** |
- * Return the number of characters in the node's source range. |
- * |
- * @return the number of characters in the node's source range |
- */ |
- int get length { |
- Token beginToken = this.beginToken; |
- Token endToken = this.endToken; |
- if (beginToken == null || endToken == null) { |
- return -1; |
- } |
- return endToken.offset + endToken.length - beginToken.offset; |
- } |
- |
- /** |
- * Return the offset from the beginning of the file to the first character in the node's source |
- * range. |
- * |
- * @return the offset from the beginning of the file to the first character in the node's source |
- * range |
- */ |
- int get offset { |
- Token beginToken = this.beginToken; |
- if (beginToken == null) { |
- return -1; |
- } |
- return beginToken.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. |
- * |
- * @return the parent of this node, or `null` if none |
- */ |
- ASTNode get parent => _parent; |
- |
- /** |
- * Return the value of the property with the given name, or `null` if this node does not |
- * have a property with the given name. |
- * |
- * @return the value of the property with the given name |
- */ |
- Object getProperty(String propertyName) { |
- if (_propertyMap == null) { |
- return null; |
- } |
- return _propertyMap[propertyName]; |
- } |
- |
- /** |
- * 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)). |
- * |
- * @return the node at the root of this node's AST structure |
- */ |
- ASTNode get root { |
- ASTNode root = this; |
- ASTNode parent = this.parent; |
- while (parent != null) { |
- root = parent; |
- parent = root.parent; |
- } |
- return root; |
- } |
- |
- /** |
- * 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`). |
- * |
- * @return `true` if this node is a synthetic node |
- */ |
- bool get isSynthetic => false; |
- |
- /** |
- * 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. |
- * |
- * @param propertyName the name of the property whose value is to be set |
- * @param propertyValue the new value of the property |
- */ |
- void setProperty(String propertyName, Object propertyValue) { |
- if (propertyValue == null) { |
- if (_propertyMap != null) { |
- _propertyMap.remove(propertyName); |
- if (_propertyMap.isEmpty) { |
- _propertyMap = null; |
- } |
- } |
- } else { |
- if (_propertyMap == null) { |
- _propertyMap = new Map<String, Object>(); |
- } |
- _propertyMap[propertyName] = propertyValue; |
- } |
- } |
- |
- /** |
- * 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. |
- * |
- * @return the source code equivalent of this node |
- */ |
- String toSource() { |
- PrintStringWriter writer = new PrintStringWriter(); |
- accept(new ToSourceVisitor(writer)); |
- return writer.toString(); |
- } |
- String toString() => toSource(); |
- |
- /** |
- * Use the given visitor to visit all of the children of this node. The children will be visited |
- * in source order. |
- * |
- * @param visitor the visitor that will be used to visit the children of this node |
- */ |
- void visitChildren(ASTVisitor visitor); |
- |
- /** |
- * Make this node the parent of the given child node. |
- * |
- * @param child the node that will become a child of this node |
- * @return the node that was made a child of this node |
- */ |
- ASTNode becomeParentOf(ASTNode child) { |
- if (child != null) { |
- ASTNode node = child; |
- node.parent = this; |
- } |
- return child; |
- } |
- |
- /** |
- * If the given child is not `null`, use the given visitor to visit it. |
- * |
- * @param child the child to be visited |
- * @param visitor the visitor that will be used to visit the child |
- */ |
- void safelyVisitChild(ASTNode child, ASTVisitor visitor) { |
- if (child != null) { |
- child.accept(visitor); |
- } |
- } |
- |
- /** |
- * Set the parent of this node to the given node. |
- * |
- * @param newParent the node that is to be made the parent of this node |
- */ |
- void set parent(ASTNode newParent) { |
- _parent = newParent; |
- } |
- static int _hashCodeGenerator = 0; |
- final int hashCode = ++_hashCodeGenerator; |
-} |
-/** |
- * The interface `ASTVisitor` defines the behavior of objects that can be used to visit an AST |
- * structure. |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class ASTVisitor<R> { |
- R visitAdjacentStrings(AdjacentStrings node); |
- R visitAnnotation(Annotation node); |
- R visitArgumentDefinitionTest(ArgumentDefinitionTest node); |
- R visitArgumentList(ArgumentList node); |
- R visitAsExpression(AsExpression node); |
- R visitAssertStatement(AssertStatement assertStatement); |
- R visitAssignmentExpression(AssignmentExpression 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 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 visitDoubleLiteral(DoubleLiteral node); |
- R visitEmptyFunctionBody(EmptyFunctionBody node); |
- R visitEmptyStatement(EmptyStatement node); |
- R visitExportDirective(ExportDirective node); |
- R visitExpressionFunctionBody(ExpressionFunctionBody node); |
- R visitExpressionStatement(ExpressionStatement node); |
- R visitExtendsClause(ExtendsClause node); |
- R visitFieldDeclaration(FieldDeclaration node); |
- R visitFieldFormalParameter(FieldFormalParameter node); |
- R visitForEachStatement(ForEachStatement node); |
- R visitFormalParameterList(FormalParameterList 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 visitHideCombinator(HideCombinator 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 visitMapLiteral(MapLiteral node); |
- R visitMapLiteralEntry(MapLiteralEntry node); |
- R visitMethodDeclaration(MethodDeclaration node); |
- R visitMethodInvocation(MethodInvocation node); |
- R visitNamedExpression(NamedExpression node); |
- R visitNativeClause(NativeClause node); |
- R visitNativeFunctionBody(NativeFunctionBody node); |
- R visitNullLiteral(NullLiteral 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 visitShowCombinator(ShowCombinator node); |
- R visitSimpleFormalParameter(SimpleFormalParameter node); |
- R visitSimpleIdentifier(SimpleIdentifier node); |
- R visitSimpleStringLiteral(SimpleStringLiteral 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); |
-} |
-/** |
- * Instances of the class `AdjacentStrings` represents 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. |
- * |
- * <pre> |
- * adjacentStrings ::= |
- * [StringLiteral] [StringLiteral]+ |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class AdjacentStrings extends StringLiteral { |
- |
- /** |
- * The strings that are implicitly concatenated. |
- */ |
- NodeList<StringLiteral> strings; |
- |
- /** |
- * Initialize a newly created list of adjacent strings. |
- * |
- * @param strings the strings that are implicitly concatenated |
- */ |
- AdjacentStrings.full(List<StringLiteral> strings) { |
- this.strings = new NodeList<StringLiteral>(this); |
- this.strings.addAll(strings); |
- } |
- |
- /** |
- * Initialize a newly created list of adjacent strings. |
- * |
- * @param strings the strings that are implicitly concatenated |
- */ |
- AdjacentStrings({List<StringLiteral> strings}) : this.full(strings); |
- accept(ASTVisitor visitor) => visitor.visitAdjacentStrings(this); |
- Token get beginToken => strings.beginToken; |
- Token get endToken => strings.endToken; |
- void visitChildren(ASTVisitor visitor) { |
- strings.accept(visitor); |
- } |
- void appendStringValue(JavaStringBuilder builder) { |
- for (StringLiteral stringLiteral in strings) { |
- stringLiteral.appendStringValue(builder); |
- } |
- } |
-} |
-/** |
- * The abstract class `AnnotatedNode` defines the behavior of nodes that can be annotated with |
- * both a comment and metadata. |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class AnnotatedNode extends ASTNode { |
- |
- /** |
- * The documentation comment associated with this node, or `null` if this node does not have |
- * a documentation comment associated with it. |
- */ |
- Comment _comment; |
- |
- /** |
- * The annotations associated with this node. |
- */ |
- NodeList<Annotation> _metadata; |
- |
- /** |
- * Initialize a newly created node. |
- * |
- * @param comment the documentation comment associated with this node |
- * @param metadata the annotations associated with this node |
- */ |
- AnnotatedNode.full(Comment comment, List<Annotation> metadata) { |
- this._metadata = new NodeList<Annotation>(this); |
- this._comment = becomeParentOf(comment); |
- this._metadata.addAll(metadata); |
- } |
- |
- /** |
- * Initialize a newly created node. |
- * |
- * @param comment the documentation comment associated with this node |
- * @param metadata the annotations associated with this node |
- */ |
- AnnotatedNode({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata); |
- Token get beginToken { |
- if (_comment == null) { |
- if (_metadata.isEmpty) { |
- return firstTokenAfterCommentAndMetadata; |
- } else { |
- return _metadata.beginToken; |
- } |
- } else if (_metadata.isEmpty) { |
- return _comment.beginToken; |
- } |
- Token commentToken = _comment.beginToken; |
- Token metadataToken = _metadata.beginToken; |
- if (commentToken.offset < metadataToken.offset) { |
- return commentToken; |
- } |
- return metadataToken; |
- } |
- |
- /** |
- * Return the documentation comment associated with this node, or `null` if this node does |
- * not have a documentation comment associated with it. |
- * |
- * @return the documentation comment associated with this node |
- */ |
- Comment get documentationComment => _comment; |
- |
- /** |
- * Return the annotations associated with this node. |
- * |
- * @return the annotations associated with this node |
- */ |
- NodeList<Annotation> get metadata => _metadata; |
- |
- /** |
- * Set the documentation comment associated with this node to the given comment. |
- * |
- * @param comment the documentation comment to be associated with this node |
- */ |
- void set documentationComment(Comment comment) { |
- this._comment = becomeParentOf(comment); |
- } |
- |
- /** |
- * Set the metadata associated with this node to the given metadata. |
- * |
- * @param metadata the metadata to be associated with this node |
- */ |
- void set metadata(List<Annotation> metadata) { |
- this._metadata.clear(); |
- this._metadata.addAll(metadata); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- if (commentIsBeforeAnnotations()) { |
- safelyVisitChild(_comment, visitor); |
- _metadata.accept(visitor); |
- } else { |
- for (ASTNode child in sortedCommentAndAnnotations) { |
- child.accept(visitor); |
- } |
- } |
- } |
- |
- /** |
- * Return the first token following the comment and metadata. |
- * |
- * @return the first token following the comment and metadata |
- */ |
- Token get firstTokenAfterCommentAndMetadata; |
- |
- /** |
- * Return `true` if the comment is lexically before any annotations. |
- * |
- * @return `true` if the comment is lexically before any annotations |
- */ |
- bool commentIsBeforeAnnotations() { |
- if (_comment == null || _metadata.isEmpty) { |
- return true; |
- } |
- Annotation firstAnnotation = _metadata[0]; |
- return _comment.offset < firstAnnotation.offset; |
- } |
- |
- /** |
- * Return an array containing the comment and annotations associated with this node, sorted in |
- * lexical order. |
- * |
- * @return the comment and annotations associated with this node in the order in which they |
- * appeared in the original source |
- */ |
- List<ASTNode> get sortedCommentAndAnnotations { |
- List<ASTNode> childList = new List<ASTNode>(); |
- childList.add(_comment); |
- childList.addAll(_metadata); |
- List<ASTNode> children = new List.from(childList); |
- children.sort(ASTNode.LEXICAL_ORDER); |
- return children; |
- } |
-} |
-/** |
- * Instances of the class `Annotation` represent an annotation that can be associated with an |
- * AST node. |
- * |
- * <pre> |
- * metadata ::= |
- * annotation* |
- * |
- * annotation ::= |
- * '@' [Identifier] ('.' [SimpleIdentifier])? [ArgumentList]? |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class Annotation extends ASTNode { |
- |
- /** |
- * The at sign that introduced the annotation. |
- */ |
- Token atSign; |
- |
- /** |
- * The name of the class defining the constructor that is being invoked or the name of the field |
- * that is being referenced. |
- */ |
- Identifier _name; |
- |
- /** |
- * The period before the constructor name, or `null` if this annotation is not the |
- * invocation of a named constructor. |
- */ |
- Token period; |
- |
- /** |
- * The name of the constructor being invoked, or `null` if this annotation is not the |
- * invocation of a named constructor. |
- */ |
- SimpleIdentifier _constructorName; |
- |
- /** |
- * The arguments to the constructor being invoked, or `null` if this annotation is not the |
- * invocation of a constructor. |
- */ |
- ArgumentList _arguments; |
- |
- /** |
- * 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 _element; |
- |
- /** |
- * Initialize a newly created annotation. |
- * |
- * @param atSign the at sign that introduced the annotation |
- * @param name the name of the class defining the constructor that is being invoked or the name of |
- * the field that is being referenced |
- * @param period the period before the constructor name, or `null` if this annotation is not |
- * the invocation of a named constructor |
- * @param constructorName the name of the constructor being invoked, or `null` if this |
- * annotation is not the invocation of a named constructor |
- * @param arguments the arguments to the constructor being invoked, or `null` if this |
- * annotation is not the invocation of a constructor |
- */ |
- Annotation.full(Token atSign, Identifier name, Token period, SimpleIdentifier constructorName, ArgumentList arguments) { |
- this.atSign = atSign; |
- this._name = becomeParentOf(name); |
- this.period = period; |
- this._constructorName = becomeParentOf(constructorName); |
- this._arguments = becomeParentOf(arguments); |
- } |
- |
- /** |
- * Initialize a newly created annotation. |
- * |
- * @param atSign the at sign that introduced the annotation |
- * @param name the name of the class defining the constructor that is being invoked or the name of |
- * the field that is being referenced |
- * @param period the period before the constructor name, or `null` if this annotation is not |
- * the invocation of a named constructor |
- * @param constructorName the name of the constructor being invoked, or `null` if this |
- * annotation is not the invocation of a named constructor |
- * @param arguments the arguments to the constructor being invoked, or `null` if this |
- * annotation is not the invocation of a constructor |
- */ |
- Annotation({Token atSign, Identifier name, Token period, SimpleIdentifier constructorName, ArgumentList arguments}) : this.full(atSign, name, period, constructorName, arguments); |
- accept(ASTVisitor visitor) => visitor.visitAnnotation(this); |
- |
- /** |
- * Return the arguments to the constructor being invoked, or `null` if this annotation is |
- * not the invocation of a constructor. |
- * |
- * @return the arguments to the constructor being invoked |
- */ |
- ArgumentList get arguments => _arguments; |
- Token get beginToken => atSign; |
- |
- /** |
- * Return the name of the constructor being invoked, or `null` if this annotation is not the |
- * invocation of a named constructor. |
- * |
- * @return the name of the constructor being invoked |
- */ |
- SimpleIdentifier get constructorName => _constructorName; |
- |
- /** |
- * 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. |
- * |
- * @return the element associated with this annotation |
- */ |
- Element get element { |
- if (_element != null) { |
- return _element; |
- } |
- if (_name != null) { |
- return _name.staticElement; |
- } |
- return null; |
- } |
- Token get endToken { |
- if (_arguments != null) { |
- return _arguments.endToken; |
- } else if (_constructorName != null) { |
- return _constructorName.endToken; |
- } |
- return _name.endToken; |
- } |
- |
- /** |
- * Return the name of the class defining the constructor that is being invoked or the name of the |
- * field that is being referenced. |
- * |
- * @return the name of the constructor being invoked or the name of the field being referenced |
- */ |
- Identifier get name => _name; |
- |
- /** |
- * Set the arguments to the constructor being invoked to the given arguments. |
- * |
- * @param arguments the arguments to the constructor being invoked |
- */ |
- void set arguments(ArgumentList arguments) { |
- this._arguments = becomeParentOf(arguments); |
- } |
- |
- /** |
- * Set the name of the constructor being invoked to the given name. |
- * |
- * @param constructorName the name of the constructor being invoked |
- */ |
- void set constructorName(SimpleIdentifier constructorName) { |
- this._constructorName = becomeParentOf(constructorName); |
- } |
- |
- /** |
- * Set the element associated with this annotation based. |
- * |
- * @param element the element to be associated with this identifier |
- */ |
- void set element(Element element) { |
- this._element = element; |
- } |
- |
- /** |
- * 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. |
- * |
- * @param name the name of the constructor being invoked or the name of the field being referenced |
- */ |
- void set name(Identifier name) { |
- this._name = becomeParentOf(name); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_constructorName, visitor); |
- safelyVisitChild(_arguments, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ArgumentDefinitionTest` represent an argument definition test. |
- * |
- * <pre> |
- * argumentDefinitionTest ::= |
- * '?' [SimpleIdentifier] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ArgumentDefinitionTest extends Expression { |
- |
- /** |
- * The token representing the question mark. |
- */ |
- Token question; |
- |
- /** |
- * The identifier representing the argument being tested. |
- */ |
- SimpleIdentifier _identifier; |
- |
- /** |
- * Initialize a newly created argument definition test. |
- * |
- * @param question the token representing the question mark |
- * @param identifier the identifier representing the argument being tested |
- */ |
- ArgumentDefinitionTest.full(Token question, SimpleIdentifier identifier) { |
- this.question = question; |
- this._identifier = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Initialize a newly created argument definition test. |
- * |
- * @param question the token representing the question mark |
- * @param identifier the identifier representing the argument being tested |
- */ |
- ArgumentDefinitionTest({Token question, SimpleIdentifier identifier}) : this.full(question, identifier); |
- accept(ASTVisitor visitor) => visitor.visitArgumentDefinitionTest(this); |
- Token get beginToken => question; |
- Token get endToken => _identifier.endToken; |
- |
- /** |
- * Return the identifier representing the argument being tested. |
- * |
- * @return the identifier representing the argument being tested |
- */ |
- SimpleIdentifier get identifier => _identifier; |
- |
- /** |
- * Set the identifier representing the argument being tested to the given identifier. |
- * |
- * @param identifier the identifier representing the argument being tested |
- */ |
- void set identifier(SimpleIdentifier identifier) { |
- this._identifier = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_identifier, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ArgumentList` represent a list of arguments in the invocation of a |
- * executable element: a function, method, or constructor. |
- * |
- * <pre> |
- * argumentList ::= |
- * '(' arguments? ')' |
- * |
- * arguments ::= |
- * [NamedExpression] (',' [NamedExpression])* |
- * | [Expression] (',' [NamedExpression])* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ArgumentList extends ASTNode { |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token _leftParenthesis; |
- |
- /** |
- * The expressions producing the values of the arguments. |
- */ |
- NodeList<Expression> arguments; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token _rightParenthesis; |
- |
- /** |
- * An array containing the elements representing the parameters corresponding to each of the |
- * arguments in this list, or `null` if the AST has not been resolved or if the function or |
- * method being invoked could not be determined based on static type information. The array 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. |
- */ |
- List<ParameterElement> _correspondingStaticParameters; |
- |
- /** |
- * An array containing the elements representing the parameters corresponding to each of the |
- * arguments in this list, or `null` if the AST has not been resolved or if the function or |
- * method being invoked could not be determined based on propagated type information. The array |
- * 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. |
- */ |
- List<ParameterElement> _correspondingPropagatedParameters; |
- |
- /** |
- * Initialize a newly created list of arguments. |
- * |
- * @param leftParenthesis the left parenthesis |
- * @param arguments the expressions producing the values of the arguments |
- * @param rightParenthesis the right parenthesis |
- */ |
- ArgumentList.full(Token leftParenthesis, List<Expression> arguments, Token rightParenthesis) { |
- this.arguments = new NodeList<Expression>(this); |
- this._leftParenthesis = leftParenthesis; |
- this.arguments.addAll(arguments); |
- this._rightParenthesis = rightParenthesis; |
- } |
- |
- /** |
- * Initialize a newly created list of arguments. |
- * |
- * @param leftParenthesis the left parenthesis |
- * @param arguments the expressions producing the values of the arguments |
- * @param rightParenthesis the right parenthesis |
- */ |
- ArgumentList({Token leftParenthesis, List<Expression> arguments, Token rightParenthesis}) : this.full(leftParenthesis, arguments, rightParenthesis); |
- accept(ASTVisitor visitor) => visitor.visitArgumentList(this); |
- Token get beginToken => _leftParenthesis; |
- Token get endToken => _rightParenthesis; |
- |
- /** |
- * Return the left parenthesis. |
- * |
- * @return the left parenthesis |
- */ |
- Token get leftParenthesis => _leftParenthesis; |
- |
- /** |
- * Return the right parenthesis. |
- * |
- * @return the right parenthesis |
- */ |
- Token get rightParenthesis => _rightParenthesis; |
- |
- /** |
- * Set the parameter elements corresponding to each of the arguments in this list to the given |
- * array of parameters. The array 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. |
- * |
- * @param parameters the parameter elements corresponding to the arguments |
- */ |
- void set correspondingPropagatedParameters(List<ParameterElement> parameters) { |
- if (parameters.length != arguments.length) { |
- throw new IllegalArgumentException("Expected ${arguments.length} parameters, not ${parameters.length}"); |
- } |
- _correspondingPropagatedParameters = parameters; |
- } |
- |
- /** |
- * Set the parameter elements corresponding to each of the arguments in this list to the given |
- * array of parameters. The array 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. |
- * |
- * @param parameters the parameter elements corresponding to the arguments |
- */ |
- void set correspondingStaticParameters(List<ParameterElement> parameters) { |
- if (parameters.length != arguments.length) { |
- throw new IllegalArgumentException("Expected ${arguments.length} parameters, not ${parameters.length}"); |
- } |
- _correspondingStaticParameters = parameters; |
- } |
- |
- /** |
- * Set the left parenthesis to the given token. |
- * |
- * @param parenthesis the left parenthesis |
- */ |
- void set leftParenthesis(Token parenthesis) { |
- _leftParenthesis = parenthesis; |
- } |
- |
- /** |
- * Set the right parenthesis to the given token. |
- * |
- * @param parenthesis the right parenthesis |
- */ |
- void set rightParenthesis(Token parenthesis) { |
- _rightParenthesis = parenthesis; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- arguments.accept(visitor); |
- } |
- |
- /** |
- * If the given expression is a child of this list, and the AST structure has been resolved, and |
- * the function being invoked is known based on propagated type information, and the 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 the given expression will be bound. |
- * Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getPropagatedParameterElement]. |
- * |
- * @param expression the expression corresponding to the parameter to be returned |
- * @return the parameter element representing the parameter to which the value of the expression |
- * will be bound |
- */ |
- ParameterElement getPropagatedParameterElementFor(Expression expression) { |
- if (_correspondingPropagatedParameters == null) { |
- return null; |
- } |
- int index = arguments.indexOf(expression); |
- if (index < 0) { |
- return null; |
- } |
- return _correspondingPropagatedParameters[index]; |
- } |
- |
- /** |
- * If the given expression is a child of this list, and the AST structure has been resolved, and |
- * the function being invoked is known based on static type information, and the 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 the given expression will be bound. |
- * Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getStaticParameterElement]. |
- * |
- * @param expression the expression corresponding to the parameter to be returned |
- * @return the parameter element representing the parameter to which the value of the expression |
- * will be bound |
- */ |
- ParameterElement getStaticParameterElementFor(Expression expression) { |
- if (_correspondingStaticParameters == null) { |
- return null; |
- } |
- int index = arguments.indexOf(expression); |
- if (index < 0) { |
- return null; |
- } |
- return _correspondingStaticParameters[index]; |
- } |
-} |
-/** |
- * Instances of the class `AsExpression` represent an 'as' expression. |
- * |
- * <pre> |
- * asExpression ::= |
- * [Expression] 'as' [TypeName] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class AsExpression extends Expression { |
- |
- /** |
- * The expression used to compute the value being cast. |
- */ |
- Expression _expression; |
- |
- /** |
- * The as operator. |
- */ |
- Token asOperator; |
- |
- /** |
- * The name of the type being cast to. |
- */ |
- TypeName _type; |
- |
- /** |
- * Initialize a newly created as expression. |
- * |
- * @param expression the expression used to compute the value being cast |
- * @param isOperator the is operator |
- * @param type the name of the type being cast to |
- */ |
- AsExpression.full(Expression expression, Token isOperator, TypeName type) { |
- this._expression = becomeParentOf(expression); |
- this.asOperator = isOperator; |
- this._type = becomeParentOf(type); |
- } |
- |
- /** |
- * Initialize a newly created as expression. |
- * |
- * @param expression the expression used to compute the value being cast |
- * @param isOperator the is operator |
- * @param type the name of the type being cast to |
- */ |
- AsExpression({Expression expression, Token isOperator, TypeName type}) : this.full(expression, isOperator, type); |
- accept(ASTVisitor visitor) => visitor.visitAsExpression(this); |
- Token get beginToken => _expression.beginToken; |
- Token get endToken => _type.endToken; |
- |
- /** |
- * Return the expression used to compute the value being cast. |
- * |
- * @return the expression used to compute the value being cast |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Return the name of the type being cast to. |
- * |
- * @return the name of the type being cast to |
- */ |
- TypeName get type => _type; |
- |
- /** |
- * Set the expression used to compute the value being cast to the given expression. |
- * |
- * @param expression the expression used to compute the value being cast |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the name of the type being cast to to the given name. |
- * |
- * @param name the name of the type being cast to |
- */ |
- void set type(TypeName name) { |
- this._type = becomeParentOf(name); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_expression, visitor); |
- safelyVisitChild(_type, visitor); |
- } |
-} |
-/** |
- * Instances of the class `AssertStatement` represent an assert statement. |
- * |
- * <pre> |
- * assertStatement ::= |
- * 'assert' '(' [Expression] ')' ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class AssertStatement extends Statement { |
- |
- /** |
- * The token representing the 'assert' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token leftParenthesis; |
- |
- /** |
- * The condition that is being asserted to be `true`. |
- */ |
- Expression _condition; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token rightParenthesis; |
- |
- /** |
- * The semicolon terminating the statement. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created assert statement. |
- * |
- * @param keyword the token representing the 'assert' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param condition the condition that is being asserted to be `true` |
- * @param rightParenthesis the right parenthesis |
- * @param semicolon the semicolon terminating the statement |
- */ |
- AssertStatement.full(Token keyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Token semicolon) { |
- this.keyword = keyword; |
- this.leftParenthesis = leftParenthesis; |
- this._condition = becomeParentOf(condition); |
- this.rightParenthesis = rightParenthesis; |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created assert statement. |
- * |
- * @param keyword the token representing the 'assert' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param condition the condition that is being asserted to be `true` |
- * @param rightParenthesis the right parenthesis |
- * @param semicolon the semicolon terminating the statement |
- */ |
- AssertStatement({Token keyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Token semicolon}) : this.full(keyword, leftParenthesis, condition, rightParenthesis, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitAssertStatement(this); |
- Token get beginToken => keyword; |
- |
- /** |
- * Return the condition that is being asserted to be `true`. |
- * |
- * @return the condition that is being asserted to be `true` |
- */ |
- Expression get condition => _condition; |
- Token get endToken => semicolon; |
- |
- /** |
- * Set the condition that is being asserted to be `true` to the given expression. |
- * |
- * @param the condition that is being asserted to be `true` |
- */ |
- void set condition(Expression condition) { |
- this._condition = becomeParentOf(condition); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_condition, visitor); |
- } |
-} |
-/** |
- * Instances of the class `AssignmentExpression` represent an assignment expression. |
- * |
- * <pre> |
- * assignmentExpression ::= |
- * [Expression] [Token] [Expression] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class AssignmentExpression extends Expression { |
- |
- /** |
- * The expression used to compute the left hand side. |
- */ |
- Expression _leftHandSide; |
- |
- /** |
- * The assignment operator being applied. |
- */ |
- Token operator; |
- |
- /** |
- * The expression used to compute the right hand side. |
- */ |
- Expression _rightHandSide; |
- |
- /** |
- * The element associated with the operator based on the static type of the left-hand-side, or |
- * `null` if the AST structure has not been resolved, if the operator is not a compound |
- * operator, or if the operator could not be resolved. |
- */ |
- MethodElement _staticElement; |
- |
- /** |
- * The element associated with the operator based on the propagated type of the left-hand-side, or |
- * `null` if the AST structure has not been resolved, if the operator is not a compound |
- * operator, or if the operator could not be resolved. |
- */ |
- MethodElement _propagatedElement; |
- |
- /** |
- * Initialize a newly created assignment expression. |
- * |
- * @param leftHandSide the expression used to compute the left hand side |
- * @param operator the assignment operator being applied |
- * @param rightHandSide the expression used to compute the right hand side |
- */ |
- AssignmentExpression.full(Expression leftHandSide, Token operator, Expression rightHandSide) { |
- this._leftHandSide = becomeParentOf(leftHandSide); |
- this.operator = operator; |
- this._rightHandSide = becomeParentOf(rightHandSide); |
- } |
- |
- /** |
- * Initialize a newly created assignment expression. |
- * |
- * @param leftHandSide the expression used to compute the left hand side |
- * @param operator the assignment operator being applied |
- * @param rightHandSide the expression used to compute the right hand side |
- */ |
- AssignmentExpression({Expression leftHandSide, Token operator, Expression rightHandSide}) : this.full(leftHandSide, operator, rightHandSide); |
- accept(ASTVisitor visitor) => visitor.visitAssignmentExpression(this); |
- Token get beginToken => _leftHandSide.beginToken; |
- |
- /** |
- * Return the best element available for this operator. If resolution was able to find a better |
- * element based on type propagation, that element will be returned. Otherwise, the element found |
- * using the result of static analysis will be returned. If resolution has not been performed, |
- * then `null` will be returned. |
- * |
- * @return the best element available for this operator |
- */ |
- MethodElement get bestElement { |
- MethodElement element = propagatedElement; |
- if (element == null) { |
- element = staticElement; |
- } |
- return element; |
- } |
- Token get endToken => _rightHandSide.endToken; |
- |
- /** |
- * Set the expression used to compute the left hand side to the given expression. |
- * |
- * @return the expression used to compute the left hand side |
- */ |
- Expression get leftHandSide => _leftHandSide; |
- |
- /** |
- * Return the element associated with the operator based on the propagated type of the |
- * left-hand-side, or `null` if the AST structure has not been resolved, if the operator is |
- * not a compound operator, or if the operator could not be resolved. One example of the latter |
- * case is an operator that is not defined for the type of the left-hand operand. |
- * |
- * @return the element associated with the operator |
- */ |
- MethodElement get propagatedElement => _propagatedElement; |
- |
- /** |
- * Return the expression used to compute the right hand side. |
- * |
- * @return the expression used to compute the right hand side |
- */ |
- Expression get rightHandSide => _rightHandSide; |
- |
- /** |
- * Return the element associated with the operator based on the static type of the left-hand-side, |
- * or `null` if the AST structure has not been resolved, if the operator is not a compound |
- * operator, or if the operator could not be resolved. One example of the latter case is an |
- * operator that is not defined for the type of the left-hand operand. |
- * |
- * @return the element associated with the operator |
- */ |
- MethodElement get staticElement => _staticElement; |
- |
- /** |
- * Return the expression used to compute the left hand side. |
- * |
- * @param expression the expression used to compute the left hand side |
- */ |
- void set leftHandSide(Expression expression) { |
- _leftHandSide = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the element associated with the operator based on the propagated type of the left-hand-side |
- * to the given element. |
- * |
- * @param element the element to be associated with the operator |
- */ |
- void set propagatedElement(MethodElement element) { |
- _propagatedElement = element; |
- } |
- |
- /** |
- * Set the expression used to compute the left hand side to the given expression. |
- * |
- * @param expression the expression used to compute the left hand side |
- */ |
- void set rightHandSide(Expression expression) { |
- _rightHandSide = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the element associated with the operator based on the static type of the left-hand-side to |
- * the given element. |
- * |
- * @param element the static element to be associated with the operator |
- */ |
- void set staticElement(MethodElement element) { |
- _staticElement = element; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_leftHandSide, visitor); |
- safelyVisitChild(_rightHandSide, visitor); |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on |
- * propagated type information, then return the parameter element representing the parameter to |
- * which the value of the right operand will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getPropagatedParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the right |
- * operand will be bound |
- */ |
- ParameterElement get propagatedParameterElementForRightHandSide { |
- if (_propagatedElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _propagatedElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on static |
- * type information, then return the parameter element representing the parameter to which the |
- * value of the right operand will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getStaticParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the right |
- * operand will be bound |
- */ |
- ParameterElement get staticParameterElementForRightHandSide { |
- if (_staticElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _staticElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
-} |
-/** |
- * Instances of the class `BinaryExpression` represent a binary (infix) expression. |
- * |
- * <pre> |
- * binaryExpression ::= |
- * [Expression] [Token] [Expression] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class BinaryExpression extends Expression { |
- |
- /** |
- * The expression used to compute the left operand. |
- */ |
- Expression _leftOperand; |
- |
- /** |
- * The binary operator being applied. |
- */ |
- Token operator; |
- |
- /** |
- * The expression used to compute the right operand. |
- */ |
- Expression _rightOperand; |
- |
- /** |
- * The element associated with the operator based on the static type of the left operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. |
- */ |
- MethodElement _staticElement; |
- |
- /** |
- * The element associated with the operator based on the propagated type of the left operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. |
- */ |
- MethodElement _propagatedElement; |
- |
- /** |
- * Initialize a newly created binary expression. |
- * |
- * @param leftOperand the expression used to compute the left operand |
- * @param operator the binary operator being applied |
- * @param rightOperand the expression used to compute the right operand |
- */ |
- BinaryExpression.full(Expression leftOperand, Token operator, Expression rightOperand) { |
- this._leftOperand = becomeParentOf(leftOperand); |
- this.operator = operator; |
- this._rightOperand = becomeParentOf(rightOperand); |
- } |
- |
- /** |
- * Initialize a newly created binary expression. |
- * |
- * @param leftOperand the expression used to compute the left operand |
- * @param operator the binary operator being applied |
- * @param rightOperand the expression used to compute the right operand |
- */ |
- BinaryExpression({Expression leftOperand, Token operator, Expression rightOperand}) : this.full(leftOperand, operator, rightOperand); |
- accept(ASTVisitor visitor) => visitor.visitBinaryExpression(this); |
- Token get beginToken => _leftOperand.beginToken; |
- |
- /** |
- * Return the best element available for this operator. If resolution was able to find a better |
- * element based on type propagation, that element will be returned. Otherwise, the element found |
- * using the result of static analysis will be returned. If resolution has not been performed, |
- * then `null` will be returned. |
- * |
- * @return the best element available for this operator |
- */ |
- MethodElement get bestElement { |
- MethodElement element = propagatedElement; |
- if (element == null) { |
- element = staticElement; |
- } |
- return element; |
- } |
- Token get endToken => _rightOperand.endToken; |
- |
- /** |
- * Return the expression used to compute the left operand. |
- * |
- * @return the expression used to compute the left operand |
- */ |
- Expression get leftOperand => _leftOperand; |
- |
- /** |
- * Return the element associated with the operator based on the propagated type of the left |
- * operand, or `null` if the AST structure has not been resolved, if the operator is not |
- * user definable, or if the operator could not be resolved. One example of the latter case is an |
- * operator that is not defined for the type of the left-hand operand. |
- * |
- * @return the element associated with the operator |
- */ |
- MethodElement get propagatedElement => _propagatedElement; |
- |
- /** |
- * Return the expression used to compute the right operand. |
- * |
- * @return the expression used to compute the right operand |
- */ |
- Expression get rightOperand => _rightOperand; |
- |
- /** |
- * Return the element associated with the operator based on the static type of the left operand, |
- * or `null` if the AST structure has not been resolved, if the operator is not user |
- * definable, or if the operator could not be resolved. One example of the latter case is an |
- * operator that is not defined for the type of the left operand. |
- * |
- * @return the element associated with the operator |
- */ |
- MethodElement get staticElement => _staticElement; |
- |
- /** |
- * Set the expression used to compute the left operand to the given expression. |
- * |
- * @param expression the expression used to compute the left operand |
- */ |
- void set leftOperand(Expression expression) { |
- _leftOperand = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the element associated with the operator based on the propagated type of the left operand |
- * to the given element. |
- * |
- * @param element the element to be associated with the operator |
- */ |
- void set propagatedElement(MethodElement element) { |
- _propagatedElement = element; |
- } |
- |
- /** |
- * Set the expression used to compute the right operand to the given expression. |
- * |
- * @param expression the expression used to compute the right operand |
- */ |
- void set rightOperand(Expression expression) { |
- _rightOperand = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the element associated with the operator based on the static type of the left operand to |
- * the given element. |
- * |
- * @param element the static element to be associated with the operator |
- */ |
- void set staticElement(MethodElement element) { |
- _staticElement = element; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_leftOperand, visitor); |
- safelyVisitChild(_rightOperand, visitor); |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on |
- * propagated type information, then return the parameter element representing the parameter to |
- * which the value of the right operand will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getPropagatedParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the right |
- * operand will be bound |
- */ |
- ParameterElement get propagatedParameterElementForRightOperand { |
- if (_propagatedElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _propagatedElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on static |
- * type information, then return the parameter element representing the parameter to which the |
- * value of the right operand will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getStaticParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the right |
- * operand will be bound |
- */ |
- ParameterElement get staticParameterElementForRightOperand { |
- if (_staticElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _staticElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
-} |
-/** |
- * Instances of the class `Block` represent a sequence of statements. |
- * |
- * <pre> |
- * block ::= |
- * '{' statement* '}' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class Block extends Statement { |
- |
- /** |
- * The left curly bracket. |
- */ |
- Token leftBracket; |
- |
- /** |
- * The statements contained in the block. |
- */ |
- NodeList<Statement> statements; |
- |
- /** |
- * The right curly bracket. |
- */ |
- Token rightBracket; |
- |
- /** |
- * Initialize a newly created block of code. |
- * |
- * @param leftBracket the left curly bracket |
- * @param statements the statements contained in the block |
- * @param rightBracket the right curly bracket |
- */ |
- Block.full(Token leftBracket, List<Statement> statements, Token rightBracket) { |
- this.statements = new NodeList<Statement>(this); |
- this.leftBracket = leftBracket; |
- this.statements.addAll(statements); |
- this.rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created block of code. |
- * |
- * @param leftBracket the left curly bracket |
- * @param statements the statements contained in the block |
- * @param rightBracket the right curly bracket |
- */ |
- Block({Token leftBracket, List<Statement> statements, Token rightBracket}) : this.full(leftBracket, statements, rightBracket); |
- accept(ASTVisitor visitor) => visitor.visitBlock(this); |
- Token get beginToken => leftBracket; |
- Token get endToken => rightBracket; |
- void visitChildren(ASTVisitor visitor) { |
- statements.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `BlockFunctionBody` represent a function body that consists of a |
- * block of statements. |
- * |
- * <pre> |
- * blockFunctionBody ::= |
- * [Block] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class BlockFunctionBody extends FunctionBody { |
- |
- /** |
- * The block representing the body of the function. |
- */ |
- Block _block; |
- |
- /** |
- * Initialize a newly created function body consisting of a block of statements. |
- * |
- * @param block the block representing the body of the function |
- */ |
- BlockFunctionBody.full(Block block) { |
- this._block = becomeParentOf(block); |
- } |
- |
- /** |
- * Initialize a newly created function body consisting of a block of statements. |
- * |
- * @param block the block representing the body of the function |
- */ |
- BlockFunctionBody({Block block}) : this.full(block); |
- accept(ASTVisitor visitor) => visitor.visitBlockFunctionBody(this); |
- Token get beginToken => _block.beginToken; |
- |
- /** |
- * Return the block representing the body of the function. |
- * |
- * @return the block representing the body of the function |
- */ |
- Block get block => _block; |
- Token get endToken => _block.endToken; |
- |
- /** |
- * Set the block representing the body of the function to the given block. |
- * |
- * @param block the block representing the body of the function |
- */ |
- void set block(Block block) { |
- this._block = becomeParentOf(block); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_block, visitor); |
- } |
-} |
-/** |
- * Instances of the class `BooleanLiteral` represent a boolean literal expression. |
- * |
- * <pre> |
- * booleanLiteral ::= |
- * 'false' | 'true' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class BooleanLiteral extends Literal { |
- |
- /** |
- * The token representing the literal. |
- */ |
- Token literal; |
- |
- /** |
- * The value of the literal. |
- */ |
- bool value = false; |
- |
- /** |
- * Initialize a newly created boolean literal. |
- * |
- * @param literal the token representing the literal |
- * @param value the value of the literal |
- */ |
- BooleanLiteral.full(Token literal, bool value) { |
- this.literal = literal; |
- this.value = value; |
- } |
- |
- /** |
- * Initialize a newly created boolean literal. |
- * |
- * @param literal the token representing the literal |
- * @param value the value of the literal |
- */ |
- BooleanLiteral({Token literal, bool value}) : this.full(literal, value); |
- accept(ASTVisitor visitor) => visitor.visitBooleanLiteral(this); |
- Token get beginToken => literal; |
- Token get endToken => literal; |
- bool get isSynthetic => literal.isSynthetic; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `BreakStatement` represent a break statement. |
- * |
- * <pre> |
- * breakStatement ::= |
- * 'break' [SimpleIdentifier]? ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class BreakStatement extends Statement { |
- |
- /** |
- * The token representing the 'break' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The label associated with the statement, or `null` if there is no label. |
- */ |
- SimpleIdentifier _label; |
- |
- /** |
- * The semicolon terminating the statement. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created break statement. |
- * |
- * @param keyword the token representing the 'break' keyword |
- * @param label the label associated with the statement |
- * @param semicolon the semicolon terminating the statement |
- */ |
- BreakStatement.full(Token keyword, SimpleIdentifier label, Token semicolon) { |
- this.keyword = keyword; |
- this._label = becomeParentOf(label); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created break statement. |
- * |
- * @param keyword the token representing the 'break' keyword |
- * @param label the label associated with the statement |
- * @param semicolon the semicolon terminating the statement |
- */ |
- BreakStatement({Token keyword, SimpleIdentifier label, Token semicolon}) : this.full(keyword, label, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitBreakStatement(this); |
- Token get beginToken => keyword; |
- Token get endToken => semicolon; |
- |
- /** |
- * Return the label associated with the statement, or `null` if there is no label. |
- * |
- * @return the label associated with the statement |
- */ |
- SimpleIdentifier get label => _label; |
- |
- /** |
- * Set the label associated with the statement to the given identifier. |
- * |
- * @param identifier the label associated with the statement |
- */ |
- void set label(SimpleIdentifier identifier) { |
- _label = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_label, visitor); |
- } |
-} |
-/** |
- * Instances of the class `CascadeExpression` represent 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]. |
- * |
- * <pre> |
- * cascadeExpression ::= |
- * [Expression] cascadeSection* |
- * |
- * cascadeSection ::= |
- * '..' (cascadeSelector arguments*) (assignableSelector arguments*)* (assignmentOperator expressionWithoutCascade)? |
- * |
- * cascadeSelector ::= |
- * '[ ' expression '] ' |
- * | identifier |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class CascadeExpression extends Expression { |
- |
- /** |
- * The target of the cascade sections. |
- */ |
- Expression _target; |
- |
- /** |
- * The cascade sections sharing the common target. |
- */ |
- NodeList<Expression> cascadeSections; |
- |
- /** |
- * Initialize a newly created cascade expression. |
- * |
- * @param target the target of the cascade sections |
- * @param cascadeSections the cascade sections sharing the common target |
- */ |
- CascadeExpression.full(Expression target, List<Expression> cascadeSections) { |
- this.cascadeSections = new NodeList<Expression>(this); |
- this._target = becomeParentOf(target); |
- this.cascadeSections.addAll(cascadeSections); |
- } |
- |
- /** |
- * Initialize a newly created cascade expression. |
- * |
- * @param target the target of the cascade sections |
- * @param cascadeSections the cascade sections sharing the common target |
- */ |
- CascadeExpression({Expression target, List<Expression> cascadeSections}) : this.full(target, cascadeSections); |
- accept(ASTVisitor visitor) => visitor.visitCascadeExpression(this); |
- Token get beginToken => _target.beginToken; |
- Token get endToken => cascadeSections.endToken; |
- |
- /** |
- * Return the target of the cascade sections. |
- * |
- * @return the target of the cascade sections |
- */ |
- Expression get target => _target; |
- |
- /** |
- * Set the target of the cascade sections to the given expression. |
- * |
- * @param target the target of the cascade sections |
- */ |
- void set target(Expression target) { |
- this._target = becomeParentOf(target); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_target, visitor); |
- cascadeSections.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `CatchClause` represent a catch clause within a try statement. |
- * |
- * <pre> |
- * onPart ::= |
- * catchPart [Block] |
- * | 'on' type catchPart? [Block] |
- * |
- * catchPart ::= |
- * 'catch' '(' [SimpleIdentifier] (',' [SimpleIdentifier])? ')' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class CatchClause extends ASTNode { |
- |
- /** |
- * The token representing the 'on' keyword, or `null` if there is no 'on' keyword. |
- */ |
- Token onKeyword; |
- |
- /** |
- * The type of exceptions caught by this catch clause, or `null` if this catch clause |
- * catches every type of exception. |
- */ |
- TypeName exceptionType; |
- |
- /** |
- * The token representing the 'catch' keyword, or `null` if there is no 'catch' keyword. |
- */ |
- Token catchKeyword; |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token _leftParenthesis; |
- |
- /** |
- * The parameter whose value will be the exception that was thrown. |
- */ |
- SimpleIdentifier _exceptionParameter; |
- |
- /** |
- * The comma separating the exception parameter from the stack trace parameter, or `null` if |
- * there is no stack trace parameter. |
- */ |
- Token comma; |
- |
- /** |
- * The parameter whose value will be the stack trace associated with the exception, or |
- * `null` if there is no stack trace parameter. |
- */ |
- SimpleIdentifier _stackTraceParameter; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token _rightParenthesis; |
- |
- /** |
- * The body of the catch block. |
- */ |
- Block _body; |
- |
- /** |
- * Initialize a newly created catch clause. |
- * |
- * @param onKeyword the token representing the 'on' keyword |
- * @param exceptionType the type of exceptions caught by this catch clause |
- * @param leftParenthesis the left parenthesis |
- * @param exceptionParameter the parameter whose value will be the exception that was thrown |
- * @param comma the comma separating the exception parameter from the stack trace parameter |
- * @param stackTraceParameter the parameter whose value will be the stack trace associated with |
- * the exception |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the catch block |
- */ |
- CatchClause.full(Token onKeyword, TypeName exceptionType, Token catchKeyword, Token leftParenthesis, SimpleIdentifier exceptionParameter, Token comma, SimpleIdentifier stackTraceParameter, Token rightParenthesis, Block body) { |
- this.onKeyword = onKeyword; |
- this.exceptionType = becomeParentOf(exceptionType); |
- this.catchKeyword = catchKeyword; |
- this._leftParenthesis = leftParenthesis; |
- this._exceptionParameter = becomeParentOf(exceptionParameter); |
- this.comma = comma; |
- this._stackTraceParameter = becomeParentOf(stackTraceParameter); |
- this._rightParenthesis = rightParenthesis; |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Initialize a newly created catch clause. |
- * |
- * @param onKeyword the token representing the 'on' keyword |
- * @param exceptionType the type of exceptions caught by this catch clause |
- * @param leftParenthesis the left parenthesis |
- * @param exceptionParameter the parameter whose value will be the exception that was thrown |
- * @param comma the comma separating the exception parameter from the stack trace parameter |
- * @param stackTraceParameter the parameter whose value will be the stack trace associated with |
- * the exception |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the catch block |
- */ |
- CatchClause({Token onKeyword, TypeName exceptionType, Token catchKeyword, Token leftParenthesis, SimpleIdentifier exceptionParameter, Token comma, SimpleIdentifier stackTraceParameter, Token rightParenthesis, Block body}) : this.full(onKeyword, exceptionType, catchKeyword, leftParenthesis, exceptionParameter, comma, stackTraceParameter, rightParenthesis, body); |
- accept(ASTVisitor visitor) => visitor.visitCatchClause(this); |
- Token get beginToken { |
- if (onKeyword != null) { |
- return onKeyword; |
- } |
- return catchKeyword; |
- } |
- |
- /** |
- * Return the body of the catch block. |
- * |
- * @return the body of the catch block |
- */ |
- Block get body => _body; |
- Token get endToken => _body.endToken; |
- |
- /** |
- * Return the parameter whose value will be the exception that was thrown. |
- * |
- * @return the parameter whose value will be the exception that was thrown |
- */ |
- SimpleIdentifier get exceptionParameter => _exceptionParameter; |
- |
- /** |
- * Return the left parenthesis. |
- * |
- * @return the left parenthesis |
- */ |
- Token get leftParenthesis => _leftParenthesis; |
- |
- /** |
- * Return the right parenthesis. |
- * |
- * @return the right parenthesis |
- */ |
- Token get rightParenthesis => _rightParenthesis; |
- |
- /** |
- * Return the parameter whose value will be the stack trace associated with the exception, or |
- * `null` if there is no stack trace parameter. |
- * |
- * @return the parameter whose value will be the stack trace associated with the exception |
- */ |
- SimpleIdentifier get stackTraceParameter => _stackTraceParameter; |
- |
- /** |
- * Set the body of the catch block to the given block. |
- * |
- * @param block the body of the catch block |
- */ |
- void set body(Block block) { |
- _body = becomeParentOf(block); |
- } |
- |
- /** |
- * Set the parameter whose value will be the exception that was thrown to the given parameter. |
- * |
- * @param parameter the parameter whose value will be the exception that was thrown |
- */ |
- void set exceptionParameter(SimpleIdentifier parameter) { |
- _exceptionParameter = becomeParentOf(parameter); |
- } |
- |
- /** |
- * Set the left parenthesis to the given token. |
- * |
- * @param parenthesis the left parenthesis |
- */ |
- void set leftParenthesis(Token parenthesis) { |
- _leftParenthesis = parenthesis; |
- } |
- |
- /** |
- * Set the right parenthesis to the given token. |
- * |
- * @param parenthesis the right parenthesis |
- */ |
- void set rightParenthesis(Token parenthesis) { |
- _rightParenthesis = parenthesis; |
- } |
- |
- /** |
- * Set the parameter whose value will be the stack trace associated with the exception to the |
- * given parameter. |
- * |
- * @param parameter the parameter whose value will be the stack trace associated with the |
- * exception |
- */ |
- void set stackTraceParameter(SimpleIdentifier parameter) { |
- _stackTraceParameter = becomeParentOf(parameter); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(exceptionType, visitor); |
- safelyVisitChild(_exceptionParameter, visitor); |
- safelyVisitChild(_stackTraceParameter, visitor); |
- safelyVisitChild(_body, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ClassDeclaration` represent the declaration of a class. |
- * |
- * <pre> |
- * classDeclaration ::= |
- * 'abstract'? 'class' [SimpleIdentifier] [TypeParameterList]? |
- * ([ExtendsClause] [WithClause]?)? |
- * [ImplementsClause]? |
- * '{' [ClassMember]* '}' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ClassDeclaration extends CompilationUnitMember { |
- |
- /** |
- * The 'abstract' keyword, or `null` if the keyword was absent. |
- */ |
- Token abstractKeyword; |
- |
- /** |
- * The token representing the 'class' keyword. |
- */ |
- Token classKeyword; |
- |
- /** |
- * The name of the class being declared. |
- */ |
- SimpleIdentifier _name; |
- |
- /** |
- * The type parameters for the class, or `null` if the class does not have any type |
- * parameters. |
- */ |
- TypeParameterList typeParameters; |
- |
- /** |
- * The extends clause for the class, or `null` if the class does not extend any other class. |
- */ |
- ExtendsClause _extendsClause; |
- |
- /** |
- * The with clause for the class, or `null` if the class does not have a with clause. |
- */ |
- WithClause _withClause; |
- |
- /** |
- * The implements clause for the class, or `null` if the class does not implement any |
- * interfaces. |
- */ |
- ImplementsClause _implementsClause; |
- |
- /** |
- * The native clause for the class, or `null` if the class does not have a native clause. |
- */ |
- NativeClause nativeClause; |
- |
- /** |
- * The left curly bracket. |
- */ |
- Token leftBracket; |
- |
- /** |
- * The members defined by the class. |
- */ |
- NodeList<ClassMember> members; |
- |
- /** |
- * The right curly bracket. |
- */ |
- Token rightBracket; |
- |
- /** |
- * Initialize a newly created class declaration. |
- * |
- * @param comment the documentation comment associated with this class |
- * @param metadata the annotations associated with this class |
- * @param abstractKeyword the 'abstract' keyword, or `null` if the keyword was absent |
- * @param classKeyword the token representing the 'class' keyword |
- * @param name the name of the class being declared |
- * @param typeParameters the type parameters for the class |
- * @param extendsClause the extends clause for the class |
- * @param withClause the with clause for the class |
- * @param implementsClause the implements clause for the class |
- * @param leftBracket the left curly bracket |
- * @param members the members defined by the class |
- * @param rightBracket the right curly bracket |
- */ |
- ClassDeclaration.full(Comment comment, List<Annotation> metadata, Token abstractKeyword, Token classKeyword, SimpleIdentifier name, TypeParameterList typeParameters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause implementsClause, Token leftBracket, List<ClassMember> members, Token rightBracket) : super.full(comment, metadata) { |
- this.members = new NodeList<ClassMember>(this); |
- this.abstractKeyword = abstractKeyword; |
- this.classKeyword = classKeyword; |
- this._name = becomeParentOf(name); |
- this.typeParameters = becomeParentOf(typeParameters); |
- this._extendsClause = becomeParentOf(extendsClause); |
- this._withClause = becomeParentOf(withClause); |
- this._implementsClause = becomeParentOf(implementsClause); |
- this.leftBracket = leftBracket; |
- this.members.addAll(members); |
- this.rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created class declaration. |
- * |
- * @param comment the documentation comment associated with this class |
- * @param metadata the annotations associated with this class |
- * @param abstractKeyword the 'abstract' keyword, or `null` if the keyword was absent |
- * @param classKeyword the token representing the 'class' keyword |
- * @param name the name of the class being declared |
- * @param typeParameters the type parameters for the class |
- * @param extendsClause the extends clause for the class |
- * @param withClause the with clause for the class |
- * @param implementsClause the implements clause for the class |
- * @param leftBracket the left curly bracket |
- * @param members the members defined by the class |
- * @param rightBracket the right curly bracket |
- */ |
- ClassDeclaration({Comment comment, List<Annotation> metadata, Token abstractKeyword, Token classKeyword, SimpleIdentifier name, TypeParameterList typeParameters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause implementsClause, Token leftBracket, List<ClassMember> members, Token rightBracket}) : this.full(comment, metadata, abstractKeyword, classKeyword, name, typeParameters, extendsClause, withClause, implementsClause, leftBracket, members, rightBracket); |
- accept(ASTVisitor visitor) => visitor.visitClassDeclaration(this); |
- ClassElement get element => _name != null ? (_name.staticElement as ClassElement) : null; |
- Token get endToken => rightBracket; |
- |
- /** |
- * Return the extends clause for this class, or `null` if the class does not extend any |
- * other class. |
- * |
- * @return the extends clause for this class |
- */ |
- ExtendsClause get extendsClause => _extendsClause; |
- |
- /** |
- * Return the implements clause for the class, or `null` if the class does not implement any |
- * interfaces. |
- * |
- * @return the implements clause for the class |
- */ |
- ImplementsClause get implementsClause => _implementsClause; |
- |
- /** |
- * Return the name of the class being declared. |
- * |
- * @return the name of the class being declared |
- */ |
- SimpleIdentifier get name => _name; |
- |
- /** |
- * Return the with clause for the class, or `null` if the class does not have a with clause. |
- * |
- * @return the with clause for the class |
- */ |
- WithClause get withClause => _withClause; |
- |
- /** |
- * Set the extends clause for this class to the given clause. |
- * |
- * @param extendsClause the extends clause for this class |
- */ |
- void set extendsClause(ExtendsClause extendsClause) { |
- this._extendsClause = becomeParentOf(extendsClause); |
- } |
- |
- /** |
- * Set the implements clause for the class to the given clause. |
- * |
- * @param implementsClause the implements clause for the class |
- */ |
- void set implementsClause(ImplementsClause implementsClause) { |
- this._implementsClause = becomeParentOf(implementsClause); |
- } |
- |
- /** |
- * Set the name of the class being declared to the given identifier. |
- * |
- * @param identifier the name of the class being declared |
- */ |
- void set name(SimpleIdentifier identifier) { |
- _name = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Set the with clause for the class to the given clause. |
- * |
- * @param withClause the with clause for the class |
- */ |
- void set withClause(WithClause withClause) { |
- this._withClause = becomeParentOf(withClause); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(typeParameters, visitor); |
- safelyVisitChild(_extendsClause, visitor); |
- safelyVisitChild(_withClause, visitor); |
- safelyVisitChild(_implementsClause, visitor); |
- safelyVisitChild(nativeClause, visitor); |
- members.accept(visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata { |
- if (abstractKeyword != null) { |
- return abstractKeyword; |
- } |
- return classKeyword; |
- } |
-} |
-/** |
- * The abstract class `ClassMember` defines the behavior common to nodes that declare a name |
- * within the scope of a class. |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class ClassMember extends Declaration { |
- |
- /** |
- * Initialize a newly created member of a class. |
- * |
- * @param comment the documentation comment associated with this member |
- * @param metadata the annotations associated with this member |
- */ |
- ClassMember.full(Comment comment, List<Annotation> metadata) : super.full(comment, metadata); |
- |
- /** |
- * Initialize a newly created member of a class. |
- * |
- * @param comment the documentation comment associated with this member |
- * @param metadata the annotations associated with this member |
- */ |
- ClassMember({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata); |
-} |
-/** |
- * Instances of the class `ClassTypeAlias` represent a class type alias. |
- * |
- * <pre> |
- * classTypeAlias ::= |
- * [SimpleIdentifier] [TypeParameterList]? '=' 'abstract'? mixinApplication |
- * |
- * mixinApplication ::= |
- * [TypeName] [WithClause] [ImplementsClause]? ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ClassTypeAlias extends TypeAlias { |
- |
- /** |
- * The name of the class being declared. |
- */ |
- SimpleIdentifier _name; |
- |
- /** |
- * The type parameters for the class, or `null` if the class does not have any type |
- * parameters. |
- */ |
- TypeParameterList _typeParameters; |
- |
- /** |
- * The token for the '=' separating the name from the definition. |
- */ |
- Token equals; |
- |
- /** |
- * The token for the 'abstract' keyword, or `null` if this is not defining an abstract |
- * class. |
- */ |
- Token abstractKeyword; |
- |
- /** |
- * The name of the superclass of the class being declared. |
- */ |
- TypeName _superclass; |
- |
- /** |
- * The with clause for this class. |
- */ |
- WithClause _withClause; |
- |
- /** |
- * The implements clause for this class, or `null` if there is no implements clause. |
- */ |
- ImplementsClause _implementsClause; |
- |
- /** |
- * Initialize a newly created class type alias. |
- * |
- * @param comment the documentation comment associated with this type alias |
- * @param metadata the annotations associated with this type alias |
- * @param keyword the token representing the 'typedef' keyword |
- * @param name the name of the class being declared |
- * @param typeParameters the type parameters for the class |
- * @param equals the token for the '=' separating the name from the definition |
- * @param abstractKeyword the token for the 'abstract' keyword |
- * @param superclass the name of the superclass of the class being declared |
- * @param withClause the with clause for this class |
- * @param implementsClause the implements clause for this class |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- ClassTypeAlias.full(Comment comment, List<Annotation> metadata, Token keyword, SimpleIdentifier name, TypeParameterList typeParameters, Token equals, Token abstractKeyword, TypeName superclass, WithClause withClause, ImplementsClause implementsClause, Token semicolon) : super.full(comment, metadata, keyword, semicolon) { |
- this._name = becomeParentOf(name); |
- this._typeParameters = becomeParentOf(typeParameters); |
- this.equals = equals; |
- this.abstractKeyword = abstractKeyword; |
- this._superclass = becomeParentOf(superclass); |
- this._withClause = becomeParentOf(withClause); |
- this._implementsClause = becomeParentOf(implementsClause); |
- } |
- |
- /** |
- * Initialize a newly created class type alias. |
- * |
- * @param comment the documentation comment associated with this type alias |
- * @param metadata the annotations associated with this type alias |
- * @param keyword the token representing the 'typedef' keyword |
- * @param name the name of the class being declared |
- * @param typeParameters the type parameters for the class |
- * @param equals the token for the '=' separating the name from the definition |
- * @param abstractKeyword the token for the 'abstract' keyword |
- * @param superclass the name of the superclass of the class being declared |
- * @param withClause the with clause for this class |
- * @param implementsClause the implements clause for this class |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- ClassTypeAlias({Comment comment, List<Annotation> metadata, Token keyword, SimpleIdentifier name, TypeParameterList typeParameters, Token equals, Token abstractKeyword, TypeName superclass, WithClause withClause, ImplementsClause implementsClause, Token semicolon}) : this.full(comment, metadata, keyword, name, typeParameters, equals, abstractKeyword, superclass, withClause, implementsClause, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitClassTypeAlias(this); |
- ClassElement get element => _name != null ? (_name.staticElement as ClassElement) : null; |
- |
- /** |
- * Return the implements clause for this class, or `null` if there is no implements clause. |
- * |
- * @return the implements clause for this class |
- */ |
- ImplementsClause get implementsClause => _implementsClause; |
- |
- /** |
- * Return the name of the class being declared. |
- * |
- * @return the name of the class being declared |
- */ |
- SimpleIdentifier get name => _name; |
- |
- /** |
- * Return the name of the superclass of the class being declared. |
- * |
- * @return the name of the superclass of the class being declared |
- */ |
- TypeName get superclass => _superclass; |
- |
- /** |
- * Return the type parameters for the class, or `null` if the class does not have any type |
- * parameters. |
- * |
- * @return the type parameters for the class |
- */ |
- TypeParameterList get typeParameters => _typeParameters; |
- |
- /** |
- * Return the with clause for this class. |
- * |
- * @return the with clause for this class |
- */ |
- WithClause get withClause => _withClause; |
- |
- /** |
- * Set the implements clause for this class to the given implements clause. |
- * |
- * @param implementsClause the implements clause for this class |
- */ |
- void set implementsClause(ImplementsClause implementsClause) { |
- this._implementsClause = becomeParentOf(implementsClause); |
- } |
- |
- /** |
- * Set the name of the class being declared to the given identifier. |
- * |
- * @param name the name of the class being declared |
- */ |
- void set name(SimpleIdentifier name) { |
- this._name = becomeParentOf(name); |
- } |
- |
- /** |
- * Set the name of the superclass of the class being declared to the given name. |
- * |
- * @param superclass the name of the superclass of the class being declared |
- */ |
- void set superclass(TypeName superclass) { |
- this._superclass = becomeParentOf(superclass); |
- } |
- |
- /** |
- * Set the type parameters for the class to the given list of parameters. |
- * |
- * @param typeParameters the type parameters for the class |
- */ |
- void set typeParameters(TypeParameterList typeParameters) { |
- this._typeParameters = becomeParentOf(typeParameters); |
- } |
- |
- /** |
- * Set the with clause for this class to the given with clause. |
- * |
- * @param withClause the with clause for this class |
- */ |
- void set withClause(WithClause withClause) { |
- this._withClause = becomeParentOf(withClause); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_typeParameters, visitor); |
- safelyVisitChild(_superclass, visitor); |
- safelyVisitChild(_withClause, visitor); |
- safelyVisitChild(_implementsClause, visitor); |
- } |
-} |
-/** |
- * Instances of the class `Combinator` represent the combinator associated with an import |
- * directive. |
- * |
- * <pre> |
- * combinator ::= |
- * [HideCombinator] |
- * | [ShowCombinator] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class Combinator extends ASTNode { |
- |
- /** |
- * The keyword specifying what kind of processing is to be done on the imported names. |
- */ |
- Token keyword; |
- |
- /** |
- * Initialize a newly created import combinator. |
- * |
- * @param keyword the keyword specifying what kind of processing is to be done on the imported |
- * names |
- */ |
- Combinator.full(Token keyword) { |
- this.keyword = keyword; |
- } |
- |
- /** |
- * Initialize a newly created import combinator. |
- * |
- * @param keyword the keyword specifying what kind of processing is to be done on the imported |
- * names |
- */ |
- Combinator({Token keyword}) : this.full(keyword); |
- Token get beginToken => keyword; |
-} |
-/** |
- * Instances of the class `Comment` represent a comment within the source code. |
- * |
- * <pre> |
- * comment ::= |
- * endOfLineComment |
- * | blockComment |
- * | documentationComment |
- * |
- * endOfLineComment ::= |
- * '//' (CHARACTER - EOL)* EOL |
- * |
- * blockComment ::= |
- * '/ *' CHARACTER* '*/' |
- * |
- * documentationComment ::= |
- * '/ **' (CHARACTER | [CommentReference])* '*/' |
- * | ('///' (CHARACTER - EOL)* EOL)+ |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class Comment extends ASTNode { |
- |
- /** |
- * Create a block comment. |
- * |
- * @param tokens the tokens representing the comment |
- * @return the block comment that was created |
- */ |
- static Comment createBlockComment(List<Token> tokens) => new Comment.full(tokens, CommentType.BLOCK, null); |
- |
- /** |
- * Create a documentation comment. |
- * |
- * @param tokens the tokens representing the comment |
- * @return the documentation comment that was created |
- */ |
- static Comment createDocumentationComment(List<Token> tokens) => new Comment.full(tokens, CommentType.DOCUMENTATION, new List<CommentReference>()); |
- |
- /** |
- * Create a documentation comment. |
- * |
- * @param tokens the tokens representing the comment |
- * @param references the references embedded within the documentation comment |
- * @return the documentation comment that was created |
- */ |
- static Comment createDocumentationComment2(List<Token> tokens, List<CommentReference> references) => new Comment.full(tokens, CommentType.DOCUMENTATION, references); |
- |
- /** |
- * Create an end-of-line comment. |
- * |
- * @param tokens the tokens representing the comment |
- * @return the end-of-line comment that was created |
- */ |
- static Comment createEndOfLineComment(List<Token> tokens) => new Comment.full(tokens, CommentType.END_OF_LINE, null); |
- |
- /** |
- * The tokens representing the comment. |
- */ |
- List<Token> tokens; |
- |
- /** |
- * The type of the comment. |
- */ |
- CommentType _type; |
- |
- /** |
- * The references embedded within the documentation comment. This list will be empty unless this |
- * is a documentation comment that has references embedded within it. |
- */ |
- NodeList<CommentReference> references; |
- |
- /** |
- * Initialize a newly created comment. |
- * |
- * @param tokens the tokens representing the comment |
- * @param type the type of the comment |
- * @param references the references embedded within the documentation comment |
- */ |
- Comment.full(List<Token> tokens, CommentType type, List<CommentReference> references) { |
- this.references = new NodeList<CommentReference>(this); |
- this.tokens = tokens; |
- this._type = type; |
- this.references.addAll(references); |
- } |
- |
- /** |
- * Initialize a newly created comment. |
- * |
- * @param tokens the tokens representing the comment |
- * @param type the type of the comment |
- * @param references the references embedded within the documentation comment |
- */ |
- Comment({List<Token> tokens, CommentType type, List<CommentReference> references}) : this.full(tokens, type, references); |
- accept(ASTVisitor visitor) => visitor.visitComment(this); |
- Token get beginToken => tokens[0]; |
- Token get endToken => tokens[tokens.length - 1]; |
- |
- /** |
- * Return `true` if this is a block comment. |
- * |
- * @return `true` if this is a block comment |
- */ |
- bool get isBlock => identical(_type, CommentType.BLOCK); |
- |
- /** |
- * Return `true` if this is a documentation comment. |
- * |
- * @return `true` if this is a documentation comment |
- */ |
- bool get isDocumentation => identical(_type, CommentType.DOCUMENTATION); |
- |
- /** |
- * Return `true` if this is an end-of-line comment. |
- * |
- * @return `true` if this is an end-of-line comment |
- */ |
- bool get isEndOfLine => identical(_type, CommentType.END_OF_LINE); |
- void visitChildren(ASTVisitor visitor) { |
- references.accept(visitor); |
- } |
-} |
-/** |
- * The enumeration `CommentType` encodes all the different types of comments that are |
- * recognized by the parser. |
- */ |
-class CommentType extends Enum<CommentType> { |
- |
- /** |
- * An end-of-line comment. |
- */ |
- static final CommentType END_OF_LINE = new CommentType('END_OF_LINE', 0); |
- |
- /** |
- * A block comment. |
- */ |
- static final CommentType BLOCK = new CommentType('BLOCK', 1); |
- |
- /** |
- * A documentation comment. |
- */ |
- static final CommentType DOCUMENTATION = new CommentType('DOCUMENTATION', 2); |
- static final List<CommentType> values = [END_OF_LINE, BLOCK, DOCUMENTATION]; |
- CommentType(String name, int ordinal) : super(name, ordinal); |
-} |
-/** |
- * Instances of the class `CommentReference` represent a reference to a Dart element that is |
- * found within a documentation comment. |
- * |
- * <pre> |
- * commentReference ::= |
- * '[' 'new'? [Identifier] ']' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class CommentReference extends ASTNode { |
- |
- /** |
- * The token representing the 'new' keyword, or `null` if there was no 'new' keyword. |
- */ |
- Token newKeyword; |
- |
- /** |
- * The identifier being referenced. |
- */ |
- Identifier _identifier; |
- |
- /** |
- * Initialize a newly created reference to a Dart element. |
- * |
- * @param newKeyword the token representing the 'new' keyword |
- * @param identifier the identifier being referenced |
- */ |
- CommentReference.full(Token newKeyword, Identifier identifier) { |
- this.newKeyword = newKeyword; |
- this._identifier = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Initialize a newly created reference to a Dart element. |
- * |
- * @param newKeyword the token representing the 'new' keyword |
- * @param identifier the identifier being referenced |
- */ |
- CommentReference({Token newKeyword, Identifier identifier}) : this.full(newKeyword, identifier); |
- accept(ASTVisitor visitor) => visitor.visitCommentReference(this); |
- Token get beginToken => _identifier.beginToken; |
- Token get endToken => _identifier.endToken; |
- |
- /** |
- * Return the identifier being referenced. |
- * |
- * @return the identifier being referenced |
- */ |
- Identifier get identifier => _identifier; |
- |
- /** |
- * Set the identifier being referenced to the given identifier. |
- * |
- * @param identifier the identifier being referenced |
- */ |
- void set identifier(Identifier identifier) { |
- identifier = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_identifier, visitor); |
- } |
-} |
-/** |
- * Instances of the class `CompilationUnit` represent 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. |
- * |
- * <pre> |
- * compilationUnit ::= |
- * directives declarations |
- * |
- * directives ::= |
- * [ScriptTag]? [LibraryDirective]? namespaceDirective* [PartDirective]* |
- * | [PartOfDirective] |
- * |
- * namespaceDirective ::= |
- * [ImportDirective] |
- * | [ExportDirective] |
- * |
- * declarations ::= |
- * [CompilationUnitMember]* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class CompilationUnit extends ASTNode { |
- |
- /** |
- * The first token in the token stream that was parsed to form this compilation unit. |
- */ |
- Token _beginToken; |
- |
- /** |
- * The script tag at the beginning of the compilation unit, or `null` if there is no script |
- * tag in this compilation unit. |
- */ |
- ScriptTag _scriptTag; |
- |
- /** |
- * The directives contained in this compilation unit. |
- */ |
- NodeList<Directive> directives; |
- |
- /** |
- * The declarations contained in this compilation unit. |
- */ |
- NodeList<CompilationUnitMember> declarations; |
- |
- /** |
- * The last token in the token stream that was parsed to form this compilation unit. This token |
- * should always have a type of [TokenType.EOF]. |
- */ |
- Token _endToken; |
- |
- /** |
- * The element associated with this compilation unit, or `null` if the AST structure has not |
- * been resolved. |
- */ |
- CompilationUnitElement element; |
- |
- /** |
- * The line information for this compilation unit. |
- */ |
- LineInfo lineInfo; |
- |
- /** |
- * Initialize a newly created compilation unit to have the given directives and declarations. |
- * |
- * @param beginToken the first token in the token stream |
- * @param scriptTag the script tag at the beginning of the compilation unit |
- * @param directives the directives contained in this compilation unit |
- * @param declarations the declarations contained in this compilation unit |
- * @param endToken the last token in the token stream |
- */ |
- CompilationUnit.full(Token beginToken, ScriptTag scriptTag, List<Directive> directives, List<CompilationUnitMember> declarations, Token endToken) { |
- this.directives = new NodeList<Directive>(this); |
- this.declarations = new NodeList<CompilationUnitMember>(this); |
- this._beginToken = beginToken; |
- this._scriptTag = becomeParentOf(scriptTag); |
- this.directives.addAll(directives); |
- this.declarations.addAll(declarations); |
- this._endToken = endToken; |
- } |
- |
- /** |
- * Initialize a newly created compilation unit to have the given directives and declarations. |
- * |
- * @param beginToken the first token in the token stream |
- * @param scriptTag the script tag at the beginning of the compilation unit |
- * @param directives the directives contained in this compilation unit |
- * @param declarations the declarations contained in this compilation unit |
- * @param endToken the last token in the token stream |
- */ |
- CompilationUnit({Token beginToken, ScriptTag scriptTag, List<Directive> directives, List<CompilationUnitMember> declarations, Token endToken}) : this.full(beginToken, scriptTag, directives, declarations, endToken); |
- accept(ASTVisitor visitor) => visitor.visitCompilationUnit(this); |
- Token get beginToken => _beginToken; |
- Token get endToken => _endToken; |
- int get length { |
- Token endToken = this.endToken; |
- if (endToken == null) { |
- return 0; |
- } |
- return endToken.offset + endToken.length; |
- } |
- int get offset => 0; |
- |
- /** |
- * Return the script tag at the beginning of the compilation unit, or `null` if there is no |
- * script tag in this compilation unit. |
- * |
- * @return the script tag at the beginning of the compilation unit |
- */ |
- ScriptTag get scriptTag => _scriptTag; |
- |
- /** |
- * Set the script tag at the beginning of the compilation unit to the given script tag. |
- * |
- * @param scriptTag the script tag at the beginning of the compilation unit |
- */ |
- void set scriptTag(ScriptTag scriptTag) { |
- this._scriptTag = becomeParentOf(scriptTag); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_scriptTag, visitor); |
- if (directivesAreBeforeDeclarations()) { |
- directives.accept(visitor); |
- declarations.accept(visitor); |
- } else { |
- for (ASTNode child in sortedDirectivesAndDeclarations) { |
- child.accept(visitor); |
- } |
- } |
- } |
- |
- /** |
- * Return `true` if all of the directives are lexically before any declarations. |
- * |
- * @return `true` if all of the directives are lexically before any declarations |
- */ |
- bool directivesAreBeforeDeclarations() { |
- if (directives.isEmpty || declarations.isEmpty) { |
- return true; |
- } |
- Directive lastDirective = directives[directives.length - 1]; |
- CompilationUnitMember firstDeclaration = declarations[0]; |
- return lastDirective.offset < firstDeclaration.offset; |
- } |
- |
- /** |
- * Return an array containing all of the directives and declarations in this compilation unit, |
- * sorted in lexical order. |
- * |
- * @return the directives and declarations in this compilation unit in the order in which they |
- * appeared in the original source |
- */ |
- List<ASTNode> get sortedDirectivesAndDeclarations { |
- List<ASTNode> childList = new List<ASTNode>(); |
- childList.addAll(directives); |
- childList.addAll(declarations); |
- List<ASTNode> children = new List.from(childList); |
- children.sort(ASTNode.LEXICAL_ORDER); |
- return children; |
- } |
-} |
-/** |
- * Instances of the class `CompilationUnitMember` defines the behavior common to nodes that |
- * declare a name within the scope of a compilation unit. |
- * |
- * <pre> |
- * compilationUnitMember ::= |
- * [ClassDeclaration] |
- * | [TypeAlias] |
- * | [FunctionDeclaration] |
- * | [MethodDeclaration] |
- * | [VariableDeclaration] |
- * | [VariableDeclaration] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class CompilationUnitMember extends Declaration { |
- |
- /** |
- * Initialize a newly created generic compilation unit member. |
- * |
- * @param comment the documentation comment associated with this member |
- * @param metadata the annotations associated with this member |
- */ |
- CompilationUnitMember.full(Comment comment, List<Annotation> metadata) : super.full(comment, metadata); |
- |
- /** |
- * Initialize a newly created generic compilation unit member. |
- * |
- * @param comment the documentation comment associated with this member |
- * @param metadata the annotations associated with this member |
- */ |
- CompilationUnitMember({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata); |
-} |
-/** |
- * Instances of the class `ConditionalExpression` represent a conditional expression. |
- * |
- * <pre> |
- * conditionalExpression ::= |
- * [Expression] '?' [Expression] ':' [Expression] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ConditionalExpression extends Expression { |
- |
- /** |
- * The condition used to determine which of the expressions is executed next. |
- */ |
- Expression _condition; |
- |
- /** |
- * The token used to separate the condition from the then expression. |
- */ |
- Token question; |
- |
- /** |
- * The expression that is executed if the condition evaluates to `true`. |
- */ |
- Expression _thenExpression; |
- |
- /** |
- * The token used to separate the then expression from the else expression. |
- */ |
- Token colon; |
- |
- /** |
- * The expression that is executed if the condition evaluates to `false`. |
- */ |
- Expression _elseExpression; |
- |
- /** |
- * Initialize a newly created conditional expression. |
- * |
- * @param condition the condition used to determine which expression is executed next |
- * @param question the token used to separate the condition from the then expression |
- * @param thenExpression the expression that is executed if the condition evaluates to |
- * `true` |
- * @param colon the token used to separate the then expression from the else expression |
- * @param elseExpression the expression that is executed if the condition evaluates to |
- * `false` |
- */ |
- ConditionalExpression.full(Expression condition, Token question, Expression thenExpression, Token colon, Expression elseExpression) { |
- this._condition = becomeParentOf(condition); |
- this.question = question; |
- this._thenExpression = becomeParentOf(thenExpression); |
- this.colon = colon; |
- this._elseExpression = becomeParentOf(elseExpression); |
- } |
- |
- /** |
- * Initialize a newly created conditional expression. |
- * |
- * @param condition the condition used to determine which expression is executed next |
- * @param question the token used to separate the condition from the then expression |
- * @param thenExpression the expression that is executed if the condition evaluates to |
- * `true` |
- * @param colon the token used to separate the then expression from the else expression |
- * @param elseExpression the expression that is executed if the condition evaluates to |
- * `false` |
- */ |
- ConditionalExpression({Expression condition, Token question, Expression thenExpression, Token colon, Expression elseExpression}) : this.full(condition, question, thenExpression, colon, elseExpression); |
- accept(ASTVisitor visitor) => visitor.visitConditionalExpression(this); |
- Token get beginToken => _condition.beginToken; |
- |
- /** |
- * Return the condition used to determine which of the expressions is executed next. |
- * |
- * @return the condition used to determine which expression is executed next |
- */ |
- Expression get condition => _condition; |
- |
- /** |
- * Return the expression that is executed if the condition evaluates to `false`. |
- * |
- * @return the expression that is executed if the condition evaluates to `false` |
- */ |
- Expression get elseExpression => _elseExpression; |
- Token get endToken => _elseExpression.endToken; |
- |
- /** |
- * Return the expression that is executed if the condition evaluates to `true`. |
- * |
- * @return the expression that is executed if the condition evaluates to `true` |
- */ |
- Expression get thenExpression => _thenExpression; |
- |
- /** |
- * Set the condition used to determine which of the expressions is executed next to the given |
- * expression. |
- * |
- * @param expression the condition used to determine which expression is executed next |
- */ |
- void set condition(Expression expression) { |
- _condition = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the expression that is executed if the condition evaluates to `false` to the given |
- * expression. |
- * |
- * @param expression the expression that is executed if the condition evaluates to `false` |
- */ |
- void set elseExpression(Expression expression) { |
- _elseExpression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the expression that is executed if the condition evaluates to `true` to the given |
- * expression. |
- * |
- * @param expression the expression that is executed if the condition evaluates to `true` |
- */ |
- void set thenExpression(Expression expression) { |
- _thenExpression = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_condition, visitor); |
- safelyVisitChild(_thenExpression, visitor); |
- safelyVisitChild(_elseExpression, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ConstructorDeclaration` represent a constructor declaration. |
- * |
- * <pre> |
- * 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])* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ConstructorDeclaration extends ClassMember { |
- |
- /** |
- * The token for the 'external' keyword, or `null` if the constructor is not external. |
- */ |
- Token externalKeyword; |
- |
- /** |
- * The token for the 'const' keyword, or `null` if the constructor is not a const |
- * constructor. |
- */ |
- Token constKeyword; |
- |
- /** |
- * The token for the 'factory' keyword, or `null` if the constructor is not a factory |
- * constructor. |
- */ |
- Token factoryKeyword; |
- |
- /** |
- * 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 _returnType; |
- |
- /** |
- * The token for the period before the constructor name, or `null` if the constructor being |
- * declared is unnamed. |
- */ |
- Token period; |
- |
- /** |
- * The name of the constructor, or `null` if the constructor being declared is unnamed. |
- */ |
- SimpleIdentifier _name; |
- |
- /** |
- * The parameters associated with the constructor. |
- */ |
- FormalParameterList _parameters; |
- |
- /** |
- * The token for the separator (colon or equals) before the initializer list or redirection, or |
- * `null` if there are no initializers. |
- */ |
- Token separator; |
- |
- /** |
- * The initializers associated with the constructor. |
- */ |
- NodeList<ConstructorInitializer> initializers; |
- |
- /** |
- * The name of the constructor to which this constructor will be redirected, or `null` if |
- * this is not a redirecting factory constructor. |
- */ |
- ConstructorName _redirectedConstructor; |
- |
- /** |
- * The body of the constructor, or `null` if the constructor does not have a body. |
- */ |
- FunctionBody _body; |
- |
- /** |
- * The element associated with this constructor, or `null` if the AST structure has not been |
- * resolved or if this constructor could not be resolved. |
- */ |
- ConstructorElement _element; |
- |
- /** |
- * Initialize a newly created constructor declaration. |
- * |
- * @param externalKeyword the token for the 'external' keyword |
- * @param comment the documentation comment associated with this constructor |
- * @param metadata the annotations associated with this constructor |
- * @param constKeyword the token for the 'const' keyword |
- * @param factoryKeyword the token for the 'factory' keyword |
- * @param returnType the return type of the constructor |
- * @param period the token for the period before the constructor name |
- * @param name the name of the constructor |
- * @param parameters the parameters associated with the constructor |
- * @param separator the token for the colon or equals before the initializers |
- * @param initializers the initializers associated with the constructor |
- * @param redirectedConstructor the name of the constructor to which this constructor will be |
- * redirected |
- * @param body the body of the constructor |
- */ |
- ConstructorDeclaration.full(Comment comment, List<Annotation> metadata, Token externalKeyword, Token constKeyword, Token factoryKeyword, Identifier returnType, Token period, SimpleIdentifier name, FormalParameterList parameters, Token separator, List<ConstructorInitializer> initializers, ConstructorName redirectedConstructor, FunctionBody body) : super.full(comment, metadata) { |
- this.initializers = new NodeList<ConstructorInitializer>(this); |
- this.externalKeyword = externalKeyword; |
- this.constKeyword = constKeyword; |
- this.factoryKeyword = factoryKeyword; |
- this._returnType = becomeParentOf(returnType); |
- this.period = period; |
- this._name = becomeParentOf(name); |
- this._parameters = becomeParentOf(parameters); |
- this.separator = separator; |
- this.initializers.addAll(initializers); |
- this._redirectedConstructor = becomeParentOf(redirectedConstructor); |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Initialize a newly created constructor declaration. |
- * |
- * @param externalKeyword the token for the 'external' keyword |
- * @param comment the documentation comment associated with this constructor |
- * @param metadata the annotations associated with this constructor |
- * @param constKeyword the token for the 'const' keyword |
- * @param factoryKeyword the token for the 'factory' keyword |
- * @param returnType the return type of the constructor |
- * @param period the token for the period before the constructor name |
- * @param name the name of the constructor |
- * @param parameters the parameters associated with the constructor |
- * @param separator the token for the colon or equals before the initializers |
- * @param initializers the initializers associated with the constructor |
- * @param redirectedConstructor the name of the constructor to which this constructor will be |
- * redirected |
- * @param body the body of the constructor |
- */ |
- ConstructorDeclaration({Comment comment, List<Annotation> metadata, Token externalKeyword, Token constKeyword, Token factoryKeyword, Identifier returnType, Token period, SimpleIdentifier name, FormalParameterList parameters, Token separator, List<ConstructorInitializer> initializers, ConstructorName redirectedConstructor, FunctionBody body}) : this.full(comment, metadata, externalKeyword, constKeyword, factoryKeyword, returnType, period, name, parameters, separator, initializers, redirectedConstructor, body); |
- accept(ASTVisitor visitor) => visitor.visitConstructorDeclaration(this); |
- |
- /** |
- * Return the body of the constructor, or `null` if the constructor does not have a body. |
- * |
- * @return the body of the constructor |
- */ |
- FunctionBody get body => _body; |
- ConstructorElement get element => _element; |
- Token get endToken { |
- if (_body != null) { |
- return _body.endToken; |
- } else if (!initializers.isEmpty) { |
- return initializers.endToken; |
- } |
- return _parameters.endToken; |
- } |
- |
- /** |
- * Return the name of the constructor, or `null` if the constructor being declared is |
- * unnamed. |
- * |
- * @return the name of the constructor |
- */ |
- SimpleIdentifier get name => _name; |
- |
- /** |
- * Return the parameters associated with the constructor. |
- * |
- * @return the parameters associated with the constructor |
- */ |
- FormalParameterList get parameters => _parameters; |
- |
- /** |
- * Return the name of the constructor to which this constructor will be redirected, or |
- * `null` if this is not a redirecting factory constructor. |
- * |
- * @return the name of the constructor to which this constructor will be redirected |
- */ |
- ConstructorName get redirectedConstructor => _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. |
- * |
- * @return the type of object being created |
- */ |
- Identifier get returnType => _returnType; |
- |
- /** |
- * Set the body of the constructor to the given function body. |
- * |
- * @param functionBody the body of the constructor |
- */ |
- void set body(FunctionBody functionBody) { |
- _body = becomeParentOf(functionBody); |
- } |
- |
- /** |
- * Set the element associated with this constructor to the given element. |
- * |
- * @param element the element associated with this constructor |
- */ |
- void set element(ConstructorElement element) { |
- this._element = element; |
- } |
- |
- /** |
- * Set the name of the constructor to the given identifier. |
- * |
- * @param identifier the name of the constructor |
- */ |
- void set name(SimpleIdentifier identifier) { |
- _name = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Set the parameters associated with the constructor to the given list of parameters. |
- * |
- * @param parameters the parameters associated with the constructor |
- */ |
- void set parameters(FormalParameterList parameters) { |
- this._parameters = becomeParentOf(parameters); |
- } |
- |
- /** |
- * Set the name of the constructor to which this constructor will be redirected to the given |
- * constructor name. |
- * |
- * @param redirectedConstructor the name of the constructor to which this constructor will be |
- * redirected |
- */ |
- void set redirectedConstructor(ConstructorName redirectedConstructor) { |
- this._redirectedConstructor = becomeParentOf(redirectedConstructor); |
- } |
- |
- /** |
- * Set the type of object being created to the given type name. |
- * |
- * @param typeName the type of object being created |
- */ |
- void set returnType(Identifier typeName) { |
- _returnType = becomeParentOf(typeName); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_returnType, visitor); |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_parameters, visitor); |
- initializers.accept(visitor); |
- safelyVisitChild(_redirectedConstructor, visitor); |
- safelyVisitChild(_body, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata { |
- Token leftMost = this.leftMost([externalKeyword, constKeyword, factoryKeyword]); |
- if (leftMost != null) { |
- return leftMost; |
- } |
- return _returnType.beginToken; |
- } |
- |
- /** |
- * Return the left-most of the given tokens, or `null` if there are no tokens given or if |
- * all of the given tokens are `null`. |
- * |
- * @param tokens the tokens being compared to find the left-most token |
- * @return the left-most of the given tokens |
- */ |
- Token leftMost(List<Token> tokens) { |
- Token leftMost = null; |
- int offset = 2147483647; |
- for (Token token in tokens) { |
- if (token != null && token.offset < offset) { |
- leftMost = token; |
- } |
- } |
- return leftMost; |
- } |
-} |
-/** |
- * Instances of the class `ConstructorFieldInitializer` represent the initialization of a |
- * field within a constructor's initialization list. |
- * |
- * <pre> |
- * fieldInitializer ::= |
- * ('this' '.')? [SimpleIdentifier] '=' [Expression] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ConstructorFieldInitializer extends ConstructorInitializer { |
- |
- /** |
- * The token for the 'this' keyword, or `null` if there is no 'this' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The token for the period after the 'this' keyword, or `null` if there is no 'this' |
- * keyword. |
- */ |
- Token period; |
- |
- /** |
- * The name of the field being initialized. |
- */ |
- SimpleIdentifier _fieldName; |
- |
- /** |
- * The token for the equal sign between the field name and the expression. |
- */ |
- Token equals; |
- |
- /** |
- * The expression computing the value to which the field will be initialized. |
- */ |
- Expression _expression; |
- |
- /** |
- * Initialize a newly created field initializer to initialize the field with the given name to the |
- * value of the given expression. |
- * |
- * @param keyword the token for the 'this' keyword |
- * @param period the token for the period after the 'this' keyword |
- * @param fieldName the name of the field being initialized |
- * @param equals the token for the equal sign between the field name and the expression |
- * @param expression the expression computing the value to which the field will be initialized |
- */ |
- ConstructorFieldInitializer.full(Token keyword, Token period, SimpleIdentifier fieldName, Token equals, Expression expression) { |
- this.keyword = keyword; |
- this.period = period; |
- this._fieldName = becomeParentOf(fieldName); |
- this.equals = equals; |
- this._expression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Initialize a newly created field initializer to initialize the field with the given name to the |
- * value of the given expression. |
- * |
- * @param keyword the token for the 'this' keyword |
- * @param period the token for the period after the 'this' keyword |
- * @param fieldName the name of the field being initialized |
- * @param equals the token for the equal sign between the field name and the expression |
- * @param expression the expression computing the value to which the field will be initialized |
- */ |
- ConstructorFieldInitializer({Token keyword, Token period, SimpleIdentifier fieldName, Token equals, Expression expression}) : this.full(keyword, period, fieldName, equals, expression); |
- accept(ASTVisitor visitor) => visitor.visitConstructorFieldInitializer(this); |
- Token get beginToken { |
- if (keyword != null) { |
- return keyword; |
- } |
- return _fieldName.beginToken; |
- } |
- Token get endToken => _expression.endToken; |
- |
- /** |
- * Return the expression computing the value to which the field will be initialized. |
- * |
- * @return the expression computing the value to which the field will be initialized |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Return the name of the field being initialized. |
- * |
- * @return the name of the field being initialized |
- */ |
- SimpleIdentifier get fieldName => _fieldName; |
- |
- /** |
- * Set the expression computing the value to which the field will be initialized to the given |
- * expression. |
- * |
- * @param expression the expression computing the value to which the field will be initialized |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the name of the field being initialized to the given identifier. |
- * |
- * @param identifier the name of the field being initialized |
- */ |
- void set fieldName(SimpleIdentifier identifier) { |
- _fieldName = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_fieldName, visitor); |
- safelyVisitChild(_expression, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ConstructorInitializer` defines the behavior of nodes that can |
- * occur in the initializer list of a constructor declaration. |
- * |
- * <pre> |
- * constructorInitializer ::= |
- * [SuperConstructorInvocation] |
- * | [ConstructorFieldInitializer] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class ConstructorInitializer extends ASTNode { |
-} |
-/** |
- * Instances of the class `ConstructorName` represent the name of the constructor. |
- * |
- * <pre> |
- * constructorName: |
- * type ('.' identifier)? |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ConstructorName extends ASTNode { |
- |
- /** |
- * The name of the type defining the constructor. |
- */ |
- TypeName _type; |
- |
- /** |
- * The token for the period before the constructor name, or `null` if the specified |
- * constructor is the unnamed constructor. |
- */ |
- Token period; |
- |
- /** |
- * The name of the constructor, or `null` if the specified constructor is the unnamed |
- * constructor. |
- */ |
- SimpleIdentifier _name; |
- |
- /** |
- * The element associated with this constructor name based on static type information, or |
- * `null` if the AST structure has not been resolved or if this constructor name could not |
- * be resolved. |
- */ |
- ConstructorElement _staticElement; |
- |
- /** |
- * Initialize a newly created constructor name. |
- * |
- * @param type the name of the type defining the constructor |
- * @param period the token for the period before the constructor name |
- * @param name the name of the constructor |
- */ |
- ConstructorName.full(TypeName type, Token period, SimpleIdentifier name) { |
- this._type = becomeParentOf(type); |
- this.period = period; |
- this._name = becomeParentOf(name); |
- } |
- |
- /** |
- * Initialize a newly created constructor name. |
- * |
- * @param type the name of the type defining the constructor |
- * @param period the token for the period before the constructor name |
- * @param name the name of the constructor |
- */ |
- ConstructorName({TypeName type, Token period, SimpleIdentifier name}) : this.full(type, period, name); |
- accept(ASTVisitor visitor) => visitor.visitConstructorName(this); |
- Token get beginToken => _type.beginToken; |
- Token get endToken { |
- if (_name != null) { |
- return _name.endToken; |
- } |
- return _type.endToken; |
- } |
- |
- /** |
- * Return the name of the constructor, or `null` if the specified constructor is the unnamed |
- * constructor. |
- * |
- * @return the name of the constructor |
- */ |
- SimpleIdentifier get name => _name; |
- |
- /** |
- * Return the element associated with this constructor name based on static type information, or |
- * `null` if the AST structure has not been resolved or if this constructor name could not |
- * be resolved. |
- * |
- * @return the element associated with this constructor name |
- */ |
- ConstructorElement get staticElement => _staticElement; |
- |
- /** |
- * Return the name of the type defining the constructor. |
- * |
- * @return the name of the type defining the constructor |
- */ |
- TypeName get type => _type; |
- |
- /** |
- * Set the name of the constructor to the given name. |
- * |
- * @param name the name of the constructor |
- */ |
- void set name(SimpleIdentifier name) { |
- this._name = becomeParentOf(name); |
- } |
- |
- /** |
- * Set the element associated with this constructor name based on static type information to the |
- * given element. |
- * |
- * @param element the element to be associated with this constructor name |
- */ |
- void set staticElement(ConstructorElement element) { |
- _staticElement = element; |
- } |
- |
- /** |
- * Set the name of the type defining the constructor to the given type name. |
- * |
- * @param type the name of the type defining the constructor |
- */ |
- void set type(TypeName type) { |
- this._type = becomeParentOf(type); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_type, visitor); |
- safelyVisitChild(_name, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ContinueStatement` represent a continue statement. |
- * |
- * <pre> |
- * continueStatement ::= |
- * 'continue' [SimpleIdentifier]? ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ContinueStatement extends Statement { |
- |
- /** |
- * The token representing the 'continue' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The label associated with the statement, or `null` if there is no label. |
- */ |
- SimpleIdentifier _label; |
- |
- /** |
- * The semicolon terminating the statement. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created continue statement. |
- * |
- * @param keyword the token representing the 'continue' keyword |
- * @param label the label associated with the statement |
- * @param semicolon the semicolon terminating the statement |
- */ |
- ContinueStatement.full(Token keyword, SimpleIdentifier label, Token semicolon) { |
- this.keyword = keyword; |
- this._label = becomeParentOf(label); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created continue statement. |
- * |
- * @param keyword the token representing the 'continue' keyword |
- * @param label the label associated with the statement |
- * @param semicolon the semicolon terminating the statement |
- */ |
- ContinueStatement({Token keyword, SimpleIdentifier label, Token semicolon}) : this.full(keyword, label, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitContinueStatement(this); |
- Token get beginToken => keyword; |
- Token get endToken => semicolon; |
- |
- /** |
- * Return the label associated with the statement, or `null` if there is no label. |
- * |
- * @return the label associated with the statement |
- */ |
- SimpleIdentifier get label => _label; |
- |
- /** |
- * Set the label associated with the statement to the given label. |
- * |
- * @param identifier the label associated with the statement |
- */ |
- void set label(SimpleIdentifier identifier) { |
- _label = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_label, visitor); |
- } |
-} |
-/** |
- * The abstract class `Declaration` defines the behavior common to nodes that represent the |
- * declaration of a name. Each declared name is visible within a name scope. |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class Declaration extends AnnotatedNode { |
- |
- /** |
- * Initialize a newly created declaration. |
- * |
- * @param comment the documentation comment associated with this declaration |
- * @param metadata the annotations associated with this declaration |
- */ |
- Declaration.full(Comment comment, List<Annotation> metadata) : super.full(comment, metadata); |
- |
- /** |
- * Initialize a newly created declaration. |
- * |
- * @param comment the documentation comment associated with this declaration |
- * @param metadata the annotations associated with this declaration |
- */ |
- Declaration({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata); |
- |
- /** |
- * 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. |
- * |
- * @return the element associated with this declaration |
- */ |
- Element get element; |
-} |
-/** |
- * Instances of the class `DeclaredIdentifier` represent the declaration of a single |
- * identifier. |
- * |
- * <pre> |
- * declaredIdentifier ::= |
- * ([Annotation] finalConstVarOrType [SimpleIdentifier] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class DeclaredIdentifier extends Declaration { |
- |
- /** |
- * The token representing either the 'final', 'const' or 'var' keyword, or `null` if no |
- * keyword was used. |
- */ |
- Token keyword; |
- |
- /** |
- * The name of the declared type of the parameter, or `null` if the parameter does not have |
- * a declared type. |
- */ |
- TypeName _type; |
- |
- /** |
- * The name of the variable being declared. |
- */ |
- SimpleIdentifier identifier; |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param keyword the token representing either the 'final', 'const' or 'var' keyword |
- * @param type the name of the declared type of the parameter |
- * @param identifier the name of the parameter being declared |
- */ |
- DeclaredIdentifier.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier) : super.full(comment, metadata) { |
- this.keyword = keyword; |
- this._type = becomeParentOf(type); |
- this.identifier = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param keyword the token representing either the 'final', 'const' or 'var' keyword |
- * @param type the name of the declared type of the parameter |
- * @param identifier the name of the parameter being declared |
- */ |
- DeclaredIdentifier({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier}) : this.full(comment, metadata, keyword, type, identifier); |
- accept(ASTVisitor visitor) => visitor.visitDeclaredIdentifier(this); |
- LocalVariableElement get element { |
- SimpleIdentifier identifier = this.identifier; |
- if (identifier == null) { |
- return null; |
- } |
- return identifier.staticElement as LocalVariableElement; |
- } |
- Token get endToken => identifier.endToken; |
- |
- /** |
- * Return the name of the declared type of the parameter, or `null` if the parameter does |
- * not have a declared type. |
- * |
- * @return the name of the declared type of the parameter |
- */ |
- TypeName get type => _type; |
- |
- /** |
- * Return `true` if this variable was declared with the 'const' modifier. |
- * |
- * @return `true` if this variable was declared with the 'const' modifier |
- */ |
- bool get isConst => (keyword is KeywordToken) && identical(((keyword as KeywordToken)).keyword, Keyword.CONST); |
- |
- /** |
- * 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. |
- * |
- * @return `true` if this variable was declared with the 'final' modifier |
- */ |
- bool get isFinal => (keyword is KeywordToken) && identical(((keyword as KeywordToken)).keyword, Keyword.FINAL); |
- |
- /** |
- * Set the name of the declared type of the parameter to the given type name. |
- * |
- * @param typeName the name of the declared type of the parameter |
- */ |
- void set type(TypeName typeName) { |
- _type = becomeParentOf(typeName); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_type, visitor); |
- safelyVisitChild(identifier, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata { |
- if (keyword != null) { |
- return keyword; |
- } else if (_type != null) { |
- return _type.beginToken; |
- } |
- return identifier.beginToken; |
- } |
-} |
-/** |
- * Instances of the class `DefaultFormalParameter` represent 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. |
- * |
- * <pre> |
- * defaultFormalParameter ::= |
- * [NormalFormalParameter] ('=' [Expression])? |
- * |
- * defaultNamedParameter ::= |
- * [NormalFormalParameter] (':' [Expression])? |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class DefaultFormalParameter extends FormalParameter { |
- |
- /** |
- * The formal parameter with which the default value is associated. |
- */ |
- NormalFormalParameter _parameter; |
- |
- /** |
- * The kind of this parameter. |
- */ |
- ParameterKind _kind; |
- |
- /** |
- * The token separating the parameter from the default value, or `null` if there is no |
- * default value. |
- */ |
- Token separator; |
- |
- /** |
- * The expression computing the default value for the parameter, or `null` if there is no |
- * default value. |
- */ |
- Expression _defaultValue; |
- |
- /** |
- * Initialize a newly created default formal parameter. |
- * |
- * @param parameter the formal parameter with which the default value is associated |
- * @param kind the kind of this parameter |
- * @param separator the token separating the parameter from the default value |
- * @param defaultValue the expression computing the default value for the parameter |
- */ |
- DefaultFormalParameter.full(NormalFormalParameter parameter, ParameterKind kind, Token separator, Expression defaultValue) { |
- this._parameter = becomeParentOf(parameter); |
- this._kind = kind; |
- this.separator = separator; |
- this._defaultValue = becomeParentOf(defaultValue); |
- } |
- |
- /** |
- * Initialize a newly created default formal parameter. |
- * |
- * @param parameter the formal parameter with which the default value is associated |
- * @param kind the kind of this parameter |
- * @param separator the token separating the parameter from the default value |
- * @param defaultValue the expression computing the default value for the parameter |
- */ |
- DefaultFormalParameter({NormalFormalParameter parameter, ParameterKind kind, Token separator, Expression defaultValue}) : this.full(parameter, kind, separator, defaultValue); |
- accept(ASTVisitor visitor) => visitor.visitDefaultFormalParameter(this); |
- Token get beginToken => _parameter.beginToken; |
- |
- /** |
- * Return the expression computing the default value for the parameter, or `null` if there |
- * is no default value. |
- * |
- * @return the expression computing the default value for the parameter |
- */ |
- Expression get defaultValue => _defaultValue; |
- Token get endToken { |
- if (_defaultValue != null) { |
- return _defaultValue.endToken; |
- } |
- return _parameter.endToken; |
- } |
- SimpleIdentifier get identifier => _parameter.identifier; |
- ParameterKind get kind => _kind; |
- |
- /** |
- * Return the formal parameter with which the default value is associated. |
- * |
- * @return the formal parameter with which the default value is associated |
- */ |
- NormalFormalParameter get parameter => _parameter; |
- bool get isConst => _parameter != null && _parameter.isConst; |
- bool get isFinal => _parameter != null && _parameter.isFinal; |
- |
- /** |
- * Set the expression computing the default value for the parameter to the given expression. |
- * |
- * @param expression the expression computing the default value for the parameter |
- */ |
- void set defaultValue(Expression expression) { |
- _defaultValue = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the kind of this parameter to the given kind. |
- * |
- * @param kind the kind of this parameter |
- */ |
- void set kind(ParameterKind kind) { |
- this._kind = kind; |
- } |
- |
- /** |
- * Set the formal parameter with which the default value is associated to the given parameter. |
- * |
- * @param formalParameter the formal parameter with which the default value is associated |
- */ |
- void set parameter(NormalFormalParameter formalParameter) { |
- _parameter = becomeParentOf(formalParameter); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_parameter, visitor); |
- safelyVisitChild(_defaultValue, visitor); |
- } |
-} |
-/** |
- * The abstract class `Directive` defines the behavior common to nodes that represent a |
- * directive. |
- * |
- * <pre> |
- * directive ::= |
- * [ExportDirective] |
- * | [ImportDirective] |
- * | [LibraryDirective] |
- * | [PartDirective] |
- * | [PartOfDirective] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class Directive extends AnnotatedNode { |
- |
- /** |
- * 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 _element; |
- |
- /** |
- * Initialize a newly create directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- */ |
- Directive.full(Comment comment, List<Annotation> metadata) : super.full(comment, metadata); |
- |
- /** |
- * Initialize a newly create directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- */ |
- Directive({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata); |
- |
- /** |
- * 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. Examples of the latter case include a |
- * directive that contains an invalid URL or a URL that does not exist. |
- * |
- * @return the element associated with this directive |
- */ |
- Element get element => _element; |
- |
- /** |
- * Return the token representing the keyword that introduces this directive ('import', 'export', |
- * 'library' or 'part'). |
- * |
- * @return the token representing the keyword that introduces this directive |
- */ |
- Token get keyword; |
- |
- /** |
- * Set the element associated with this directive to the given element. |
- * |
- * @param element the element associated with this directive |
- */ |
- void set element(Element element) { |
- this._element = element; |
- } |
-} |
-/** |
- * Instances of the class `DoStatement` represent a do statement. |
- * |
- * <pre> |
- * doStatement ::= |
- * 'do' [Statement] 'while' '(' [Expression] ')' ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class DoStatement extends Statement { |
- |
- /** |
- * The token representing the 'do' keyword. |
- */ |
- Token doKeyword; |
- |
- /** |
- * The body of the loop. |
- */ |
- Statement _body; |
- |
- /** |
- * The token representing the 'while' keyword. |
- */ |
- Token whileKeyword; |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token _leftParenthesis; |
- |
- /** |
- * The condition that determines when the loop will terminate. |
- */ |
- Expression _condition; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token _rightParenthesis; |
- |
- /** |
- * The semicolon terminating the statement. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created do loop. |
- * |
- * @param doKeyword the token representing the 'do' keyword |
- * @param body the body of the loop |
- * @param whileKeyword the token representing the 'while' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param condition the condition that determines when the loop will terminate |
- * @param rightParenthesis the right parenthesis |
- * @param semicolon the semicolon terminating the statement |
- */ |
- DoStatement.full(Token doKeyword, Statement body, Token whileKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Token semicolon) { |
- this.doKeyword = doKeyword; |
- this._body = becomeParentOf(body); |
- this.whileKeyword = whileKeyword; |
- this._leftParenthesis = leftParenthesis; |
- this._condition = becomeParentOf(condition); |
- this._rightParenthesis = rightParenthesis; |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created do loop. |
- * |
- * @param doKeyword the token representing the 'do' keyword |
- * @param body the body of the loop |
- * @param whileKeyword the token representing the 'while' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param condition the condition that determines when the loop will terminate |
- * @param rightParenthesis the right parenthesis |
- * @param semicolon the semicolon terminating the statement |
- */ |
- DoStatement({Token doKeyword, Statement body, Token whileKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Token semicolon}) : this.full(doKeyword, body, whileKeyword, leftParenthesis, condition, rightParenthesis, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitDoStatement(this); |
- Token get beginToken => doKeyword; |
- |
- /** |
- * Return the body of the loop. |
- * |
- * @return the body of the loop |
- */ |
- Statement get body => _body; |
- |
- /** |
- * Return the condition that determines when the loop will terminate. |
- * |
- * @return the condition that determines when the loop will terminate |
- */ |
- Expression get condition => _condition; |
- Token get endToken => semicolon; |
- |
- /** |
- * Return the left parenthesis. |
- * |
- * @return the left parenthesis |
- */ |
- Token get leftParenthesis => _leftParenthesis; |
- |
- /** |
- * Return the right parenthesis. |
- * |
- * @return the right parenthesis |
- */ |
- Token get rightParenthesis => _rightParenthesis; |
- |
- /** |
- * Set the body of the loop to the given statement. |
- * |
- * @param statement the body of the loop |
- */ |
- void set body(Statement statement) { |
- _body = becomeParentOf(statement); |
- } |
- |
- /** |
- * Set the condition that determines when the loop will terminate to the given expression. |
- * |
- * @param expression the condition that determines when the loop will terminate |
- */ |
- void set condition(Expression expression) { |
- _condition = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the left parenthesis to the given token. |
- * |
- * @param parenthesis the left parenthesis |
- */ |
- void set leftParenthesis(Token parenthesis) { |
- _leftParenthesis = parenthesis; |
- } |
- |
- /** |
- * Set the right parenthesis to the given token. |
- * |
- * @param parenthesis the right parenthesis |
- */ |
- void set rightParenthesis(Token parenthesis) { |
- _rightParenthesis = parenthesis; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_body, visitor); |
- safelyVisitChild(_condition, visitor); |
- } |
-} |
-/** |
- * Instances of the class `DoubleLiteral` represent a floating point literal expression. |
- * |
- * <pre> |
- * doubleLiteral ::= |
- * decimalDigit+ ('.' decimalDigit*)? exponent? |
- * | '.' decimalDigit+ exponent? |
- * |
- * exponent ::= |
- * ('e' | 'E') ('+' | '-')? decimalDigit+ |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class DoubleLiteral extends Literal { |
- |
- /** |
- * The token representing the literal. |
- */ |
- Token literal; |
- |
- /** |
- * The value of the literal. |
- */ |
- double value = 0.0; |
- |
- /** |
- * Initialize a newly created floating point literal. |
- * |
- * @param literal the token representing the literal |
- * @param value the value of the literal |
- */ |
- DoubleLiteral.full(Token literal, double value) { |
- this.literal = literal; |
- this.value = value; |
- } |
- |
- /** |
- * Initialize a newly created floating point literal. |
- * |
- * @param literal the token representing the literal |
- * @param value the value of the literal |
- */ |
- DoubleLiteral({Token literal, double value}) : this.full(literal, value); |
- accept(ASTVisitor visitor) => visitor.visitDoubleLiteral(this); |
- Token get beginToken => literal; |
- Token get endToken => literal; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `EmptyFunctionBody` represent an empty function body, which can only |
- * appear in constructors or abstract methods. |
- * |
- * <pre> |
- * emptyFunctionBody ::= |
- * ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class EmptyFunctionBody extends FunctionBody { |
- |
- /** |
- * The token representing the semicolon that marks the end of the function body. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created function body. |
- * |
- * @param semicolon the token representing the semicolon that marks the end of the function body |
- */ |
- EmptyFunctionBody.full(Token semicolon) { |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created function body. |
- * |
- * @param semicolon the token representing the semicolon that marks the end of the function body |
- */ |
- EmptyFunctionBody({Token semicolon}) : this.full(semicolon); |
- accept(ASTVisitor visitor) => visitor.visitEmptyFunctionBody(this); |
- Token get beginToken => semicolon; |
- Token get endToken => semicolon; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `EmptyStatement` represent an empty statement. |
- * |
- * <pre> |
- * emptyStatement ::= |
- * ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class EmptyStatement extends Statement { |
- |
- /** |
- * The semicolon terminating the statement. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created empty statement. |
- * |
- * @param semicolon the semicolon terminating the statement |
- */ |
- EmptyStatement.full(Token semicolon) { |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created empty statement. |
- * |
- * @param semicolon the semicolon terminating the statement |
- */ |
- EmptyStatement({Token semicolon}) : this.full(semicolon); |
- accept(ASTVisitor visitor) => visitor.visitEmptyStatement(this); |
- Token get beginToken => semicolon; |
- Token get endToken => semicolon; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Ephemeral identifiers are created as needed to mimic the presence of an empty identifier. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class EphemeralIdentifier extends SimpleIdentifier { |
- EphemeralIdentifier.full(ASTNode parent, int location) : super.full(new Token(TokenType.IDENTIFIER, location)) { |
- parent.becomeParentOf(this); |
- } |
- EphemeralIdentifier({ASTNode parent, int location}) : this.full(parent, location); |
-} |
-/** |
- * Instances of the class `ExportDirective` represent an export directive. |
- * |
- * <pre> |
- * exportDirective ::= |
- * [Annotation] 'export' [StringLiteral] [Combinator]* ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ExportDirective extends NamespaceDirective { |
- |
- /** |
- * Initialize a newly created export directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param keyword the token representing the 'export' keyword |
- * @param libraryUri the URI of the library being exported |
- * @param combinators the combinators used to control which names are exported |
- * @param semicolon the semicolon terminating the directive |
- */ |
- ExportDirective.full(Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon) : super.full(comment, metadata, keyword, libraryUri, combinators, semicolon); |
- |
- /** |
- * Initialize a newly created export directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param keyword the token representing the 'export' keyword |
- * @param libraryUri the URI of the library being exported |
- * @param combinators the combinators used to control which names are exported |
- * @param semicolon the semicolon terminating the directive |
- */ |
- ExportDirective({Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon}) : this.full(comment, metadata, keyword, libraryUri, combinators, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitExportDirective(this); |
- LibraryElement get uriElement { |
- Element element = this.element; |
- if (element is ExportElement) { |
- return ((element as ExportElement)).exportedLibrary; |
- } |
- return null; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- combinators.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `Expression` defines the behavior common to nodes that represent an |
- * expression. |
- * |
- * <pre> |
- * expression ::= |
- * [AssignmentExpression] |
- * | [ConditionalExpression] cascadeSection* |
- * | [ThrowExpression] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class Expression extends ASTNode { |
- |
- /** |
- * The static type of this expression, or `null` if the AST structure has not been resolved. |
- */ |
- Type2 staticType; |
- |
- /** |
- * The propagated type of this expression, or `null` if type propagation has not been |
- * performed on the AST structure. |
- */ |
- Type2 propagatedType; |
- |
- /** |
- * Return the best parameter element information available for this expression. If type |
- * propagation was able to find a better parameter element than static analysis, that type will be |
- * returned. Otherwise, the result of static analysis will be returned. |
- * |
- * @return the parameter element representing the parameter to which the value of this expression |
- * will be bound |
- */ |
- ParameterElement get bestParameterElement { |
- ParameterElement propagatedElement = propagatedParameterElement; |
- if (propagatedElement != null) { |
- return propagatedElement; |
- } |
- return staticParameterElement; |
- } |
- |
- /** |
- * Return the best type information available for this expression. If type propagation was able to |
- * find a better type than static analysis, that type will be returned. Otherwise, the result of |
- * static analysis will be returned. If no type analysis has been performed, then the type |
- * 'dynamic' will be returned. |
- * |
- * @return the best type information available for this expression |
- */ |
- Type2 get bestType { |
- if (propagatedType != null) { |
- return propagatedType; |
- } else if (staticType != null) { |
- return staticType; |
- } |
- return DynamicTypeImpl.instance; |
- } |
- |
- /** |
- * 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 propagated 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`. |
- * |
- * @return the parameter element representing the parameter to which the value of this expression |
- * will be bound |
- */ |
- ParameterElement get propagatedParameterElement { |
- ASTNode parent = this.parent; |
- if (parent is ArgumentList) { |
- return ((parent as ArgumentList)).getPropagatedParameterElementFor(this); |
- } else if (parent is IndexExpression) { |
- IndexExpression indexExpression = parent as IndexExpression; |
- if (identical(indexExpression.index, this)) { |
- return indexExpression.propagatedParameterElementForIndex; |
- } |
- } else if (parent is BinaryExpression) { |
- BinaryExpression binaryExpression = parent as BinaryExpression; |
- if (identical(binaryExpression.rightOperand, this)) { |
- return binaryExpression.propagatedParameterElementForRightOperand; |
- } |
- } else if (parent is AssignmentExpression) { |
- AssignmentExpression assignmentExpression = parent as AssignmentExpression; |
- if (identical(assignmentExpression.rightHandSide, this)) { |
- return assignmentExpression.propagatedParameterElementForRightHandSide; |
- } |
- } else if (parent is PrefixExpression) { |
- return ((parent as PrefixExpression)).propagatedParameterElementForOperand; |
- } else if (parent is PostfixExpression) { |
- return ((parent as PostfixExpression)).propagatedParameterElementForOperand; |
- } |
- return null; |
- } |
- |
- /** |
- * 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`. |
- * |
- * @return the parameter element representing the parameter to which the value of this expression |
- * will be bound |
- */ |
- ParameterElement get staticParameterElement { |
- ASTNode parent = this.parent; |
- if (parent is ArgumentList) { |
- return ((parent as ArgumentList)).getStaticParameterElementFor(this); |
- } else if (parent is IndexExpression) { |
- IndexExpression indexExpression = parent as IndexExpression; |
- if (identical(indexExpression.index, this)) { |
- return indexExpression.staticParameterElementForIndex; |
- } |
- } else if (parent is BinaryExpression) { |
- BinaryExpression binaryExpression = parent as BinaryExpression; |
- if (identical(binaryExpression.rightOperand, this)) { |
- return binaryExpression.staticParameterElementForRightOperand; |
- } |
- } else if (parent is AssignmentExpression) { |
- AssignmentExpression assignmentExpression = parent as AssignmentExpression; |
- if (identical(assignmentExpression.rightHandSide, this)) { |
- return assignmentExpression.staticParameterElementForRightHandSide; |
- } |
- } else if (parent is PrefixExpression) { |
- return ((parent as PrefixExpression)).staticParameterElementForOperand; |
- } else if (parent is PostfixExpression) { |
- return ((parent as PostfixExpression)).staticParameterElementForOperand; |
- } |
- return null; |
- } |
- |
- /** |
- * Return `true` if this expression is syntactically valid for the LHS of an |
- * [AssignmentExpression]. |
- * |
- * @return `true` if this expression matches the `assignableExpression` production |
- */ |
- bool get isAssignable => false; |
-} |
-/** |
- * Instances of the class `ExpressionFunctionBody` represent a function body consisting of a |
- * single expression. |
- * |
- * <pre> |
- * expressionFunctionBody ::= |
- * '=>' [Expression] ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ExpressionFunctionBody extends FunctionBody { |
- |
- /** |
- * The token introducing the expression that represents the body of the function. |
- */ |
- Token functionDefinition; |
- |
- /** |
- * The expression representing the body of the function. |
- */ |
- Expression _expression; |
- |
- /** |
- * The semicolon terminating the statement. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created function body consisting of a block of statements. |
- * |
- * @param functionDefinition the token introducing the expression that represents the body of the |
- * function |
- * @param expression the expression representing the body of the function |
- * @param semicolon the semicolon terminating the statement |
- */ |
- ExpressionFunctionBody.full(Token functionDefinition, Expression expression, Token semicolon) { |
- this.functionDefinition = functionDefinition; |
- this._expression = becomeParentOf(expression); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created function body consisting of a block of statements. |
- * |
- * @param functionDefinition the token introducing the expression that represents the body of the |
- * function |
- * @param expression the expression representing the body of the function |
- * @param semicolon the semicolon terminating the statement |
- */ |
- ExpressionFunctionBody({Token functionDefinition, Expression expression, Token semicolon}) : this.full(functionDefinition, expression, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitExpressionFunctionBody(this); |
- Token get beginToken => functionDefinition; |
- Token get endToken { |
- if (semicolon != null) { |
- return semicolon; |
- } |
- return _expression.endToken; |
- } |
- |
- /** |
- * Return the expression representing the body of the function. |
- * |
- * @return the expression representing the body of the function |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Set the expression representing the body of the function to the given expression. |
- * |
- * @param expression the expression representing the body of the function |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_expression, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ExpressionStatement` wrap an expression as a statement. |
- * |
- * <pre> |
- * expressionStatement ::= |
- * [Expression]? ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ExpressionStatement extends Statement { |
- |
- /** |
- * The expression that comprises the statement. |
- */ |
- Expression _expression; |
- |
- /** |
- * The semicolon terminating the statement, or `null` if the expression is a function |
- * expression and therefore isn't followed by a semicolon. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created expression statement. |
- * |
- * @param expression the expression that comprises the statement |
- * @param semicolon the semicolon terminating the statement |
- */ |
- ExpressionStatement.full(Expression expression, Token semicolon) { |
- this._expression = becomeParentOf(expression); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created expression statement. |
- * |
- * @param expression the expression that comprises the statement |
- * @param semicolon the semicolon terminating the statement |
- */ |
- ExpressionStatement({Expression expression, Token semicolon}) : this.full(expression, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitExpressionStatement(this); |
- Token get beginToken => _expression.beginToken; |
- Token get endToken { |
- if (semicolon != null) { |
- return semicolon; |
- } |
- return _expression.endToken; |
- } |
- |
- /** |
- * Return the expression that comprises the statement. |
- * |
- * @return the expression that comprises the statement |
- */ |
- Expression get expression => _expression; |
- bool get isSynthetic => _expression.isSynthetic && semicolon.isSynthetic; |
- |
- /** |
- * Set the expression that comprises the statement to the given expression. |
- * |
- * @param expression the expression that comprises the statement |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_expression, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ExtendsClause` represent the "extends" clause in a class |
- * declaration. |
- * |
- * <pre> |
- * extendsClause ::= |
- * 'extends' [TypeName] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ExtendsClause extends ASTNode { |
- |
- /** |
- * The token representing the 'extends' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The name of the class that is being extended. |
- */ |
- TypeName _superclass; |
- |
- /** |
- * Initialize a newly created extends clause. |
- * |
- * @param keyword the token representing the 'extends' keyword |
- * @param superclass the name of the class that is being extended |
- */ |
- ExtendsClause.full(Token keyword, TypeName superclass) { |
- this.keyword = keyword; |
- this._superclass = becomeParentOf(superclass); |
- } |
- |
- /** |
- * Initialize a newly created extends clause. |
- * |
- * @param keyword the token representing the 'extends' keyword |
- * @param superclass the name of the class that is being extended |
- */ |
- ExtendsClause({Token keyword, TypeName superclass}) : this.full(keyword, superclass); |
- accept(ASTVisitor visitor) => visitor.visitExtendsClause(this); |
- Token get beginToken => keyword; |
- Token get endToken => _superclass.endToken; |
- |
- /** |
- * Return the name of the class that is being extended. |
- * |
- * @return the name of the class that is being extended |
- */ |
- TypeName get superclass => _superclass; |
- |
- /** |
- * Set the name of the class that is being extended to the given name. |
- * |
- * @param name the name of the class that is being extended |
- */ |
- void set superclass(TypeName name) { |
- _superclass = becomeParentOf(name); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_superclass, visitor); |
- } |
-} |
-/** |
- * Instances of the class `FieldDeclaration` represent the declaration of one or more fields |
- * of the same type. |
- * |
- * <pre> |
- * fieldDeclaration ::= |
- * 'static'? [VariableDeclarationList] ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class FieldDeclaration extends ClassMember { |
- |
- /** |
- * The token representing the 'static' keyword, or `null` if the fields are not static. |
- */ |
- Token staticKeyword; |
- |
- /** |
- * The fields being declared. |
- */ |
- VariableDeclarationList _fieldList; |
- |
- /** |
- * The semicolon terminating the declaration. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created field declaration. |
- * |
- * @param comment the documentation comment associated with this field |
- * @param metadata the annotations associated with this field |
- * @param staticKeyword the token representing the 'static' keyword |
- * @param fieldList the fields being declared |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- FieldDeclaration.full(Comment comment, List<Annotation> metadata, Token staticKeyword, VariableDeclarationList fieldList, Token semicolon) : super.full(comment, metadata) { |
- this.staticKeyword = staticKeyword; |
- this._fieldList = becomeParentOf(fieldList); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created field declaration. |
- * |
- * @param comment the documentation comment associated with this field |
- * @param metadata the annotations associated with this field |
- * @param staticKeyword the token representing the 'static' keyword |
- * @param fieldList the fields being declared |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- FieldDeclaration({Comment comment, List<Annotation> metadata, Token staticKeyword, VariableDeclarationList fieldList, Token semicolon}) : this.full(comment, metadata, staticKeyword, fieldList, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitFieldDeclaration(this); |
- Element get element => null; |
- Token get endToken => semicolon; |
- |
- /** |
- * Return the fields being declared. |
- * |
- * @return the fields being declared |
- */ |
- VariableDeclarationList get fields => _fieldList; |
- |
- /** |
- * Return `true` if the fields are static. |
- * |
- * @return `true` if the fields are declared to be static |
- */ |
- bool get isStatic => staticKeyword != null; |
- |
- /** |
- * Set the fields being declared to the given list of variables. |
- * |
- * @param fieldList the fields being declared |
- */ |
- void set fields(VariableDeclarationList fieldList) { |
- fieldList = becomeParentOf(fieldList); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_fieldList, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata { |
- if (staticKeyword != null) { |
- return staticKeyword; |
- } |
- return _fieldList.beginToken; |
- } |
-} |
-/** |
- * Instances of the class `FieldFormalParameter` represent a field formal parameter. |
- * |
- * <pre> |
- * fieldFormalParameter ::= |
- * ('final' [TypeName] | 'const' [TypeName] | 'var' | [TypeName])? 'this' '.' [SimpleIdentifier] [FormalParameterList]? |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class FieldFormalParameter extends NormalFormalParameter { |
- |
- /** |
- * The token representing either the 'final', 'const' or 'var' keyword, or `null` if no |
- * keyword was used. |
- */ |
- Token keyword; |
- |
- /** |
- * The name of the declared type of the parameter, or `null` if the parameter does not have |
- * a declared type. |
- */ |
- TypeName _type; |
- |
- /** |
- * The token representing the 'this' keyword. |
- */ |
- Token thisToken; |
- |
- /** |
- * The token representing the period. |
- */ |
- Token period; |
- |
- /** |
- * The parameters of the function-typed parameter, or `null` if this is not a function-typed |
- * field formal parameter. |
- */ |
- FormalParameterList _parameters; |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param keyword the token representing either the 'final', 'const' or 'var' keyword |
- * @param type the name of the declared type of the parameter |
- * @param thisToken the token representing the 'this' keyword |
- * @param period the token representing the period |
- * @param identifier the name of the parameter being declared |
- * @param parameters the parameters of the function-typed parameter, or `null` if this is |
- * not a function-typed field formal parameter |
- */ |
- FieldFormalParameter.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName type, Token thisToken, Token period, SimpleIdentifier identifier, FormalParameterList parameters) : super.full(comment, metadata, identifier) { |
- this.keyword = keyword; |
- this._type = becomeParentOf(type); |
- this.thisToken = thisToken; |
- this.period = period; |
- this._parameters = becomeParentOf(parameters); |
- } |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param keyword the token representing either the 'final', 'const' or 'var' keyword |
- * @param type the name of the declared type of the parameter |
- * @param thisToken the token representing the 'this' keyword |
- * @param period the token representing the period |
- * @param identifier the name of the parameter being declared |
- * @param parameters the parameters of the function-typed parameter, or `null` if this is |
- * not a function-typed field formal parameter |
- */ |
- FieldFormalParameter({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, Token thisToken, Token period, SimpleIdentifier identifier, FormalParameterList parameters}) : this.full(comment, metadata, keyword, type, thisToken, period, identifier, parameters); |
- accept(ASTVisitor visitor) => visitor.visitFieldFormalParameter(this); |
- Token get beginToken { |
- if (keyword != null) { |
- return keyword; |
- } else if (_type != null) { |
- return _type.beginToken; |
- } |
- return thisToken; |
- } |
- Token get endToken => identifier.endToken; |
- |
- /** |
- * Return the parameters of the function-typed parameter, or `null` if this is not a |
- * function-typed field formal parameter. |
- * |
- * @return the parameters of the function-typed parameter |
- */ |
- FormalParameterList get parameters => _parameters; |
- |
- /** |
- * Return the name of 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. |
- * |
- * @return the name of the declared type of the parameter |
- */ |
- TypeName get type => _type; |
- bool get isConst => (keyword is KeywordToken) && identical(((keyword as KeywordToken)).keyword, Keyword.CONST); |
- bool get isFinal => (keyword is KeywordToken) && identical(((keyword as KeywordToken)).keyword, Keyword.FINAL); |
- |
- /** |
- * Set the parameters of the function-typed parameter to the given parameters. |
- * |
- * @param parameters the parameters of the function-typed parameter |
- */ |
- void set parameters(FormalParameterList parameters) { |
- this._parameters = becomeParentOf(parameters); |
- } |
- |
- /** |
- * Set the name of the declared type of the parameter to the given type name. |
- * |
- * @param typeName the name of the declared type of the parameter |
- */ |
- void set type(TypeName typeName) { |
- _type = becomeParentOf(typeName); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_type, visitor); |
- safelyVisitChild(identifier, visitor); |
- safelyVisitChild(_parameters, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ForEachStatement` represent a for-each statement. |
- * |
- * <pre> |
- * forEachStatement ::= |
- * 'for' '(' [DeclaredIdentifier] 'in' [Expression] ')' [Block] |
- * | 'for' '(' [SimpleIdentifier] 'in' [Expression] ')' [Block] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ForEachStatement extends Statement { |
- |
- /** |
- * The token representing the 'for' keyword. |
- */ |
- Token forKeyword; |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token leftParenthesis; |
- |
- /** |
- * The declaration of the loop variable, or `null` if the loop variable is a simple |
- * identifier. |
- */ |
- DeclaredIdentifier _loopVariable; |
- |
- /** |
- * The loop variable, or `null` if the loop variable is declared in the 'for'. |
- */ |
- SimpleIdentifier _identifier; |
- |
- /** |
- * The token representing the 'in' keyword. |
- */ |
- Token inKeyword; |
- |
- /** |
- * The expression evaluated to produce the iterator. |
- */ |
- Expression _iterator; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token rightParenthesis; |
- |
- /** |
- * The body of the loop. |
- */ |
- Statement _body; |
- |
- /** |
- * Initialize a newly created for-each statement. |
- * |
- * @param forKeyword the token representing the 'for' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param loopVariable the declaration of the loop variable |
- * @param iterator the expression evaluated to produce the iterator |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the loop |
- */ |
- ForEachStatement.con1_full(Token forKeyword, Token leftParenthesis, DeclaredIdentifier loopVariable, Token inKeyword, Expression iterator, Token rightParenthesis, Statement body) { |
- this.forKeyword = forKeyword; |
- this.leftParenthesis = leftParenthesis; |
- this._loopVariable = becomeParentOf(loopVariable); |
- this.inKeyword = inKeyword; |
- this._iterator = becomeParentOf(iterator); |
- this.rightParenthesis = rightParenthesis; |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Initialize a newly created for-each statement. |
- * |
- * @param forKeyword the token representing the 'for' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param loopVariable the declaration of the loop variable |
- * @param iterator the expression evaluated to produce the iterator |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the loop |
- */ |
- ForEachStatement.con1({Token forKeyword, Token leftParenthesis, DeclaredIdentifier loopVariable, Token inKeyword, Expression iterator, Token rightParenthesis, Statement body}) : this.con1_full(forKeyword, leftParenthesis, loopVariable, inKeyword, iterator, rightParenthesis, body); |
- |
- /** |
- * Initialize a newly created for-each statement. |
- * |
- * @param forKeyword the token representing the 'for' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param identifier the loop variable |
- * @param iterator the expression evaluated to produce the iterator |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the loop |
- */ |
- ForEachStatement.con2_full(Token forKeyword, Token leftParenthesis, SimpleIdentifier identifier, Token inKeyword, Expression iterator, Token rightParenthesis, Statement body) { |
- this.forKeyword = forKeyword; |
- this.leftParenthesis = leftParenthesis; |
- this._identifier = becomeParentOf(identifier); |
- this.inKeyword = inKeyword; |
- this._iterator = becomeParentOf(iterator); |
- this.rightParenthesis = rightParenthesis; |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Initialize a newly created for-each statement. |
- * |
- * @param forKeyword the token representing the 'for' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param identifier the loop variable |
- * @param iterator the expression evaluated to produce the iterator |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the loop |
- */ |
- ForEachStatement.con2({Token forKeyword, Token leftParenthesis, SimpleIdentifier identifier, Token inKeyword, Expression iterator, Token rightParenthesis, Statement body}) : this.con2_full(forKeyword, leftParenthesis, identifier, inKeyword, iterator, rightParenthesis, body); |
- accept(ASTVisitor visitor) => visitor.visitForEachStatement(this); |
- Token get beginToken => forKeyword; |
- |
- /** |
- * Return the body of the loop. |
- * |
- * @return the body of the loop |
- */ |
- Statement get body => _body; |
- Token get endToken => _body.endToken; |
- |
- /** |
- * Return the loop variable, or `null` if the loop variable is declared in the 'for'. |
- * |
- * @return the loop variable |
- */ |
- SimpleIdentifier get identifier => _identifier; |
- |
- /** |
- * Return the expression evaluated to produce the iterator. |
- * |
- * @return the expression evaluated to produce the iterator |
- */ |
- Expression get iterator => _iterator; |
- |
- /** |
- * Return the declaration of the loop variable, or `null` if the loop variable is a simple |
- * identifier. |
- * |
- * @return the declaration of the loop variable |
- */ |
- DeclaredIdentifier get loopVariable => _loopVariable; |
- |
- /** |
- * Set the body of the loop to the given block. |
- * |
- * @param body the body of the loop |
- */ |
- void set body(Statement body) { |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Set the loop variable to the given variable. |
- * |
- * @param identifier the loop variable |
- */ |
- void set identifier(SimpleIdentifier identifier) { |
- this._identifier = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Set the expression evaluated to produce the iterator to the given expression. |
- * |
- * @param expression the expression evaluated to produce the iterator |
- */ |
- void set iterator(Expression expression) { |
- _iterator = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the declaration of the loop variable to the given variable. |
- * |
- * @param variable the declaration of the loop variable |
- */ |
- void set loopVariable(DeclaredIdentifier variable) { |
- _loopVariable = becomeParentOf(variable); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_loopVariable, visitor); |
- safelyVisitChild(_identifier, visitor); |
- safelyVisitChild(_iterator, visitor); |
- safelyVisitChild(_body, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ForStatement` represent a for statement. |
- * |
- * <pre> |
- * forStatement ::= |
- * 'for' '(' forLoopParts ')' [Statement] |
- * |
- * forLoopParts ::= |
- * forInitializerStatement ';' [Expression]? ';' [Expression]? |
- * |
- * forInitializerStatement ::= |
- * [DefaultFormalParameter] |
- * | [Expression]? |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ForStatement extends Statement { |
- |
- /** |
- * The token representing the 'for' keyword. |
- */ |
- Token forKeyword; |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token leftParenthesis; |
- |
- /** |
- * The declaration of the loop variables, or `null` if there are no variables. Note that a |
- * for statement cannot have both a variable list and an initialization expression, but can |
- * validly have neither. |
- */ |
- VariableDeclarationList _variableList; |
- |
- /** |
- * The initialization expression, or `null` if there is no initialization expression. Note |
- * that a for statement cannot have both a variable list and an initialization expression, but can |
- * validly have neither. |
- */ |
- Expression _initialization; |
- |
- /** |
- * The semicolon separating the initializer and the condition. |
- */ |
- Token leftSeparator; |
- |
- /** |
- * The condition used to determine when to terminate the loop, or `null` if there is no |
- * condition. |
- */ |
- Expression _condition; |
- |
- /** |
- * The semicolon separating the condition and the updater. |
- */ |
- Token rightSeparator; |
- |
- /** |
- * The list of expressions run after each execution of the loop body. |
- */ |
- NodeList<Expression> updaters; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token rightParenthesis; |
- |
- /** |
- * The body of the loop. |
- */ |
- Statement _body; |
- |
- /** |
- * Initialize a newly created for statement. |
- * |
- * @param forKeyword the token representing the 'for' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param variableList the declaration of the loop variables |
- * @param initialization the initialization expression |
- * @param leftSeparator the semicolon separating the initializer and the condition |
- * @param condition the condition used to determine when to terminate the loop |
- * @param rightSeparator the semicolon separating the condition and the updater |
- * @param updaters the list of expressions run after each execution of the loop body |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the loop |
- */ |
- ForStatement.full(Token forKeyword, Token leftParenthesis, VariableDeclarationList variableList, Expression initialization, Token leftSeparator, Expression condition, Token rightSeparator, List<Expression> updaters, Token rightParenthesis, Statement body) { |
- this.updaters = new NodeList<Expression>(this); |
- this.forKeyword = forKeyword; |
- this.leftParenthesis = leftParenthesis; |
- this._variableList = becomeParentOf(variableList); |
- this._initialization = becomeParentOf(initialization); |
- this.leftSeparator = leftSeparator; |
- this._condition = becomeParentOf(condition); |
- this.rightSeparator = rightSeparator; |
- this.updaters.addAll(updaters); |
- this.rightParenthesis = rightParenthesis; |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Initialize a newly created for statement. |
- * |
- * @param forKeyword the token representing the 'for' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param variableList the declaration of the loop variables |
- * @param initialization the initialization expression |
- * @param leftSeparator the semicolon separating the initializer and the condition |
- * @param condition the condition used to determine when to terminate the loop |
- * @param rightSeparator the semicolon separating the condition and the updater |
- * @param updaters the list of expressions run after each execution of the loop body |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the loop |
- */ |
- ForStatement({Token forKeyword, Token leftParenthesis, VariableDeclarationList variableList, Expression initialization, Token leftSeparator, Expression condition, Token rightSeparator, List<Expression> updaters, Token rightParenthesis, Statement body}) : this.full(forKeyword, leftParenthesis, variableList, initialization, leftSeparator, condition, rightSeparator, updaters, rightParenthesis, body); |
- accept(ASTVisitor visitor) => visitor.visitForStatement(this); |
- Token get beginToken => forKeyword; |
- |
- /** |
- * Return the body of the loop. |
- * |
- * @return the body of the loop |
- */ |
- Statement get body => _body; |
- |
- /** |
- * Return the condition used to determine when to terminate the loop, or `null` if there is |
- * no condition. |
- * |
- * @return the condition used to determine when to terminate the loop |
- */ |
- Expression get condition => _condition; |
- Token get endToken => _body.endToken; |
- |
- /** |
- * Return the initialization expression, or `null` if there is no initialization expression. |
- * |
- * @return the initialization expression |
- */ |
- Expression get initialization => _initialization; |
- |
- /** |
- * Return the declaration of the loop variables, or `null` if there are no variables. |
- * |
- * @return the declaration of the loop variables, or `null` if there are no variables |
- */ |
- VariableDeclarationList get variables => _variableList; |
- |
- /** |
- * Set the body of the loop to the given statement. |
- * |
- * @param body the body of the loop |
- */ |
- void set body(Statement body) { |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Set the condition used to determine when to terminate the loop to the given expression. |
- * |
- * @param expression the condition used to determine when to terminate the loop |
- */ |
- void set condition(Expression expression) { |
- _condition = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the initialization expression to the given expression. |
- * |
- * @param initialization the initialization expression |
- */ |
- void set initialization(Expression initialization) { |
- this._initialization = becomeParentOf(initialization); |
- } |
- |
- /** |
- * Set the declaration of the loop variables to the given parameter. |
- * |
- * @param variableList the declaration of the loop variables |
- */ |
- void set variables(VariableDeclarationList variableList) { |
- variableList = becomeParentOf(variableList); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_variableList, visitor); |
- safelyVisitChild(_initialization, visitor); |
- safelyVisitChild(_condition, visitor); |
- updaters.accept(visitor); |
- safelyVisitChild(_body, visitor); |
- } |
-} |
-/** |
- * The abstract class `FormalParameter` defines the behavior of objects representing a |
- * parameter to a function. |
- * |
- * <pre> |
- * formalParameter ::= |
- * [NormalFormalParameter] |
- * | [DefaultFormalParameter] |
- * | [DefaultFormalParameter] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class FormalParameter extends ASTNode { |
- |
- /** |
- * Return the element representing this parameter, or `null` if this parameter has not been |
- * resolved. |
- * |
- * @return the element representing this parameter |
- */ |
- ParameterElement get element { |
- SimpleIdentifier identifier = this.identifier; |
- if (identifier == null) { |
- return null; |
- } |
- return identifier.staticElement as ParameterElement; |
- } |
- |
- /** |
- * Return the name of the parameter being declared. |
- * |
- * @return the name of the parameter being declared |
- */ |
- SimpleIdentifier get identifier; |
- |
- /** |
- * Return the kind of this parameter. |
- * |
- * @return the kind of this parameter |
- */ |
- ParameterKind get kind; |
- |
- /** |
- * Return `true` if this parameter was declared with the 'const' modifier. |
- * |
- * @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. |
- * |
- * @return `true` if this parameter was declared with the 'final' modifier |
- */ |
- bool get isFinal; |
-} |
-/** |
- * Instances of the class `FormalParameterList` represent 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. |
- * |
- * <pre> |
- * formalParameterList ::= |
- * '(' ')' |
- * | '(' normalFormalParameters (',' optionalFormalParameters)? ')' |
- * | '(' optionalFormalParameters ')' |
- * |
- * normalFormalParameters ::= |
- * [NormalFormalParameter] (',' [NormalFormalParameter])* |
- * |
- * optionalFormalParameters ::= |
- * optionalPositionalFormalParameters |
- * | namedFormalParameters |
- * |
- * optionalPositionalFormalParameters ::= |
- * '[' [DefaultFormalParameter] (',' [DefaultFormalParameter])* ']' |
- * |
- * namedFormalParameters ::= |
- * '{' [DefaultFormalParameter] (',' [DefaultFormalParameter])* '}' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class FormalParameterList extends ASTNode { |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token _leftParenthesis; |
- |
- /** |
- * The parameters associated with the method. |
- */ |
- NodeList<FormalParameter> parameters; |
- |
- /** |
- * The left square bracket ('[') or left curly brace ('{') introducing the optional parameters, or |
- * `null` if there are no optional parameters. |
- */ |
- Token _leftDelimiter; |
- |
- /** |
- * The right square bracket (']') or right curly brace ('}') introducing the optional parameters, |
- * or `null` if there are no optional parameters. |
- */ |
- Token _rightDelimiter; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token _rightParenthesis; |
- |
- /** |
- * Initialize a newly created parameter list. |
- * |
- * @param leftParenthesis the left parenthesis |
- * @param parameters the parameters associated with the method |
- * @param leftDelimiter the left delimiter introducing the optional parameters |
- * @param rightDelimiter the right delimiter introducing the optional parameters |
- * @param rightParenthesis the right parenthesis |
- */ |
- FormalParameterList.full(Token leftParenthesis, List<FormalParameter> parameters, Token leftDelimiter, Token rightDelimiter, Token rightParenthesis) { |
- this.parameters = new NodeList<FormalParameter>(this); |
- this._leftParenthesis = leftParenthesis; |
- this.parameters.addAll(parameters); |
- this._leftDelimiter = leftDelimiter; |
- this._rightDelimiter = rightDelimiter; |
- this._rightParenthesis = rightParenthesis; |
- } |
- |
- /** |
- * Initialize a newly created parameter list. |
- * |
- * @param leftParenthesis the left parenthesis |
- * @param parameters the parameters associated with the method |
- * @param leftDelimiter the left delimiter introducing the optional parameters |
- * @param rightDelimiter the right delimiter introducing the optional parameters |
- * @param rightParenthesis the right parenthesis |
- */ |
- FormalParameterList({Token leftParenthesis, List<FormalParameter> parameters, Token leftDelimiter, Token rightDelimiter, Token rightParenthesis}) : this.full(leftParenthesis, parameters, leftDelimiter, rightDelimiter, rightParenthesis); |
- accept(ASTVisitor visitor) => visitor.visitFormalParameterList(this); |
- Token get beginToken => _leftParenthesis; |
- Token get endToken => _rightParenthesis; |
- |
- /** |
- * Return the left square bracket ('[') or left curly brace ('{') introducing the optional |
- * parameters, or `null` if there are no optional parameters. |
- * |
- * @return the left square bracket ('[') or left curly brace ('{') introducing the optional |
- * parameters |
- */ |
- Token get leftDelimiter => _leftDelimiter; |
- |
- /** |
- * Return the left parenthesis. |
- * |
- * @return the left parenthesis |
- */ |
- Token get leftParenthesis => _leftParenthesis; |
- |
- /** |
- * Return an array containing the elements representing the parameters in this list. The array |
- * will contain `null`s if the parameters in this list have not been resolved. |
- * |
- * @return the elements representing the parameters in this list |
- */ |
- List<ParameterElement> get parameterElements { |
- int count = parameters.length; |
- List<ParameterElement> types = new List<ParameterElement>(count); |
- for (int i = 0; i < count; i++) { |
- types[i] = parameters[i].element; |
- } |
- return types; |
- } |
- |
- /** |
- * Return the right square bracket (']') or right curly brace ('}') introducing the optional |
- * parameters, or `null` if there are no optional parameters. |
- * |
- * @return the right square bracket (']') or right curly brace ('}') introducing the optional |
- * parameters |
- */ |
- Token get rightDelimiter => _rightDelimiter; |
- |
- /** |
- * Return the right parenthesis. |
- * |
- * @return the right parenthesis |
- */ |
- Token get rightParenthesis => _rightParenthesis; |
- |
- /** |
- * Set the left square bracket ('[') or left curly brace ('{') introducing the optional parameters |
- * to the given token. |
- * |
- * @param bracket the left delimiter introducing the optional parameters |
- */ |
- void set leftDelimiter(Token bracket) { |
- _leftDelimiter = bracket; |
- } |
- |
- /** |
- * Set the left parenthesis to the given token. |
- * |
- * @param parenthesis the left parenthesis |
- */ |
- void set leftParenthesis(Token parenthesis) { |
- _leftParenthesis = parenthesis; |
- } |
- |
- /** |
- * Set the right square bracket (']') or right curly brace ('}') introducing the optional |
- * parameters to the given token. |
- * |
- * @param bracket the right delimiter introducing the optional parameters |
- */ |
- void set rightDelimiter(Token bracket) { |
- _rightDelimiter = bracket; |
- } |
- |
- /** |
- * Set the right parenthesis to the given token. |
- * |
- * @param parenthesis the right parenthesis |
- */ |
- void set rightParenthesis(Token parenthesis) { |
- _rightParenthesis = parenthesis; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- parameters.accept(visitor); |
- } |
-} |
-/** |
- * The abstract class `FunctionBody` defines the behavior common to objects representing the |
- * body of a function or method. |
- * |
- * <pre> |
- * functionBody ::= |
- * [BlockFunctionBody] |
- * | [EmptyFunctionBody] |
- * | [ExpressionFunctionBody] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class FunctionBody extends ASTNode { |
-} |
-/** |
- * Instances of the class `FunctionDeclaration` wrap a [FunctionExpression] as a top-level declaration. |
- * |
- * <pre> |
- * functionDeclaration ::= |
- * 'external' functionSignature |
- * | functionSignature [FunctionBody] |
- * |
- * functionSignature ::= |
- * [Type]? ('get' | 'set')? [SimpleIdentifier] [FormalParameterList] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class FunctionDeclaration extends CompilationUnitMember { |
- |
- /** |
- * The token representing the 'external' keyword, or `null` if this is not an external |
- * function. |
- */ |
- Token externalKeyword; |
- |
- /** |
- * The return type of the function, or `null` if no return type was declared. |
- */ |
- TypeName _returnType; |
- |
- /** |
- * The token representing the 'get' or 'set' keyword, or `null` if this is a function |
- * declaration rather than a property declaration. |
- */ |
- Token propertyKeyword; |
- |
- /** |
- * The name of the function, or `null` if the function is not named. |
- */ |
- SimpleIdentifier _name; |
- |
- /** |
- * The function expression being wrapped. |
- */ |
- FunctionExpression _functionExpression; |
- |
- /** |
- * Initialize a newly created function declaration. |
- * |
- * @param comment the documentation comment associated with this function |
- * @param metadata the annotations associated with this function |
- * @param externalKeyword the token representing the 'external' keyword |
- * @param returnType the return type of the function |
- * @param propertyKeyword the token representing the 'get' or 'set' keyword |
- * @param name the name of the function |
- * @param functionExpression the function expression being wrapped |
- */ |
- FunctionDeclaration.full(Comment comment, List<Annotation> metadata, Token externalKeyword, TypeName returnType, Token propertyKeyword, SimpleIdentifier name, FunctionExpression functionExpression) : super.full(comment, metadata) { |
- this.externalKeyword = externalKeyword; |
- this._returnType = becomeParentOf(returnType); |
- this.propertyKeyword = propertyKeyword; |
- this._name = becomeParentOf(name); |
- this._functionExpression = becomeParentOf(functionExpression); |
- } |
- |
- /** |
- * Initialize a newly created function declaration. |
- * |
- * @param comment the documentation comment associated with this function |
- * @param metadata the annotations associated with this function |
- * @param externalKeyword the token representing the 'external' keyword |
- * @param returnType the return type of the function |
- * @param propertyKeyword the token representing the 'get' or 'set' keyword |
- * @param name the name of the function |
- * @param functionExpression the function expression being wrapped |
- */ |
- FunctionDeclaration({Comment comment, List<Annotation> metadata, Token externalKeyword, TypeName returnType, Token propertyKeyword, SimpleIdentifier name, FunctionExpression functionExpression}) : this.full(comment, metadata, externalKeyword, returnType, propertyKeyword, name, functionExpression); |
- accept(ASTVisitor visitor) => visitor.visitFunctionDeclaration(this); |
- ExecutableElement get element => _name != null ? (_name.staticElement as ExecutableElement) : null; |
- Token get endToken => _functionExpression.endToken; |
- |
- /** |
- * Return the function expression being wrapped. |
- * |
- * @return the function expression being wrapped |
- */ |
- FunctionExpression get functionExpression => _functionExpression; |
- |
- /** |
- * Return the name of the function, or `null` if the function is not named. |
- * |
- * @return the name of the function |
- */ |
- SimpleIdentifier get name => _name; |
- |
- /** |
- * Return the return type of the function, or `null` if no return type was declared. |
- * |
- * @return the return type of the function |
- */ |
- TypeName get returnType => _returnType; |
- |
- /** |
- * Return `true` if this function declares a getter. |
- * |
- * @return `true` if this function declares a getter |
- */ |
- bool get isGetter => propertyKeyword != null && identical(((propertyKeyword as KeywordToken)).keyword, Keyword.GET); |
- |
- /** |
- * Return `true` if this function declares a setter. |
- * |
- * @return `true` if this function declares a setter |
- */ |
- bool get isSetter => propertyKeyword != null && identical(((propertyKeyword as KeywordToken)).keyword, Keyword.SET); |
- |
- /** |
- * Set the function expression being wrapped to the given function expression. |
- * |
- * @param functionExpression the function expression being wrapped |
- */ |
- void set functionExpression(FunctionExpression functionExpression) { |
- functionExpression = becomeParentOf(functionExpression); |
- } |
- |
- /** |
- * Set the name of the function to the given identifier. |
- * |
- * @param identifier the name of the function |
- */ |
- void set name(SimpleIdentifier identifier) { |
- _name = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Set the return type of the function to the given name. |
- * |
- * @param name the return type of the function |
- */ |
- void set returnType(TypeName name) { |
- _returnType = becomeParentOf(name); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_returnType, visitor); |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_functionExpression, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata { |
- if (externalKeyword != null) { |
- return externalKeyword; |
- } |
- if (_returnType != null) { |
- return _returnType.beginToken; |
- } else if (propertyKeyword != null) { |
- return propertyKeyword; |
- } else if (_name != null) { |
- return _name.beginToken; |
- } |
- return _functionExpression.beginToken; |
- } |
-} |
-/** |
- * Instances of the class `FunctionDeclarationStatement` wrap a [FunctionDeclaration |
- ] as a statement. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class FunctionDeclarationStatement extends Statement { |
- |
- /** |
- * The function declaration being wrapped. |
- */ |
- FunctionDeclaration functionDeclaration; |
- |
- /** |
- * Initialize a newly created function declaration statement. |
- * |
- * @param functionDeclaration the the function declaration being wrapped |
- */ |
- FunctionDeclarationStatement.full(FunctionDeclaration functionDeclaration) { |
- this.functionDeclaration = becomeParentOf(functionDeclaration); |
- } |
- |
- /** |
- * Initialize a newly created function declaration statement. |
- * |
- * @param functionDeclaration the the function declaration being wrapped |
- */ |
- FunctionDeclarationStatement({FunctionDeclaration functionDeclaration}) : this.full(functionDeclaration); |
- accept(ASTVisitor visitor) => visitor.visitFunctionDeclarationStatement(this); |
- Token get beginToken => functionDeclaration.beginToken; |
- Token get endToken => functionDeclaration.endToken; |
- |
- /** |
- * Set the function declaration being wrapped to the given function declaration. |
- * |
- * @param functionDeclaration the function declaration being wrapped |
- */ |
- void set functionExpression(FunctionDeclaration functionDeclaration) { |
- this.functionDeclaration = becomeParentOf(functionDeclaration); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(functionDeclaration, visitor); |
- } |
-} |
-/** |
- * Instances of the class `FunctionExpression` represent a function expression. |
- * |
- * <pre> |
- * functionExpression ::= |
- * [FormalParameterList] [FunctionBody] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class FunctionExpression extends Expression { |
- |
- /** |
- * The parameters associated with the function. |
- */ |
- FormalParameterList _parameters; |
- |
- /** |
- * The body of the function, or `null` if this is an external function. |
- */ |
- FunctionBody _body; |
- |
- /** |
- * The element associated with the function, or `null` if the AST structure has not been |
- * resolved. |
- */ |
- ExecutableElement element; |
- |
- /** |
- * Initialize a newly created function declaration. |
- * |
- * @param parameters the parameters associated with the function |
- * @param body the body of the function |
- */ |
- FunctionExpression.full(FormalParameterList parameters, FunctionBody body) { |
- this._parameters = becomeParentOf(parameters); |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Initialize a newly created function declaration. |
- * |
- * @param parameters the parameters associated with the function |
- * @param body the body of the function |
- */ |
- FunctionExpression({FormalParameterList parameters, FunctionBody body}) : this.full(parameters, body); |
- accept(ASTVisitor visitor) => visitor.visitFunctionExpression(this); |
- Token get beginToken { |
- if (_parameters != null) { |
- return _parameters.beginToken; |
- } else if (_body != null) { |
- return _body.beginToken; |
- } |
- throw new IllegalStateException("Non-external functions must have a body"); |
- } |
- |
- /** |
- * Return the body of the function, or `null` if this is an external function. |
- * |
- * @return the body of the function |
- */ |
- FunctionBody get body => _body; |
- Token get endToken { |
- if (_body != null) { |
- return _body.endToken; |
- } else if (_parameters != null) { |
- return _parameters.endToken; |
- } |
- throw new IllegalStateException("Non-external functions must have a body"); |
- } |
- |
- /** |
- * Return the parameters associated with the function. |
- * |
- * @return the parameters associated with the function |
- */ |
- FormalParameterList get parameters => _parameters; |
- |
- /** |
- * Set the body of the function to the given function body. |
- * |
- * @param functionBody the body of the function |
- */ |
- void set body(FunctionBody functionBody) { |
- _body = becomeParentOf(functionBody); |
- } |
- |
- /** |
- * Set the parameters associated with the function to the given list of parameters. |
- * |
- * @param parameters the parameters associated with the function |
- */ |
- void set parameters(FormalParameterList parameters) { |
- this._parameters = becomeParentOf(parameters); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_parameters, visitor); |
- safelyVisitChild(_body, visitor); |
- } |
-} |
-/** |
- * Instances of the class `FunctionExpressionInvocation` represent 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. |
- * |
- * <pre> |
- * functionExpressionInvoction ::= |
- * [Expression] [ArgumentList] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class FunctionExpressionInvocation extends Expression { |
- |
- /** |
- * The expression producing the function being invoked. |
- */ |
- Expression _function; |
- |
- /** |
- * The list of arguments to the function. |
- */ |
- ArgumentList _argumentList; |
- |
- /** |
- * 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 staticElement; |
- |
- /** |
- * The element associated with the function being invoked based on propagated type information, or |
- * `null` if the AST structure has not been resolved or the function could not be resolved. |
- */ |
- ExecutableElement _propagatedElement; |
- |
- /** |
- * Initialize a newly created function expression invocation. |
- * |
- * @param function the expression producing the function being invoked |
- * @param argumentList the list of arguments to the method |
- */ |
- FunctionExpressionInvocation.full(Expression function, ArgumentList argumentList) { |
- this._function = becomeParentOf(function); |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- |
- /** |
- * Initialize a newly created function expression invocation. |
- * |
- * @param function the expression producing the function being invoked |
- * @param argumentList the list of arguments to the method |
- */ |
- FunctionExpressionInvocation({Expression function, ArgumentList argumentList}) : this.full(function, argumentList); |
- accept(ASTVisitor visitor) => visitor.visitFunctionExpressionInvocation(this); |
- |
- /** |
- * Return the list of arguments to the method. |
- * |
- * @return the list of arguments to the method |
- */ |
- ArgumentList get argumentList => _argumentList; |
- Token get beginToken => _function.beginToken; |
- |
- /** |
- * Return the best element available for the function being invoked. If resolution was able to |
- * find a better element based on type propagation, that element will be returned. Otherwise, the |
- * element found using the result of static analysis will be returned. If resolution has not been |
- * performed, then `null` will be returned. |
- * |
- * @return the best element available for this function |
- */ |
- ExecutableElement get bestElement { |
- ExecutableElement element = propagatedElement; |
- if (element == null) { |
- element = staticElement; |
- } |
- return element; |
- } |
- Token get endToken => _argumentList.endToken; |
- |
- /** |
- * Return the expression producing the function being invoked. |
- * |
- * @return the expression producing the function being invoked |
- */ |
- Expression get function => _function; |
- |
- /** |
- * Return the element associated with the function being invoked based on propagated type |
- * information, or `null` if the AST structure has not been resolved or the function could |
- * not be resolved. One common example of the latter case is an expression whose value can change |
- * over time. |
- * |
- * @return the element associated with the function being invoked |
- */ |
- ExecutableElement get propagatedElement => _propagatedElement; |
- |
- /** |
- * Set the list of arguments to the method to the given list. |
- * |
- * @param argumentList the list of arguments to the method |
- */ |
- void set argumentList(ArgumentList argumentList) { |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- |
- /** |
- * Set the expression producing the function being invoked to the given expression. |
- * |
- * @param function the expression producing the function being invoked |
- */ |
- void set function(Expression function) { |
- function = becomeParentOf(function); |
- } |
- |
- /** |
- * Set the element associated with the function being invoked based on propagated type information |
- * to the given element. |
- * |
- * @param element the element to be associated with the function being invoked |
- */ |
- void set propagatedElement(ExecutableElement element) { |
- _propagatedElement = element; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_function, visitor); |
- safelyVisitChild(_argumentList, visitor); |
- } |
-} |
-/** |
- * Instances of the class `FunctionTypeAlias` represent a function type alias. |
- * |
- * <pre> |
- * functionTypeAlias ::= |
- * functionPrefix [TypeParameterList]? [FormalParameterList] ';' |
- * |
- * functionPrefix ::= |
- * [TypeName]? [SimpleIdentifier] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class FunctionTypeAlias extends TypeAlias { |
- |
- /** |
- * The name of the return type of the function type being defined, or `null` if no return |
- * type was given. |
- */ |
- TypeName _returnType; |
- |
- /** |
- * The name of the function type being declared. |
- */ |
- SimpleIdentifier _name; |
- |
- /** |
- * The type parameters for the function type, or `null` if the function type does not have |
- * any type parameters. |
- */ |
- TypeParameterList _typeParameters; |
- |
- /** |
- * The parameters associated with the function type. |
- */ |
- FormalParameterList _parameters; |
- |
- /** |
- * Initialize a newly created function type alias. |
- * |
- * @param comment the documentation comment associated with this type alias |
- * @param metadata the annotations associated with this type alias |
- * @param keyword the token representing the 'typedef' keyword |
- * @param returnType the name of the return type of the function type being defined |
- * @param name the name of the type being declared |
- * @param typeParameters the type parameters for the type |
- * @param parameters the parameters associated with the function |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- FunctionTypeAlias.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName returnType, SimpleIdentifier name, TypeParameterList typeParameters, FormalParameterList parameters, Token semicolon) : super.full(comment, metadata, keyword, semicolon) { |
- this._returnType = becomeParentOf(returnType); |
- this._name = becomeParentOf(name); |
- this._typeParameters = becomeParentOf(typeParameters); |
- this._parameters = becomeParentOf(parameters); |
- } |
- |
- /** |
- * Initialize a newly created function type alias. |
- * |
- * @param comment the documentation comment associated with this type alias |
- * @param metadata the annotations associated with this type alias |
- * @param keyword the token representing the 'typedef' keyword |
- * @param returnType the name of the return type of the function type being defined |
- * @param name the name of the type being declared |
- * @param typeParameters the type parameters for the type |
- * @param parameters the parameters associated with the function |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- FunctionTypeAlias({Comment comment, List<Annotation> metadata, Token keyword, TypeName returnType, SimpleIdentifier name, TypeParameterList typeParameters, FormalParameterList parameters, Token semicolon}) : this.full(comment, metadata, keyword, returnType, name, typeParameters, parameters, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitFunctionTypeAlias(this); |
- FunctionTypeAliasElement get element => _name != null ? (_name.staticElement as FunctionTypeAliasElement) : null; |
- |
- /** |
- * Return the name of the function type being declared. |
- * |
- * @return the name of the function type being declared |
- */ |
- SimpleIdentifier get name => _name; |
- |
- /** |
- * Return the parameters associated with the function type. |
- * |
- * @return the parameters associated with the function type |
- */ |
- FormalParameterList get parameters => _parameters; |
- |
- /** |
- * Return the name of the return type of the function type being defined, or `null` if no |
- * return type was given. |
- * |
- * @return the name of the return type of the function type being defined |
- */ |
- TypeName get returnType => _returnType; |
- |
- /** |
- * Return the type parameters for the function type, or `null` if the function type does not |
- * have any type parameters. |
- * |
- * @return the type parameters for the function type |
- */ |
- TypeParameterList get typeParameters => _typeParameters; |
- |
- /** |
- * Set the name of the function type being declared to the given identifier. |
- * |
- * @param name the name of the function type being declared |
- */ |
- void set name(SimpleIdentifier name) { |
- this._name = becomeParentOf(name); |
- } |
- |
- /** |
- * Set the parameters associated with the function type to the given list of parameters. |
- * |
- * @param parameters the parameters associated with the function type |
- */ |
- void set parameters(FormalParameterList parameters) { |
- this._parameters = becomeParentOf(parameters); |
- } |
- |
- /** |
- * Set the name of the return type of the function type being defined to the given type name. |
- * |
- * @param typeName the name of the return type of the function type being defined |
- */ |
- void set returnType(TypeName typeName) { |
- _returnType = becomeParentOf(typeName); |
- } |
- |
- /** |
- * Set the type parameters for the function type to the given list of parameters. |
- * |
- * @param typeParameters the type parameters for the function type |
- */ |
- void set typeParameters(TypeParameterList typeParameters) { |
- this._typeParameters = becomeParentOf(typeParameters); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_returnType, visitor); |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_typeParameters, visitor); |
- safelyVisitChild(_parameters, visitor); |
- } |
-} |
-/** |
- * Instances of the class `FunctionTypedFormalParameter` represent a function-typed formal |
- * parameter. |
- * |
- * <pre> |
- * functionSignature ::= |
- * [TypeName]? [SimpleIdentifier] [FormalParameterList] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class FunctionTypedFormalParameter extends NormalFormalParameter { |
- |
- /** |
- * The return type of the function, or `null` if the function does not have a return type. |
- */ |
- TypeName _returnType; |
- |
- /** |
- * The parameters of the function-typed parameter. |
- */ |
- FormalParameterList _parameters; |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param returnType the return type of the function, or `null` if the function does not |
- * have a return type |
- * @param identifier the name of the function-typed parameter |
- * @param parameters the parameters of the function-typed parameter |
- */ |
- FunctionTypedFormalParameter.full(Comment comment, List<Annotation> metadata, TypeName returnType, SimpleIdentifier identifier, FormalParameterList parameters) : super.full(comment, metadata, identifier) { |
- this._returnType = becomeParentOf(returnType); |
- this._parameters = becomeParentOf(parameters); |
- } |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param returnType the return type of the function, or `null` if the function does not |
- * have a return type |
- * @param identifier the name of the function-typed parameter |
- * @param parameters the parameters of the function-typed parameter |
- */ |
- FunctionTypedFormalParameter({Comment comment, List<Annotation> metadata, TypeName returnType, SimpleIdentifier identifier, FormalParameterList parameters}) : this.full(comment, metadata, returnType, identifier, parameters); |
- accept(ASTVisitor visitor) => visitor.visitFunctionTypedFormalParameter(this); |
- Token get beginToken { |
- if (_returnType != null) { |
- return _returnType.beginToken; |
- } |
- return identifier.beginToken; |
- } |
- Token get endToken => _parameters.endToken; |
- |
- /** |
- * Return the parameters of the function-typed parameter. |
- * |
- * @return the parameters of the function-typed parameter |
- */ |
- FormalParameterList get parameters => _parameters; |
- |
- /** |
- * Return the return type of the function, or `null` if the function does not have a return |
- * type. |
- * |
- * @return the return type of the function |
- */ |
- TypeName get returnType => _returnType; |
- bool get isConst => false; |
- bool get isFinal => false; |
- |
- /** |
- * Set the parameters of the function-typed parameter to the given parameters. |
- * |
- * @param parameters the parameters of the function-typed parameter |
- */ |
- void set parameters(FormalParameterList parameters) { |
- this._parameters = becomeParentOf(parameters); |
- } |
- |
- /** |
- * Set the return type of the function to the given type. |
- * |
- * @param returnType the return type of the function |
- */ |
- void set returnType(TypeName returnType) { |
- this._returnType = becomeParentOf(returnType); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_returnType, visitor); |
- safelyVisitChild(identifier, visitor); |
- safelyVisitChild(_parameters, visitor); |
- } |
-} |
-/** |
- * Instances of the class `HideCombinator` represent a combinator that restricts the names |
- * being imported to those that are not in a given list. |
- * |
- * <pre> |
- * hideCombinator ::= |
- * 'hide' [SimpleIdentifier] (',' [SimpleIdentifier])* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class HideCombinator extends Combinator { |
- |
- /** |
- * The list of names from the library that are hidden by this combinator. |
- */ |
- NodeList<SimpleIdentifier> hiddenNames; |
- |
- /** |
- * Initialize a newly created import show combinator. |
- * |
- * @param keyword the comma introducing the combinator |
- * @param hiddenNames the list of names from the library that are hidden by this combinator |
- */ |
- HideCombinator.full(Token keyword, List<SimpleIdentifier> hiddenNames) : super.full(keyword) { |
- this.hiddenNames = new NodeList<SimpleIdentifier>(this); |
- this.hiddenNames.addAll(hiddenNames); |
- } |
- |
- /** |
- * Initialize a newly created import show combinator. |
- * |
- * @param keyword the comma introducing the combinator |
- * @param hiddenNames the list of names from the library that are hidden by this combinator |
- */ |
- HideCombinator({Token keyword, List<SimpleIdentifier> hiddenNames}) : this.full(keyword, hiddenNames); |
- accept(ASTVisitor visitor) => visitor.visitHideCombinator(this); |
- Token get endToken => hiddenNames.endToken; |
- void visitChildren(ASTVisitor visitor) { |
- hiddenNames.accept(visitor); |
- } |
-} |
-/** |
- * The abstract class `Identifier` defines the behavior common to nodes that represent an |
- * identifier. |
- * |
- * <pre> |
- * identifier ::= |
- * [SimpleIdentifier] |
- * | [PrefixedIdentifier] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class Identifier extends Expression { |
- |
- /** |
- * Return `true` if the given name is visible only within the library in which it is |
- * declared. |
- * |
- * @param name the name being tested |
- * @return `true` if the given name is private |
- */ |
- static bool isPrivateName(String name) => name.startsWith("_"); |
- |
- /** |
- * Return the best element available for this operator. If resolution was able to find a better |
- * element based on type propagation, that element will be returned. Otherwise, the element found |
- * using the result of static analysis will be returned. If resolution has not been performed, |
- * then `null` will be returned. |
- * |
- * @return the best element available for this operator |
- */ |
- Element get bestElement; |
- |
- /** |
- * Return the lexical representation of the identifier. |
- * |
- * @return the lexical representation of the identifier |
- */ |
- String get name; |
- |
- /** |
- * Return the element associated with this identifier based on propagated 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. |
- * |
- * @return the element associated with this identifier |
- */ |
- Element get propagatedElement; |
- |
- /** |
- * 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 |
- * |
- * @return the element associated with the operator |
- */ |
- Element get staticElement; |
- bool get isAssignable => true; |
-} |
-/** |
- * Instances of the class `IfStatement` represent an if statement. |
- * |
- * <pre> |
- * ifStatement ::= |
- * 'if' '(' [Expression] ')' [Statement] ('else' [Statement])? |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class IfStatement extends Statement { |
- |
- /** |
- * The token representing the 'if' keyword. |
- */ |
- Token ifKeyword; |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token leftParenthesis; |
- |
- /** |
- * The condition used to determine which of the statements is executed next. |
- */ |
- Expression _condition; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token rightParenthesis; |
- |
- /** |
- * The statement that is executed if the condition evaluates to `true`. |
- */ |
- Statement _thenStatement; |
- |
- /** |
- * The token representing the 'else' keyword, or `null` if there is no else statement. |
- */ |
- Token elseKeyword; |
- |
- /** |
- * The statement that is executed if the condition evaluates to `false`, or `null` if |
- * there is no else statement. |
- */ |
- Statement _elseStatement; |
- |
- /** |
- * Initialize a newly created if statement. |
- * |
- * @param ifKeyword the token representing the 'if' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param condition the condition used to determine which of the statements is executed next |
- * @param rightParenthesis the right parenthesis |
- * @param thenStatement the statement that is executed if the condition evaluates to `true` |
- * @param elseKeyword the token representing the 'else' keyword |
- * @param elseStatement the statement that is executed if the condition evaluates to `false` |
- */ |
- IfStatement.full(Token ifKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Statement thenStatement, Token elseKeyword, Statement elseStatement) { |
- this.ifKeyword = ifKeyword; |
- this.leftParenthesis = leftParenthesis; |
- this._condition = becomeParentOf(condition); |
- this.rightParenthesis = rightParenthesis; |
- this._thenStatement = becomeParentOf(thenStatement); |
- this.elseKeyword = elseKeyword; |
- this._elseStatement = becomeParentOf(elseStatement); |
- } |
- |
- /** |
- * Initialize a newly created if statement. |
- * |
- * @param ifKeyword the token representing the 'if' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param condition the condition used to determine which of the statements is executed next |
- * @param rightParenthesis the right parenthesis |
- * @param thenStatement the statement that is executed if the condition evaluates to `true` |
- * @param elseKeyword the token representing the 'else' keyword |
- * @param elseStatement the statement that is executed if the condition evaluates to `false` |
- */ |
- IfStatement({Token ifKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Statement thenStatement, Token elseKeyword, Statement elseStatement}) : this.full(ifKeyword, leftParenthesis, condition, rightParenthesis, thenStatement, elseKeyword, elseStatement); |
- accept(ASTVisitor visitor) => visitor.visitIfStatement(this); |
- Token get beginToken => ifKeyword; |
- |
- /** |
- * Return the condition used to determine which of the statements is executed next. |
- * |
- * @return the condition used to determine which statement is executed next |
- */ |
- Expression get condition => _condition; |
- |
- /** |
- * Return the statement that is executed if the condition evaluates to `false`, or |
- * `null` if there is no else statement. |
- * |
- * @return the statement that is executed if the condition evaluates to `false` |
- */ |
- Statement get elseStatement => _elseStatement; |
- Token get endToken { |
- if (_elseStatement != null) { |
- return _elseStatement.endToken; |
- } |
- return _thenStatement.endToken; |
- } |
- |
- /** |
- * Return the statement that is executed if the condition evaluates to `true`. |
- * |
- * @return the statement that is executed if the condition evaluates to `true` |
- */ |
- Statement get thenStatement => _thenStatement; |
- |
- /** |
- * Set the condition used to determine which of the statements is executed next to the given |
- * expression. |
- * |
- * @param expression the condition used to determine which statement is executed next |
- */ |
- void set condition(Expression expression) { |
- _condition = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the statement that is executed if the condition evaluates to `false` to the given |
- * statement. |
- * |
- * @param statement the statement that is executed if the condition evaluates to `false` |
- */ |
- void set elseStatement(Statement statement) { |
- _elseStatement = becomeParentOf(statement); |
- } |
- |
- /** |
- * Set the statement that is executed if the condition evaluates to `true` to the given |
- * statement. |
- * |
- * @param statement the statement that is executed if the condition evaluates to `true` |
- */ |
- void set thenStatement(Statement statement) { |
- _thenStatement = becomeParentOf(statement); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_condition, visitor); |
- safelyVisitChild(_thenStatement, visitor); |
- safelyVisitChild(_elseStatement, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ImplementsClause` represent the "implements" clause in an class |
- * declaration. |
- * |
- * <pre> |
- * implementsClause ::= |
- * 'implements' [TypeName] (',' [TypeName])* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ImplementsClause extends ASTNode { |
- |
- /** |
- * The token representing the 'implements' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The interfaces that are being implemented. |
- */ |
- NodeList<TypeName> interfaces; |
- |
- /** |
- * Initialize a newly created implements clause. |
- * |
- * @param keyword the token representing the 'implements' keyword |
- * @param interfaces the interfaces that are being implemented |
- */ |
- ImplementsClause.full(Token keyword, List<TypeName> interfaces) { |
- this.interfaces = new NodeList<TypeName>(this); |
- this.keyword = keyword; |
- this.interfaces.addAll(interfaces); |
- } |
- |
- /** |
- * Initialize a newly created implements clause. |
- * |
- * @param keyword the token representing the 'implements' keyword |
- * @param interfaces the interfaces that are being implemented |
- */ |
- ImplementsClause({Token keyword, List<TypeName> interfaces}) : this.full(keyword, interfaces); |
- accept(ASTVisitor visitor) => visitor.visitImplementsClause(this); |
- Token get beginToken => keyword; |
- Token get endToken => interfaces.endToken; |
- void visitChildren(ASTVisitor visitor) { |
- interfaces.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `ImportDirective` represent an import directive. |
- * |
- * <pre> |
- * importDirective ::= |
- * [Annotation] 'import' [StringLiteral] ('as' identifier)? [Combinator]* ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ImportDirective extends NamespaceDirective { |
- static Comparator<ImportDirective> COMPARATOR = (ImportDirective import1, ImportDirective import2) { |
- 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; |
- } |
- } |
- } |
- SimpleIdentifier prefix1 = import1.prefix; |
- SimpleIdentifier prefix2 = import2.prefix; |
- String prefixStr1 = prefix1 != null ? prefix1.name : null; |
- String prefixStr2 = prefix2 != null ? prefix2.name : null; |
- 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; |
- } |
- } |
- } |
- NodeList<Combinator> combinators1 = import1.combinators; |
- List<String> allHides1 = new List<String>(); |
- List<String> allShows1 = new List<String>(); |
- for (Combinator combinator in combinators1) { |
- if (combinator is HideCombinator) { |
- NodeList<SimpleIdentifier> hides = ((combinator as HideCombinator)).hiddenNames; |
- for (SimpleIdentifier simpleIdentifier in hides) { |
- allHides1.add(simpleIdentifier.name); |
- } |
- } else { |
- NodeList<SimpleIdentifier> shows = ((combinator as ShowCombinator)).shownNames; |
- for (SimpleIdentifier simpleIdentifier in shows) { |
- allShows1.add(simpleIdentifier.name); |
- } |
- } |
- } |
- NodeList<Combinator> combinators2 = import2.combinators; |
- List<String> allHides2 = new List<String>(); |
- List<String> allShows2 = new List<String>(); |
- for (Combinator combinator in combinators2) { |
- if (combinator is HideCombinator) { |
- NodeList<SimpleIdentifier> hides = ((combinator as HideCombinator)).hiddenNames; |
- for (SimpleIdentifier simpleIdentifier in hides) { |
- allHides2.add(simpleIdentifier.name); |
- } |
- } else { |
- NodeList<SimpleIdentifier> shows = ((combinator as ShowCombinator)).shownNames; |
- for (SimpleIdentifier simpleIdentifier in shows) { |
- allShows2.add(simpleIdentifier.name); |
- } |
- } |
- } |
- if (allHides1.length != allHides2.length) { |
- return allHides1.length - allHides2.length; |
- } |
- if (allShows1.length != allShows2.length) { |
- return allShows1.length - allShows2.length; |
- } |
- if (!javaCollectionContainsAll(allHides1, allHides2)) { |
- return -1; |
- } |
- if (!javaCollectionContainsAll(allShows1, allShows2)) { |
- return -1; |
- } |
- return 0; |
- }; |
- |
- /** |
- * The token representing the 'as' token, or `null` if the imported names are not prefixed. |
- */ |
- Token asToken; |
- |
- /** |
- * The prefix to be used with the imported names, or `null` if the imported names are not |
- * prefixed. |
- */ |
- SimpleIdentifier _prefix; |
- |
- /** |
- * Initialize a newly created import directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param keyword the token representing the 'import' keyword |
- * @param libraryUri the URI of the library being imported |
- * @param asToken the token representing the 'as' token |
- * @param prefix the prefix to be used with the imported names |
- * @param combinators the combinators used to control how names are imported |
- * @param semicolon the semicolon terminating the directive |
- */ |
- ImportDirective.full(Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, Token asToken, SimpleIdentifier prefix, List<Combinator> combinators, Token semicolon) : super.full(comment, metadata, keyword, libraryUri, combinators, semicolon) { |
- this.asToken = asToken; |
- this._prefix = becomeParentOf(prefix); |
- } |
- |
- /** |
- * Initialize a newly created import directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param keyword the token representing the 'import' keyword |
- * @param libraryUri the URI of the library being imported |
- * @param asToken the token representing the 'as' token |
- * @param prefix the prefix to be used with the imported names |
- * @param combinators the combinators used to control how names are imported |
- * @param semicolon the semicolon terminating the directive |
- */ |
- ImportDirective({Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, Token asToken, SimpleIdentifier prefix, List<Combinator> combinators, Token semicolon}) : this.full(comment, metadata, keyword, libraryUri, asToken, prefix, combinators, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitImportDirective(this); |
- ImportElement get element => super.element as ImportElement; |
- |
- /** |
- * Return the prefix to be used with the imported names, or `null` if the imported names are |
- * not prefixed. |
- * |
- * @return the prefix to be used with the imported names |
- */ |
- SimpleIdentifier get prefix => _prefix; |
- LibraryElement get uriElement { |
- ImportElement element = this.element; |
- if (element == null) { |
- return null; |
- } |
- return element.importedLibrary; |
- } |
- |
- /** |
- * Set the prefix to be used with the imported names to the given identifier. |
- * |
- * @param prefix the prefix to be used with the imported names |
- */ |
- void set prefix(SimpleIdentifier prefix) { |
- this._prefix = becomeParentOf(prefix); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_prefix, visitor); |
- combinators.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `IndexExpression` represent an index expression. |
- * |
- * <pre> |
- * indexExpression ::= |
- * [Expression] '[' [Expression] ']' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class IndexExpression extends Expression { |
- |
- /** |
- * The expression used to compute the object being indexed, or `null` if this index |
- * expression is part of a cascade expression. |
- */ |
- Expression _target; |
- |
- /** |
- * The period ("..") before a cascaded index expression, or `null` if this index expression |
- * is not part of a cascade expression. |
- */ |
- Token period; |
- |
- /** |
- * The left square bracket. |
- */ |
- Token _leftBracket; |
- |
- /** |
- * The expression used to compute the index. |
- */ |
- Expression _index; |
- |
- /** |
- * The right square bracket. |
- */ |
- Token _rightBracket; |
- |
- /** |
- * The element associated with the operator based on the static type of the target, or |
- * `null` if the AST structure has not been resolved or if the operator could not be |
- * resolved. |
- */ |
- MethodElement _staticElement; |
- |
- /** |
- * The element associated with the operator based on the propagated type of the target, or |
- * `null` if the AST structure has not been resolved or if the operator could not be |
- * resolved. |
- */ |
- MethodElement _propagatedElement; |
- |
- /** |
- * If this expression is both in a getter and setter context, the [AuxiliaryElements] will |
- * be set to hold onto the static and propagated information. The auxiliary element will hold onto |
- * the elements from the getter context. |
- */ |
- AuxiliaryElements auxiliaryElements = null; |
- |
- /** |
- * Initialize a newly created index expression. |
- * |
- * @param target the expression used to compute the object being indexed |
- * @param leftBracket the left square bracket |
- * @param index the expression used to compute the index |
- * @param rightBracket the right square bracket |
- */ |
- IndexExpression.forTarget_full(Expression target, Token leftBracket, Expression index, Token rightBracket) { |
- this._target = becomeParentOf(target); |
- this._leftBracket = leftBracket; |
- this._index = becomeParentOf(index); |
- this._rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created index expression. |
- * |
- * @param target the expression used to compute the object being indexed |
- * @param leftBracket the left square bracket |
- * @param index the expression used to compute the index |
- * @param rightBracket the right square bracket |
- */ |
- IndexExpression.forTarget({Expression target, Token leftBracket, Expression index, Token rightBracket}) : this.forTarget_full(target, leftBracket, index, rightBracket); |
- |
- /** |
- * Initialize a newly created index expression. |
- * |
- * @param period the period ("..") before a cascaded index expression |
- * @param leftBracket the left square bracket |
- * @param index the expression used to compute the index |
- * @param rightBracket the right square bracket |
- */ |
- IndexExpression.forCascade_full(Token period, Token leftBracket, Expression index, Token rightBracket) { |
- this.period = period; |
- this._leftBracket = leftBracket; |
- this._index = becomeParentOf(index); |
- this._rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created index expression. |
- * |
- * @param period the period ("..") before a cascaded index expression |
- * @param leftBracket the left square bracket |
- * @param index the expression used to compute the index |
- * @param rightBracket the right square bracket |
- */ |
- IndexExpression.forCascade({Token period, Token leftBracket, Expression index, Token rightBracket}) : this.forCascade_full(period, leftBracket, index, rightBracket); |
- accept(ASTVisitor visitor) => visitor.visitIndexExpression(this); |
- Token get beginToken { |
- if (_target != null) { |
- return _target.beginToken; |
- } |
- return period; |
- } |
- |
- /** |
- * Return the best element available for this operator. If resolution was able to find a better |
- * element based on type propagation, that element will be returned. Otherwise, the element found |
- * using the result of static analysis will be returned. If resolution has not been performed, |
- * then `null` will be returned. |
- * |
- * @return the best element available for this operator |
- */ |
- MethodElement get bestElement { |
- MethodElement element = propagatedElement; |
- if (element == null) { |
- element = staticElement; |
- } |
- return element; |
- } |
- Token get endToken => _rightBracket; |
- |
- /** |
- * Return the expression used to compute the index. |
- * |
- * @return the expression used to compute the index |
- */ |
- Expression get index => _index; |
- |
- /** |
- * Return the left square bracket. |
- * |
- * @return the left square bracket |
- */ |
- Token get leftBracket => _leftBracket; |
- |
- /** |
- * Return the element associated with the operator based on the propagated type of the target, or |
- * `null` if the AST structure has not been resolved or if the operator could not be |
- * resolved. One example of the latter case is an operator that is not defined for the type of the |
- * target. |
- * |
- * @return the element associated with this operator |
- */ |
- MethodElement get propagatedElement => _propagatedElement; |
- |
- /** |
- * 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 [getTarget]. If this index |
- * expression is part of a cascade expression, then the target expression stored with the cascade |
- * expression is returned. |
- * |
- * @return the expression used to compute the object being indexed |
- * @see #getTarget() |
- */ |
- Expression get realTarget { |
- if (isCascaded) { |
- ASTNode ancestor = parent; |
- while (ancestor is! CascadeExpression) { |
- if (ancestor == null) { |
- return _target; |
- } |
- ancestor = ancestor.parent; |
- } |
- return ((ancestor as CascadeExpression)).target; |
- } |
- return _target; |
- } |
- |
- /** |
- * Return the right square bracket. |
- * |
- * @return the right square bracket |
- */ |
- Token get rightBracket => _rightBracket; |
- |
- /** |
- * Return the element associated with the operator based on the static type of the target, or |
- * `null` if the AST structure has not been resolved or if the operator could not be |
- * resolved. One example of the latter case is an operator that is not defined for the type of the |
- * target. |
- * |
- * @return the element associated with the operator |
- */ |
- MethodElement get staticElement => _staticElement; |
- |
- /** |
- * Return the expression used to compute the object being indexed, or `null` if this index |
- * expression is part of a cascade expression. |
- * |
- * @return the expression used to compute the object being indexed |
- * @see #getRealTarget() |
- */ |
- Expression get target => _target; |
- |
- /** |
- * 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. |
- * |
- * @return `true` if this expression is in a context where the operator '[]' will be invoked |
- */ |
- bool inGetterContext() { |
- ASTNode parent = this.parent; |
- if (parent is AssignmentExpression) { |
- AssignmentExpression assignment = parent as AssignmentExpression; |
- if (identical(assignment.leftHandSide, this) && identical(assignment.operator.type, TokenType.EQ)) { |
- return false; |
- } |
- } |
- return true; |
- } |
- |
- /** |
- * 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. |
- * |
- * @return `true` if this expression is in a context where the operator '[]=' will be |
- * invoked |
- */ |
- bool inSetterContext() { |
- ASTNode parent = this.parent; |
- if (parent is PrefixExpression) { |
- return ((parent as PrefixExpression)).operator.type.isIncrementOperator; |
- } else if (parent is PostfixExpression) { |
- return true; |
- } else if (parent is AssignmentExpression) { |
- return identical(((parent as AssignmentExpression)).leftHandSide, this); |
- } |
- return false; |
- } |
- bool get isAssignable => true; |
- |
- /** |
- * 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]. |
- * |
- * @return `true` if this expression is cascaded |
- */ |
- bool get isCascaded => period != null; |
- |
- /** |
- * Set the expression used to compute the index to the given expression. |
- * |
- * @param expression the expression used to compute the index |
- */ |
- void set index(Expression expression) { |
- _index = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the left square bracket to the given token. |
- * |
- * @param bracket the left square bracket |
- */ |
- void set leftBracket(Token bracket) { |
- _leftBracket = bracket; |
- } |
- |
- /** |
- * Set the element associated with the operator based on the propagated type of the target to the |
- * given element. |
- * |
- * @param element the element to be associated with this operator |
- */ |
- void set propagatedElement(MethodElement element) { |
- _propagatedElement = element; |
- } |
- |
- /** |
- * Set the right square bracket to the given token. |
- * |
- * @param bracket the right square bracket |
- */ |
- void set rightBracket(Token bracket) { |
- _rightBracket = bracket; |
- } |
- |
- /** |
- * Set the element associated with the operator based on the static type of the target to the |
- * given element. |
- * |
- * @param element the static element to be associated with the operator |
- */ |
- void set staticElement(MethodElement element) { |
- _staticElement = element; |
- } |
- |
- /** |
- * Set the expression used to compute the object being indexed to the given expression. |
- * |
- * @param expression the expression used to compute the object being indexed |
- */ |
- void set target(Expression expression) { |
- _target = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_target, visitor); |
- safelyVisitChild(_index, visitor); |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on |
- * propagated type information, then return the parameter element representing the parameter to |
- * which the value of the index expression will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getPropagatedParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the index |
- * expression will be bound |
- */ |
- ParameterElement get propagatedParameterElementForIndex { |
- if (_propagatedElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _propagatedElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on static |
- * type information, then return the parameter element representing the parameter to which the |
- * value of the index expression will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getStaticParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the index |
- * expression will be bound |
- */ |
- ParameterElement get staticParameterElementForIndex { |
- if (_staticElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _staticElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
-} |
-/** |
- * Instances of the class `InstanceCreationExpression` represent an instance creation |
- * expression. |
- * |
- * <pre> |
- * newExpression ::= |
- * ('new' | 'const') [TypeName] ('.' [SimpleIdentifier])? [ArgumentList] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class InstanceCreationExpression extends Expression { |
- |
- /** |
- * The keyword used to indicate how an object should be created. |
- */ |
- Token keyword; |
- |
- /** |
- * The name of the constructor to be invoked. |
- */ |
- ConstructorName constructorName; |
- |
- /** |
- * The list of arguments to the constructor. |
- */ |
- ArgumentList _argumentList; |
- |
- /** |
- * The element associated with the 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 staticElement; |
- |
- /** |
- * Initialize a newly created instance creation expression. |
- * |
- * @param keyword the keyword used to indicate how an object should be created |
- * @param constructorName the name of the constructor to be invoked |
- * @param argumentList the list of arguments to the constructor |
- */ |
- InstanceCreationExpression.full(Token keyword, ConstructorName constructorName, ArgumentList argumentList) { |
- this.keyword = keyword; |
- this.constructorName = becomeParentOf(constructorName); |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- |
- /** |
- * Initialize a newly created instance creation expression. |
- * |
- * @param keyword the keyword used to indicate how an object should be created |
- * @param constructorName the name of the constructor to be invoked |
- * @param argumentList the list of arguments to the constructor |
- */ |
- InstanceCreationExpression({Token keyword, ConstructorName constructorName, ArgumentList argumentList}) : this.full(keyword, constructorName, argumentList); |
- accept(ASTVisitor visitor) => visitor.visitInstanceCreationExpression(this); |
- |
- /** |
- * Return the list of arguments to the constructor. |
- * |
- * @return the list of arguments to the constructor |
- */ |
- ArgumentList get argumentList => _argumentList; |
- Token get beginToken => keyword; |
- Token get endToken => _argumentList.endToken; |
- |
- /** |
- * Return `true` if this creation expression is used to invoke a constant constructor. |
- * |
- * @return `true` if this creation expression is used to invoke a constant constructor |
- */ |
- bool get isConst => keyword is KeywordToken && identical(((keyword as KeywordToken)).keyword, Keyword.CONST); |
- |
- /** |
- * Set the list of arguments to the constructor to the given list. |
- * |
- * @param argumentList the list of arguments to the constructor |
- */ |
- void set argumentList(ArgumentList argumentList) { |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(constructorName, visitor); |
- safelyVisitChild(_argumentList, visitor); |
- } |
-} |
-/** |
- * Instances of the class `IntegerLiteral` represent an integer literal expression. |
- * |
- * <pre> |
- * integerLiteral ::= |
- * decimalIntegerLiteral |
- * | hexidecimalIntegerLiteral |
- * |
- * decimalIntegerLiteral ::= |
- * decimalDigit+ |
- * |
- * hexidecimalIntegerLiteral ::= |
- * '0x' hexidecimalDigit+ |
- * | '0X' hexidecimalDigit+ |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class IntegerLiteral extends Literal { |
- |
- /** |
- * The token representing the literal. |
- */ |
- Token literal; |
- |
- /** |
- * The value of the literal. |
- */ |
- int value = 0; |
- |
- /** |
- * Initialize a newly created integer literal. |
- * |
- * @param literal the token representing the literal |
- * @param value the value of the literal |
- */ |
- IntegerLiteral.full(Token literal, int value) { |
- this.literal = literal; |
- this.value = value; |
- } |
- |
- /** |
- * Initialize a newly created integer literal. |
- * |
- * @param literal the token representing the literal |
- * @param value the value of the literal |
- */ |
- IntegerLiteral({Token literal, int value}) : this.full(literal, value); |
- accept(ASTVisitor visitor) => visitor.visitIntegerLiteral(this); |
- Token get beginToken => literal; |
- Token get endToken => literal; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * The abstract class `InterpolationElement` defines the behavior common to elements within a |
- * [StringInterpolation]. |
- * |
- * <pre> |
- * interpolationElement ::= |
- * [InterpolationExpression] |
- * | [InterpolationString] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class InterpolationElement extends ASTNode { |
-} |
-/** |
- * Instances of the class `InterpolationExpression` represent an expression embedded in a |
- * string interpolation. |
- * |
- * <pre> |
- * interpolationExpression ::= |
- * '$' [SimpleIdentifier] |
- * | '$' '{' [Expression] '}' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class InterpolationExpression extends InterpolationElement { |
- |
- /** |
- * 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 leftBracket; |
- |
- /** |
- * The expression to be evaluated for the value to be converted into a string. |
- */ |
- Expression _expression; |
- |
- /** |
- * The right curly bracket, or `null` if the expression is an identifier without brackets. |
- */ |
- Token rightBracket; |
- |
- /** |
- * Initialize a newly created interpolation expression. |
- * |
- * @param leftBracket the left curly bracket |
- * @param expression the expression to be evaluated for the value to be converted into a string |
- * @param rightBracket the right curly bracket |
- */ |
- InterpolationExpression.full(Token leftBracket, Expression expression, Token rightBracket) { |
- this.leftBracket = leftBracket; |
- this._expression = becomeParentOf(expression); |
- this.rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created interpolation expression. |
- * |
- * @param leftBracket the left curly bracket |
- * @param expression the expression to be evaluated for the value to be converted into a string |
- * @param rightBracket the right curly bracket |
- */ |
- InterpolationExpression({Token leftBracket, Expression expression, Token rightBracket}) : this.full(leftBracket, expression, rightBracket); |
- accept(ASTVisitor visitor) => visitor.visitInterpolationExpression(this); |
- Token get beginToken => leftBracket; |
- Token get endToken { |
- if (rightBracket != null) { |
- return rightBracket; |
- } |
- return _expression.endToken; |
- } |
- |
- /** |
- * Return the expression to be evaluated for the value to be converted into a string. |
- * |
- * @return the expression to be evaluated for the value to be converted into a string |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Set the expression to be evaluated for the value to be converted into a string to the given |
- * expression. |
- * |
- * @param expression the expression to be evaluated for the value to be converted into a string |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_expression, visitor); |
- } |
-} |
-/** |
- * Instances of the class `InterpolationString` represent a non-empty substring of an |
- * interpolated string. |
- * |
- * <pre> |
- * interpolationString ::= |
- * characters |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class InterpolationString extends InterpolationElement { |
- |
- /** |
- * The characters that will be added to the string. |
- */ |
- Token _contents; |
- |
- /** |
- * The value of the literal. |
- */ |
- String _value; |
- |
- /** |
- * Initialize a newly created string of characters that are part of a string interpolation. |
- * |
- * @param the characters that will be added to the string |
- * @param value the value of the literal |
- */ |
- InterpolationString.full(Token contents, String value) { |
- this._contents = contents; |
- this._value = value; |
- } |
- |
- /** |
- * Initialize a newly created string of characters that are part of a string interpolation. |
- * |
- * @param the characters that will be added to the string |
- * @param value the value of the literal |
- */ |
- InterpolationString({Token contents, String value}) : this.full(contents, value); |
- accept(ASTVisitor visitor) => visitor.visitInterpolationString(this); |
- Token get beginToken => _contents; |
- |
- /** |
- * Return the characters that will be added to the string. |
- * |
- * @return the characters that will be added to the string |
- */ |
- Token get contents => _contents; |
- Token get endToken => _contents; |
- |
- /** |
- * Return the value of the literal. |
- * |
- * @return the value of the literal |
- */ |
- String get value => _value; |
- |
- /** |
- * Set the characters that will be added to the string to those in the given string. |
- * |
- * @param string the characters that will be added to the string |
- */ |
- void set contents(Token string) { |
- _contents = string; |
- } |
- |
- /** |
- * Set the value of the literal to the given string. |
- * |
- * @param string the value of the literal |
- */ |
- void set value(String string) { |
- _value = string; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `IsExpression` represent an is expression. |
- * |
- * <pre> |
- * isExpression ::= |
- * [Expression] 'is' '!'? [TypeName] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class IsExpression extends Expression { |
- |
- /** |
- * The expression used to compute the value whose type is being tested. |
- */ |
- Expression _expression; |
- |
- /** |
- * The is operator. |
- */ |
- Token isOperator; |
- |
- /** |
- * The not operator, or `null` if the sense of the test is not negated. |
- */ |
- Token notOperator; |
- |
- /** |
- * The name of the type being tested for. |
- */ |
- TypeName _type; |
- |
- /** |
- * Initialize a newly created is expression. |
- * |
- * @param expression the expression used to compute the value whose type is being tested |
- * @param isOperator the is operator |
- * @param notOperator the not operator, or `null` if the sense of the test is not negated |
- * @param type the name of the type being tested for |
- */ |
- IsExpression.full(Expression expression, Token isOperator, Token notOperator, TypeName type) { |
- this._expression = becomeParentOf(expression); |
- this.isOperator = isOperator; |
- this.notOperator = notOperator; |
- this._type = becomeParentOf(type); |
- } |
- |
- /** |
- * Initialize a newly created is expression. |
- * |
- * @param expression the expression used to compute the value whose type is being tested |
- * @param isOperator the is operator |
- * @param notOperator the not operator, or `null` if the sense of the test is not negated |
- * @param type the name of the type being tested for |
- */ |
- IsExpression({Expression expression, Token isOperator, Token notOperator, TypeName type}) : this.full(expression, isOperator, notOperator, type); |
- accept(ASTVisitor visitor) => visitor.visitIsExpression(this); |
- Token get beginToken => _expression.beginToken; |
- Token get endToken => _type.endToken; |
- |
- /** |
- * Return the expression used to compute the value whose type is being tested. |
- * |
- * @return the expression used to compute the value whose type is being tested |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Return the name of the type being tested for. |
- * |
- * @return the name of the type being tested for |
- */ |
- TypeName get type => _type; |
- |
- /** |
- * Set the expression used to compute the value whose type is being tested to the given |
- * expression. |
- * |
- * @param expression the expression used to compute the value whose type is being tested |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the name of the type being tested for to the given name. |
- * |
- * @param name the name of the type being tested for |
- */ |
- void set type(TypeName name) { |
- this._type = becomeParentOf(name); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_expression, visitor); |
- safelyVisitChild(_type, visitor); |
- } |
-} |
-/** |
- * Instances of the class `Label` represent a label. |
- * |
- * <pre> |
- * label ::= |
- * [SimpleIdentifier] ':' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class Label extends ASTNode { |
- |
- /** |
- * The label being associated with the statement. |
- */ |
- SimpleIdentifier _label; |
- |
- /** |
- * The colon that separates the label from the statement. |
- */ |
- Token colon; |
- |
- /** |
- * Initialize a newly created label. |
- * |
- * @param label the label being applied |
- * @param colon the colon that separates the label from whatever follows |
- */ |
- Label.full(SimpleIdentifier label, Token colon) { |
- this._label = becomeParentOf(label); |
- this.colon = colon; |
- } |
- |
- /** |
- * Initialize a newly created label. |
- * |
- * @param label the label being applied |
- * @param colon the colon that separates the label from whatever follows |
- */ |
- Label({SimpleIdentifier label, Token colon}) : this.full(label, colon); |
- accept(ASTVisitor visitor) => visitor.visitLabel(this); |
- Token get beginToken => _label.beginToken; |
- Token get endToken => colon; |
- |
- /** |
- * Return the label being associated with the statement. |
- * |
- * @return the label being associated with the statement |
- */ |
- SimpleIdentifier get label => _label; |
- |
- /** |
- * Set the label being associated with the statement to the given label. |
- * |
- * @param label the label being associated with the statement |
- */ |
- void set label(SimpleIdentifier label) { |
- this._label = becomeParentOf(label); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_label, visitor); |
- } |
-} |
-/** |
- * Instances of the class `LabeledStatement` represent a statement that has a label associated |
- * with them. |
- * |
- * <pre> |
- * labeledStatement ::= |
- * [Label]+ [Statement] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class LabeledStatement extends Statement { |
- |
- /** |
- * The labels being associated with the statement. |
- */ |
- NodeList<Label> labels; |
- |
- /** |
- * The statement with which the labels are being associated. |
- */ |
- Statement _statement; |
- |
- /** |
- * Initialize a newly created labeled statement. |
- * |
- * @param labels the labels being associated with the statement |
- * @param statement the statement with which the labels are being associated |
- */ |
- LabeledStatement.full(List<Label> labels, Statement statement) { |
- this.labels = new NodeList<Label>(this); |
- this.labels.addAll(labels); |
- this._statement = becomeParentOf(statement); |
- } |
- |
- /** |
- * Initialize a newly created labeled statement. |
- * |
- * @param labels the labels being associated with the statement |
- * @param statement the statement with which the labels are being associated |
- */ |
- LabeledStatement({List<Label> labels, Statement statement}) : this.full(labels, statement); |
- accept(ASTVisitor visitor) => visitor.visitLabeledStatement(this); |
- Token get beginToken { |
- if (!labels.isEmpty) { |
- return labels.beginToken; |
- } |
- return _statement.beginToken; |
- } |
- Token get endToken => _statement.endToken; |
- |
- /** |
- * Return the statement with which the labels are being associated. |
- * |
- * @return the statement with which the labels are being associated |
- */ |
- Statement get statement => _statement; |
- |
- /** |
- * Set the statement with which the labels are being associated to the given statement. |
- * |
- * @param statement the statement with which the labels are being associated |
- */ |
- void set statement(Statement statement) { |
- this._statement = becomeParentOf(statement); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- labels.accept(visitor); |
- safelyVisitChild(_statement, visitor); |
- } |
-} |
-/** |
- * Instances of the class `LibraryDirective` represent a library directive. |
- * |
- * <pre> |
- * libraryDirective ::= |
- * [Annotation] 'library' [Identifier] ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class LibraryDirective extends Directive { |
- |
- /** |
- * The token representing the 'library' token. |
- */ |
- Token libraryToken; |
- |
- /** |
- * The name of the library being defined. |
- */ |
- LibraryIdentifier _name; |
- |
- /** |
- * The semicolon terminating the directive. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created library directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param libraryToken the token representing the 'library' token |
- * @param name the name of the library being defined |
- * @param semicolon the semicolon terminating the directive |
- */ |
- LibraryDirective.full(Comment comment, List<Annotation> metadata, Token libraryToken, LibraryIdentifier name, Token semicolon) : super.full(comment, metadata) { |
- this.libraryToken = libraryToken; |
- this._name = becomeParentOf(name); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created library directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param libraryToken the token representing the 'library' token |
- * @param name the name of the library being defined |
- * @param semicolon the semicolon terminating the directive |
- */ |
- LibraryDirective({Comment comment, List<Annotation> metadata, Token libraryToken, LibraryIdentifier name, Token semicolon}) : this.full(comment, metadata, libraryToken, name, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitLibraryDirective(this); |
- Token get endToken => semicolon; |
- Token get keyword => libraryToken; |
- |
- /** |
- * Return the name of the library being defined. |
- * |
- * @return the name of the library being defined |
- */ |
- LibraryIdentifier get name => _name; |
- |
- /** |
- * Set the name of the library being defined to the given name. |
- * |
- * @param name the name of the library being defined |
- */ |
- void set name(LibraryIdentifier name) { |
- this._name = becomeParentOf(name); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_name, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata => libraryToken; |
-} |
-/** |
- * Instances of the class `LibraryIdentifier` represent the identifier for a library. |
- * |
- * <pre> |
- * libraryIdentifier ::= |
- * [SimpleIdentifier] ('.' [SimpleIdentifier])* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class LibraryIdentifier extends Identifier { |
- |
- /** |
- * The components of the identifier. |
- */ |
- NodeList<SimpleIdentifier> components; |
- |
- /** |
- * Initialize a newly created prefixed identifier. |
- * |
- * @param components the components of the identifier |
- */ |
- LibraryIdentifier.full(List<SimpleIdentifier> components) { |
- this.components = new NodeList<SimpleIdentifier>(this); |
- this.components.addAll(components); |
- } |
- |
- /** |
- * Initialize a newly created prefixed identifier. |
- * |
- * @param components the components of the identifier |
- */ |
- LibraryIdentifier({List<SimpleIdentifier> components}) : this.full(components); |
- accept(ASTVisitor visitor) => visitor.visitLibraryIdentifier(this); |
- Token get beginToken => components.beginToken; |
- Element get bestElement => staticElement; |
- Token get endToken => components.endToken; |
- String get name { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- bool needsPeriod = false; |
- for (SimpleIdentifier identifier in components) { |
- if (needsPeriod) { |
- builder.append("."); |
- } else { |
- needsPeriod = true; |
- } |
- builder.append(identifier.name); |
- } |
- return builder.toString(); |
- } |
- Element get propagatedElement => null; |
- Element get staticElement => null; |
- void visitChildren(ASTVisitor visitor) { |
- components.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `ListLiteral` represent a list literal. |
- * |
- * <pre> |
- * listLiteral ::= |
- * 'const'? ('<' [TypeName] '>')? '[' ([Expression] ','?)? ']' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ListLiteral extends TypedLiteral { |
- |
- /** |
- * The left square bracket. |
- */ |
- Token _leftBracket; |
- |
- /** |
- * The expressions used to compute the elements of the list. |
- */ |
- NodeList<Expression> elements; |
- |
- /** |
- * The right square bracket. |
- */ |
- Token _rightBracket; |
- |
- /** |
- * Initialize a newly created list literal. |
- * |
- * @param constKeyword the token representing the 'const' keyword |
- * @param typeArguments the type argument associated with this literal, or `null` if no type |
- * arguments were declared |
- * @param leftBracket the left square bracket |
- * @param elements the expressions used to compute the elements of the list |
- * @param rightBracket the right square bracket |
- */ |
- ListLiteral.full(Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<Expression> elements, Token rightBracket) : super.full(constKeyword, typeArguments) { |
- this.elements = new NodeList<Expression>(this); |
- this._leftBracket = leftBracket; |
- this.elements.addAll(elements); |
- this._rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created list literal. |
- * |
- * @param constKeyword the token representing the 'const' keyword |
- * @param typeArguments the type argument associated with this literal, or `null` if no type |
- * arguments were declared |
- * @param leftBracket the left square bracket |
- * @param elements the expressions used to compute the elements of the list |
- * @param rightBracket the right square bracket |
- */ |
- ListLiteral({Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<Expression> elements, Token rightBracket}) : this.full(constKeyword, typeArguments, leftBracket, elements, rightBracket); |
- accept(ASTVisitor visitor) => visitor.visitListLiteral(this); |
- Token get beginToken { |
- Token token = constKeyword; |
- if (token != null) { |
- return token; |
- } |
- TypeArgumentList typeArguments = this.typeArguments; |
- if (typeArguments != null) { |
- return typeArguments.beginToken; |
- } |
- return _leftBracket; |
- } |
- Token get endToken => _rightBracket; |
- |
- /** |
- * Return the left square bracket. |
- * |
- * @return the left square bracket |
- */ |
- Token get leftBracket => _leftBracket; |
- |
- /** |
- * Return the right square bracket. |
- * |
- * @return the right square bracket |
- */ |
- Token get rightBracket => _rightBracket; |
- |
- /** |
- * Set the left square bracket to the given token. |
- * |
- * @param bracket the left square bracket |
- */ |
- void set leftBracket(Token bracket) { |
- _leftBracket = bracket; |
- } |
- |
- /** |
- * Set the right square bracket to the given token. |
- * |
- * @param bracket the right square bracket |
- */ |
- void set rightBracket(Token bracket) { |
- _rightBracket = bracket; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- elements.accept(visitor); |
- } |
-} |
-/** |
- * The abstract class `Literal` defines the behavior common to nodes that represent a literal |
- * expression. |
- * |
- * <pre> |
- * literal ::= |
- * [BooleanLiteral] |
- * | [DoubleLiteral] |
- * | [IntegerLiteral] |
- * | [ListLiteral] |
- * | [MapLiteral] |
- * | [NullLiteral] |
- * | [StringLiteral] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class Literal extends Expression { |
-} |
-/** |
- * Instances of the class `MapLiteral` represent a literal map. |
- * |
- * <pre> |
- * mapLiteral ::= |
- * 'const'? ('<' [TypeName] (',' [TypeName])* '>')? '{' ([MapLiteralEntry] (',' [MapLiteralEntry])* ','?)? '}' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class MapLiteral extends TypedLiteral { |
- |
- /** |
- * The left curly bracket. |
- */ |
- Token _leftBracket; |
- |
- /** |
- * The entries in the map. |
- */ |
- NodeList<MapLiteralEntry> entries; |
- |
- /** |
- * The right curly bracket. |
- */ |
- Token _rightBracket; |
- |
- /** |
- * Initialize a newly created map literal. |
- * |
- * @param constKeyword the token representing the 'const' keyword |
- * @param typeArguments the type argument associated with this literal, or `null` if no type |
- * arguments were declared |
- * @param leftBracket the left curly bracket |
- * @param entries the entries in the map |
- * @param rightBracket the right curly bracket |
- */ |
- MapLiteral.full(Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<MapLiteralEntry> entries, Token rightBracket) : super.full(constKeyword, typeArguments) { |
- this.entries = new NodeList<MapLiteralEntry>(this); |
- this._leftBracket = leftBracket; |
- this.entries.addAll(entries); |
- this._rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created map literal. |
- * |
- * @param constKeyword the token representing the 'const' keyword |
- * @param typeArguments the type argument associated with this literal, or `null` if no type |
- * arguments were declared |
- * @param leftBracket the left curly bracket |
- * @param entries the entries in the map |
- * @param rightBracket the right curly bracket |
- */ |
- MapLiteral({Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<MapLiteralEntry> entries, Token rightBracket}) : this.full(constKeyword, typeArguments, leftBracket, entries, rightBracket); |
- accept(ASTVisitor visitor) => visitor.visitMapLiteral(this); |
- Token get beginToken { |
- Token token = constKeyword; |
- if (token != null) { |
- return token; |
- } |
- TypeArgumentList typeArguments = this.typeArguments; |
- if (typeArguments != null) { |
- return typeArguments.beginToken; |
- } |
- return _leftBracket; |
- } |
- Token get endToken => _rightBracket; |
- |
- /** |
- * Return the left curly bracket. |
- * |
- * @return the left curly bracket |
- */ |
- Token get leftBracket => _leftBracket; |
- |
- /** |
- * Return the right curly bracket. |
- * |
- * @return the right curly bracket |
- */ |
- Token get rightBracket => _rightBracket; |
- |
- /** |
- * Set the left curly bracket to the given token. |
- * |
- * @param bracket the left curly bracket |
- */ |
- void set leftBracket(Token bracket) { |
- _leftBracket = bracket; |
- } |
- |
- /** |
- * Set the right curly bracket to the given token. |
- * |
- * @param bracket the right curly bracket |
- */ |
- void set rightBracket(Token bracket) { |
- _rightBracket = bracket; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- entries.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `MapLiteralEntry` represent a single key/value pair in a map |
- * literal. |
- * |
- * <pre> |
- * mapLiteralEntry ::= |
- * [Expression] ':' [Expression] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class MapLiteralEntry extends ASTNode { |
- |
- /** |
- * The expression computing the key with which the value will be associated. |
- */ |
- Expression _key; |
- |
- /** |
- * The colon that separates the key from the value. |
- */ |
- Token separator; |
- |
- /** |
- * The expression computing the value that will be associated with the key. |
- */ |
- Expression _value; |
- |
- /** |
- * Initialize a newly created map literal entry. |
- * |
- * @param key the expression computing the key with which the value will be associated |
- * @param separator the colon that separates the key from the value |
- * @param value the expression computing the value that will be associated with the key |
- */ |
- MapLiteralEntry.full(Expression key, Token separator, Expression value) { |
- this._key = becomeParentOf(key); |
- this.separator = separator; |
- this._value = becomeParentOf(value); |
- } |
- |
- /** |
- * Initialize a newly created map literal entry. |
- * |
- * @param key the expression computing the key with which the value will be associated |
- * @param separator the colon that separates the key from the value |
- * @param value the expression computing the value that will be associated with the key |
- */ |
- MapLiteralEntry({Expression key, Token separator, Expression value}) : this.full(key, separator, value); |
- accept(ASTVisitor visitor) => visitor.visitMapLiteralEntry(this); |
- Token get beginToken => _key.beginToken; |
- Token get endToken => _value.endToken; |
- |
- /** |
- * Return the expression computing the key with which the value will be associated. |
- * |
- * @return the expression computing the key with which the value will be associated |
- */ |
- Expression get key => _key; |
- |
- /** |
- * Return the expression computing the value that will be associated with the key. |
- * |
- * @return the expression computing the value that will be associated with the key |
- */ |
- Expression get value => _value; |
- |
- /** |
- * Set the expression computing the key with which the value will be associated to the given |
- * string. |
- * |
- * @param string the expression computing the key with which the value will be associated |
- */ |
- void set key(Expression string) { |
- _key = becomeParentOf(string); |
- } |
- |
- /** |
- * Set the expression computing the value that will be associated with the key to the given |
- * expression. |
- * |
- * @param expression the expression computing the value that will be associated with the key |
- */ |
- void set value(Expression expression) { |
- _value = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_key, visitor); |
- safelyVisitChild(_value, visitor); |
- } |
-} |
-/** |
- * Instances of the class `MethodDeclaration` represent a method declaration. |
- * |
- * <pre> |
- * methodDeclaration ::= |
- * methodSignature [FunctionBody] |
- * |
- * methodSignature ::= |
- * 'external'? ('abstract' | 'static')? [Type]? ('get' | 'set')? methodName |
- * [FormalParameterList] |
- * |
- * methodName ::= |
- * [SimpleIdentifier] |
- * | 'operator' [SimpleIdentifier] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class MethodDeclaration extends ClassMember { |
- |
- /** |
- * The token for the 'external' keyword, or `null` if the constructor is not external. |
- */ |
- Token externalKeyword; |
- |
- /** |
- * The token representing the 'abstract' or 'static' keyword, or `null` if neither modifier |
- * was specified. |
- */ |
- Token modifierKeyword; |
- |
- /** |
- * The return type of the method, or `null` if no return type was declared. |
- */ |
- TypeName _returnType; |
- |
- /** |
- * The token representing the 'get' or 'set' keyword, or `null` if this is a method |
- * declaration rather than a property declaration. |
- */ |
- Token propertyKeyword; |
- |
- /** |
- * The token representing the 'operator' keyword, or `null` if this method does not declare |
- * an operator. |
- */ |
- Token operatorKeyword; |
- |
- /** |
- * The name of the method. |
- */ |
- SimpleIdentifier _name; |
- |
- /** |
- * The parameters associated with the method, or `null` if this method declares a getter. |
- */ |
- FormalParameterList _parameters; |
- |
- /** |
- * The body of the method. |
- */ |
- FunctionBody _body; |
- |
- /** |
- * Initialize a newly created method declaration. |
- * |
- * @param externalKeyword the token for the 'external' keyword |
- * @param comment the documentation comment associated with this method |
- * @param metadata the annotations associated with this method |
- * @param modifierKeyword the token representing the 'abstract' or 'static' keyword |
- * @param returnType the return type of the method |
- * @param propertyKeyword the token representing the 'get' or 'set' keyword |
- * @param operatorKeyword the token representing the 'operator' keyword |
- * @param name the name of the method |
- * @param parameters the parameters associated with the method, or `null` if this method |
- * declares a getter |
- * @param body the body of the method |
- */ |
- MethodDeclaration.full(Comment comment, List<Annotation> metadata, Token externalKeyword, Token modifierKeyword, TypeName returnType, Token propertyKeyword, Token operatorKeyword, SimpleIdentifier name, FormalParameterList parameters, FunctionBody body) : super.full(comment, metadata) { |
- this.externalKeyword = externalKeyword; |
- this.modifierKeyword = modifierKeyword; |
- this._returnType = becomeParentOf(returnType); |
- this.propertyKeyword = propertyKeyword; |
- this.operatorKeyword = operatorKeyword; |
- this._name = becomeParentOf(name); |
- this._parameters = becomeParentOf(parameters); |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Initialize a newly created method declaration. |
- * |
- * @param externalKeyword the token for the 'external' keyword |
- * @param comment the documentation comment associated with this method |
- * @param metadata the annotations associated with this method |
- * @param modifierKeyword the token representing the 'abstract' or 'static' keyword |
- * @param returnType the return type of the method |
- * @param propertyKeyword the token representing the 'get' or 'set' keyword |
- * @param operatorKeyword the token representing the 'operator' keyword |
- * @param name the name of the method |
- * @param parameters the parameters associated with the method, or `null` if this method |
- * declares a getter |
- * @param body the body of the method |
- */ |
- MethodDeclaration({Comment comment, List<Annotation> metadata, Token externalKeyword, Token modifierKeyword, TypeName returnType, Token propertyKeyword, Token operatorKeyword, SimpleIdentifier name, FormalParameterList parameters, FunctionBody body}) : this.full(comment, metadata, externalKeyword, modifierKeyword, returnType, propertyKeyword, operatorKeyword, name, parameters, body); |
- accept(ASTVisitor visitor) => visitor.visitMethodDeclaration(this); |
- |
- /** |
- * Return the body of the method. |
- * |
- * @return the body of the method |
- */ |
- FunctionBody get body => _body; |
- |
- /** |
- * Return the element associated with this method, or `null` if the AST structure has not |
- * been resolved. The element can either be a [MethodElement], if this represents the |
- * declaration of a normal method, or a [PropertyAccessorElement] if this represents the |
- * declaration of either a getter or a setter. |
- * |
- * @return the element associated with this method |
- */ |
- ExecutableElement get element => _name != null ? (_name.staticElement as ExecutableElement) : null; |
- Token get endToken => _body.endToken; |
- |
- /** |
- * Return the name of the method. |
- * |
- * @return the name of the method |
- */ |
- SimpleIdentifier get name => _name; |
- |
- /** |
- * Return the parameters associated with the method, or `null` if this method declares a |
- * getter. |
- * |
- * @return the parameters associated with the method |
- */ |
- FormalParameterList get parameters => _parameters; |
- |
- /** |
- * Return the return type of the method, or `null` if no return type was declared. |
- * |
- * @return the return type of the method |
- */ |
- TypeName get returnType => _returnType; |
- |
- /** |
- * Return `true` if this method is declared to be an abstract method. |
- * |
- * @return `true` if this method is declared to be an abstract method |
- */ |
- bool get isAbstract => externalKeyword == null && (_body is EmptyFunctionBody); |
- |
- /** |
- * Return `true` if this method declares a getter. |
- * |
- * @return `true` if this method declares a getter |
- */ |
- bool get isGetter => propertyKeyword != null && identical(((propertyKeyword as KeywordToken)).keyword, Keyword.GET); |
- |
- /** |
- * Return `true` if this method declares an operator. |
- * |
- * @return `true` if this method declares an operator |
- */ |
- bool get isOperator => operatorKeyword != null; |
- |
- /** |
- * Return `true` if this method declares a setter. |
- * |
- * @return `true` if this method declares a setter |
- */ |
- bool get isSetter => propertyKeyword != null && identical(((propertyKeyword as KeywordToken)).keyword, Keyword.SET); |
- |
- /** |
- * Return `true` if this method is declared to be a static method. |
- * |
- * @return `true` if this method is declared to be a static method |
- */ |
- bool get isStatic => modifierKeyword != null && identical(((modifierKeyword as KeywordToken)).keyword, Keyword.STATIC); |
- |
- /** |
- * Set the body of the method to the given function body. |
- * |
- * @param functionBody the body of the method |
- */ |
- void set body(FunctionBody functionBody) { |
- _body = becomeParentOf(functionBody); |
- } |
- |
- /** |
- * Set the name of the method to the given identifier. |
- * |
- * @param identifier the name of the method |
- */ |
- void set name(SimpleIdentifier identifier) { |
- _name = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Set the parameters associated with the method to the given list of parameters. |
- * |
- * @param parameters the parameters associated with the method |
- */ |
- void set parameters(FormalParameterList parameters) { |
- this._parameters = becomeParentOf(parameters); |
- } |
- |
- /** |
- * Set the return type of the method to the given type name. |
- * |
- * @param typeName the return type of the method |
- */ |
- void set returnType(TypeName typeName) { |
- _returnType = becomeParentOf(typeName); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_returnType, visitor); |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_parameters, visitor); |
- safelyVisitChild(_body, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata { |
- if (modifierKeyword != null) { |
- return modifierKeyword; |
- } else if (_returnType != null) { |
- return _returnType.beginToken; |
- } else if (propertyKeyword != null) { |
- return propertyKeyword; |
- } else if (operatorKeyword != null) { |
- return operatorKeyword; |
- } |
- return _name.beginToken; |
- } |
-} |
-/** |
- * Instances of the class `MethodInvocation` represent 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. |
- * |
- * <pre> |
- * methodInvoction ::= |
- * ([Expression] '.')? [SimpleIdentifier] [ArgumentList] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class MethodInvocation extends Expression { |
- |
- /** |
- * 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`). |
- */ |
- Expression _target; |
- |
- /** |
- * The period that separates the target from the method name, or `null` if there is no |
- * target. |
- */ |
- Token period; |
- |
- /** |
- * The name of the method being invoked. |
- */ |
- SimpleIdentifier _methodName; |
- |
- /** |
- * The list of arguments to the method. |
- */ |
- ArgumentList _argumentList; |
- |
- /** |
- * Initialize a newly created method invocation. |
- * |
- * @param target the expression producing the object on which the method is defined |
- * @param period the period that separates the target from the method name |
- * @param methodName the name of the method being invoked |
- * @param argumentList the list of arguments to the method |
- */ |
- MethodInvocation.full(Expression target, Token period, SimpleIdentifier methodName, ArgumentList argumentList) { |
- this._target = becomeParentOf(target); |
- this.period = period; |
- this._methodName = becomeParentOf(methodName); |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- |
- /** |
- * Initialize a newly created method invocation. |
- * |
- * @param target the expression producing the object on which the method is defined |
- * @param period the period that separates the target from the method name |
- * @param methodName the name of the method being invoked |
- * @param argumentList the list of arguments to the method |
- */ |
- MethodInvocation({Expression target, Token period, SimpleIdentifier methodName, ArgumentList argumentList}) : this.full(target, period, methodName, argumentList); |
- accept(ASTVisitor visitor) => visitor.visitMethodInvocation(this); |
- |
- /** |
- * Return the list of arguments to the method. |
- * |
- * @return the list of arguments to the method |
- */ |
- ArgumentList get argumentList => _argumentList; |
- Token get beginToken { |
- if (_target != null) { |
- return _target.beginToken; |
- } else if (period != null) { |
- return period; |
- } |
- return _methodName.beginToken; |
- } |
- Token get endToken => _argumentList.endToken; |
- |
- /** |
- * Return the name of the method being invoked. |
- * |
- * @return the name of the method being invoked |
- */ |
- SimpleIdentifier get methodName => _methodName; |
- |
- /** |
- * 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 [getTarget]. If this invocation |
- * is part of a cascade expression, then the target stored with the cascade expression is |
- * returned. |
- * |
- * @return the expression used to compute the receiver of the invocation |
- * @see #getTarget() |
- */ |
- Expression get realTarget { |
- if (isCascaded) { |
- ASTNode ancestor = parent; |
- while (ancestor is! CascadeExpression) { |
- if (ancestor == null) { |
- return _target; |
- } |
- ancestor = ancestor.parent; |
- } |
- return ((ancestor as CascadeExpression)).target; |
- } |
- return _target; |
- } |
- |
- /** |
- * 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. |
- * |
- * @return the expression producing the object on which the method is defined |
- * @see #getRealTarget() |
- */ |
- Expression get target => _target; |
- |
- /** |
- * 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]. |
- * |
- * @return `true` if this expression is cascaded |
- */ |
- bool get isCascaded => period != null && identical(period.type, TokenType.PERIOD_PERIOD); |
- |
- /** |
- * Set the list of arguments to the method to the given list. |
- * |
- * @param argumentList the list of arguments to the method |
- */ |
- void set argumentList(ArgumentList argumentList) { |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- |
- /** |
- * Set the name of the method being invoked to the given identifier. |
- * |
- * @param identifier the name of the method being invoked |
- */ |
- void set methodName(SimpleIdentifier identifier) { |
- _methodName = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Set the expression producing the object on which the method is defined to the given expression. |
- * |
- * @param expression the expression producing the object on which the method is defined |
- */ |
- void set target(Expression expression) { |
- _target = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_target, visitor); |
- safelyVisitChild(_methodName, visitor); |
- safelyVisitChild(_argumentList, visitor); |
- } |
-} |
-/** |
- * Instances of the class `NamedExpression` represent an expression that has a name associated |
- * with it. They are used in method invocations when there are named parameters. |
- * |
- * <pre> |
- * namedExpression ::= |
- * [Label] [Expression] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class NamedExpression extends Expression { |
- |
- /** |
- * The name associated with the expression. |
- */ |
- Label _name; |
- |
- /** |
- * The expression with which the name is associated. |
- */ |
- Expression _expression; |
- |
- /** |
- * Initialize a newly created named expression. |
- * |
- * @param name the name associated with the expression |
- * @param expression the expression with which the name is associated |
- */ |
- NamedExpression.full(Label name, Expression expression) { |
- this._name = becomeParentOf(name); |
- this._expression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Initialize a newly created named expression. |
- * |
- * @param name the name associated with the expression |
- * @param expression the expression with which the name is associated |
- */ |
- NamedExpression({Label name, Expression expression}) : this.full(name, expression); |
- accept(ASTVisitor visitor) => visitor.visitNamedExpression(this); |
- Token get beginToken => _name.beginToken; |
- |
- /** |
- * 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. |
- * |
- * @return the element representing the parameter being named by this expression |
- */ |
- ParameterElement get element { |
- Element element = _name.label.staticElement; |
- if (element is ParameterElement) { |
- return element as ParameterElement; |
- } |
- return null; |
- } |
- Token get endToken => _expression.endToken; |
- |
- /** |
- * Return the expression with which the name is associated. |
- * |
- * @return the expression with which the name is associated |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Return the name associated with the expression. |
- * |
- * @return the name associated with the expression |
- */ |
- Label get name => _name; |
- |
- /** |
- * Set the expression with which the name is associated to the given expression. |
- * |
- * @param expression the expression with which the name is associated |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the name associated with the expression to the given identifier. |
- * |
- * @param identifier the name associated with the expression |
- */ |
- void set name(Label identifier) { |
- _name = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_expression, visitor); |
- } |
-} |
-/** |
- * The abstract class `NamespaceDirective` defines the behavior common to nodes that represent |
- * a directive that impacts the namespace of a library. |
- * |
- * <pre> |
- * directive ::= |
- * [ExportDirective] |
- * | [ImportDirective] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class NamespaceDirective extends UriBasedDirective { |
- |
- /** |
- * The token representing the 'import' or 'export' keyword. |
- */ |
- Token _keyword; |
- |
- /** |
- * The combinators used to control which names are imported or exported. |
- */ |
- NodeList<Combinator> combinators; |
- |
- /** |
- * The semicolon terminating the directive. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created namespace directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param keyword the token representing the 'import' or 'export' keyword |
- * @param libraryUri the URI of the library being imported or exported |
- * @param combinators the combinators used to control which names are imported or exported |
- * @param semicolon the semicolon terminating the directive |
- */ |
- NamespaceDirective.full(Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon) : super.full(comment, metadata, libraryUri) { |
- this.combinators = new NodeList<Combinator>(this); |
- this._keyword = keyword; |
- this.combinators.addAll(combinators); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created namespace directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param keyword the token representing the 'import' or 'export' keyword |
- * @param libraryUri the URI of the library being imported or exported |
- * @param combinators the combinators used to control which names are imported or exported |
- * @param semicolon the semicolon terminating the directive |
- */ |
- NamespaceDirective({Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon}) : this.full(comment, metadata, keyword, libraryUri, combinators, semicolon); |
- Token get endToken => semicolon; |
- Token get keyword => _keyword; |
- LibraryElement get uriElement; |
- |
- /** |
- * Set the token representing the 'import' or 'export' keyword to the given token. |
- * |
- * @param exportToken the token representing the 'import' or 'export' keyword |
- */ |
- void set keyword(Token exportToken) { |
- this._keyword = exportToken; |
- } |
- Token get firstTokenAfterCommentAndMetadata => _keyword; |
-} |
-/** |
- * Instances of the class `NativeClause` represent the "native" clause in an class |
- * declaration. |
- * |
- * <pre> |
- * nativeClause ::= |
- * 'native' [StringLiteral] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class NativeClause extends ASTNode { |
- |
- /** |
- * The token representing the 'native' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The name of the native object that implements the class. |
- */ |
- StringLiteral name; |
- |
- /** |
- * Initialize a newly created native clause. |
- * |
- * @param keyword the token representing the 'native' keyword |
- * @param name the name of the native object that implements the class. |
- */ |
- NativeClause.full(Token keyword, StringLiteral name) { |
- this.keyword = keyword; |
- this.name = name; |
- } |
- |
- /** |
- * Initialize a newly created native clause. |
- * |
- * @param keyword the token representing the 'native' keyword |
- * @param name the name of the native object that implements the class. |
- */ |
- NativeClause({Token keyword, StringLiteral name}) : this.full(keyword, name); |
- accept(ASTVisitor visitor) => visitor.visitNativeClause(this); |
- Token get beginToken => keyword; |
- Token get endToken => name.endToken; |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(name, visitor); |
- } |
-} |
-/** |
- * Instances of the class `NativeFunctionBody` represent a function body that consists of a |
- * native keyword followed by a string literal. |
- * |
- * <pre> |
- * nativeFunctionBody ::= |
- * 'native' [SimpleStringLiteral] ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class NativeFunctionBody extends FunctionBody { |
- |
- /** |
- * The token representing 'native' that marks the start of the function body. |
- */ |
- Token nativeToken; |
- |
- /** |
- * The string literal, after the 'native' token. |
- */ |
- StringLiteral stringLiteral; |
- |
- /** |
- * The token representing the semicolon that marks the end of the function body. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created function body consisting of the 'native' token, a string literal, |
- * and a semicolon. |
- * |
- * @param nativeToken the token representing 'native' that marks the start of the function body |
- * @param stringLiteral the string literal |
- * @param semicolon the token representing the semicolon that marks the end of the function body |
- */ |
- NativeFunctionBody.full(Token nativeToken, StringLiteral stringLiteral, Token semicolon) { |
- this.nativeToken = nativeToken; |
- this.stringLiteral = becomeParentOf(stringLiteral); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created function body consisting of the 'native' token, a string literal, |
- * and a semicolon. |
- * |
- * @param nativeToken the token representing 'native' that marks the start of the function body |
- * @param stringLiteral the string literal |
- * @param semicolon the token representing the semicolon that marks the end of the function body |
- */ |
- NativeFunctionBody({Token nativeToken, StringLiteral stringLiteral, Token semicolon}) : this.full(nativeToken, stringLiteral, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitNativeFunctionBody(this); |
- Token get beginToken => nativeToken; |
- Token get endToken => semicolon; |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(stringLiteral, visitor); |
- } |
-} |
-/** |
- * The abstract class `NormalFormalParameter` defines the behavior common to formal parameters |
- * that are required (are not optional). |
- * |
- * <pre> |
- * normalFormalParameter ::= |
- * [FunctionTypedFormalParameter] |
- * | [FieldFormalParameter] |
- * | [SimpleFormalParameter] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class NormalFormalParameter extends FormalParameter { |
- |
- /** |
- * The documentation comment associated with this parameter, or `null` if this parameter |
- * does not have a documentation comment associated with it. |
- */ |
- Comment _comment; |
- |
- /** |
- * The annotations associated with this parameter. |
- */ |
- NodeList<Annotation> metadata; |
- |
- /** |
- * The name of the parameter being declared. |
- */ |
- SimpleIdentifier _identifier; |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param identifier the name of the parameter being declared |
- */ |
- NormalFormalParameter.full(Comment comment, List<Annotation> metadata, SimpleIdentifier identifier) { |
- this.metadata = new NodeList<Annotation>(this); |
- this._comment = becomeParentOf(comment); |
- this.metadata.addAll(metadata); |
- this._identifier = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param identifier the name of the parameter being declared |
- */ |
- NormalFormalParameter({Comment comment, List<Annotation> metadata, SimpleIdentifier identifier}) : this.full(comment, metadata, identifier); |
- |
- /** |
- * Return the documentation comment associated with this parameter, or `null` if this |
- * parameter does not have a documentation comment associated with it. |
- * |
- * @return the documentation comment associated with this parameter |
- */ |
- Comment get documentationComment => _comment; |
- SimpleIdentifier get identifier => _identifier; |
- ParameterKind get kind { |
- ASTNode parent = this.parent; |
- if (parent is DefaultFormalParameter) { |
- return ((parent as DefaultFormalParameter)).kind; |
- } |
- return ParameterKind.REQUIRED; |
- } |
- |
- /** |
- * Set the documentation comment associated with this parameter to the given comment |
- * |
- * @param comment the documentation comment to be associated with this parameter |
- */ |
- void set documentationComment(Comment comment) { |
- this._comment = becomeParentOf(comment); |
- } |
- |
- /** |
- * Set the name of the parameter being declared to the given identifier. |
- * |
- * @param identifier the name of the parameter being declared |
- */ |
- void set identifier(SimpleIdentifier identifier) { |
- this._identifier = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- if (commentIsBeforeAnnotations()) { |
- safelyVisitChild(_comment, visitor); |
- metadata.accept(visitor); |
- } else { |
- for (ASTNode child in sortedCommentAndAnnotations) { |
- child.accept(visitor); |
- } |
- } |
- } |
- |
- /** |
- * Return `true` if the comment is lexically before any annotations. |
- * |
- * @return `true` if the comment is lexically before any annotations |
- */ |
- bool commentIsBeforeAnnotations() { |
- if (_comment == null || metadata.isEmpty) { |
- return true; |
- } |
- Annotation firstAnnotation = metadata[0]; |
- return _comment.offset < firstAnnotation.offset; |
- } |
- |
- /** |
- * Return an array containing the comment and annotations associated with this parameter, sorted |
- * in lexical order. |
- * |
- * @return the comment and annotations associated with this parameter in the order in which they |
- * appeared in the original source |
- */ |
- List<ASTNode> get sortedCommentAndAnnotations { |
- List<ASTNode> childList = new List<ASTNode>(); |
- childList.add(_comment); |
- childList.addAll(metadata); |
- List<ASTNode> children = new List.from(childList); |
- children.sort(ASTNode.LEXICAL_ORDER); |
- return children; |
- } |
-} |
-/** |
- * Instances of the class `NullLiteral` represent a null literal expression. |
- * |
- * <pre> |
- * nullLiteral ::= |
- * 'null' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class NullLiteral extends Literal { |
- |
- /** |
- * The token representing the literal. |
- */ |
- Token literal; |
- |
- /** |
- * Initialize a newly created null literal. |
- * |
- * @param token the token representing the literal |
- */ |
- NullLiteral.full(Token token) { |
- this.literal = token; |
- } |
- |
- /** |
- * Initialize a newly created null literal. |
- * |
- * @param token the token representing the literal |
- */ |
- NullLiteral({Token token}) : this.full(token); |
- accept(ASTVisitor visitor) => visitor.visitNullLiteral(this); |
- Token get beginToken => literal; |
- Token get endToken => literal; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `ParenthesizedExpression` represent a parenthesized expression. |
- * |
- * <pre> |
- * parenthesizedExpression ::= |
- * '(' [Expression] ')' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ParenthesizedExpression extends Expression { |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token _leftParenthesis; |
- |
- /** |
- * The expression within the parentheses. |
- */ |
- Expression _expression; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token _rightParenthesis; |
- |
- /** |
- * Initialize a newly created parenthesized expression. |
- * |
- * @param leftParenthesis the left parenthesis |
- * @param expression the expression within the parentheses |
- * @param rightParenthesis the right parenthesis |
- */ |
- ParenthesizedExpression.full(Token leftParenthesis, Expression expression, Token rightParenthesis) { |
- this._leftParenthesis = leftParenthesis; |
- this._expression = becomeParentOf(expression); |
- this._rightParenthesis = rightParenthesis; |
- } |
- |
- /** |
- * Initialize a newly created parenthesized expression. |
- * |
- * @param leftParenthesis the left parenthesis |
- * @param expression the expression within the parentheses |
- * @param rightParenthesis the right parenthesis |
- */ |
- ParenthesizedExpression({Token leftParenthesis, Expression expression, Token rightParenthesis}) : this.full(leftParenthesis, expression, rightParenthesis); |
- accept(ASTVisitor visitor) => visitor.visitParenthesizedExpression(this); |
- Token get beginToken => _leftParenthesis; |
- Token get endToken => _rightParenthesis; |
- |
- /** |
- * Return the expression within the parentheses. |
- * |
- * @return the expression within the parentheses |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Return the left parenthesis. |
- * |
- * @return the left parenthesis |
- */ |
- Token get leftParenthesis => _leftParenthesis; |
- |
- /** |
- * Return the right parenthesis. |
- * |
- * @return the right parenthesis |
- */ |
- Token get rightParenthesis => _rightParenthesis; |
- |
- /** |
- * Set the expression within the parentheses to the given expression. |
- * |
- * @param expression the expression within the parentheses |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the left parenthesis to the given token. |
- * |
- * @param parenthesis the left parenthesis |
- */ |
- void set leftParenthesis(Token parenthesis) { |
- _leftParenthesis = parenthesis; |
- } |
- |
- /** |
- * Set the right parenthesis to the given token. |
- * |
- * @param parenthesis the right parenthesis |
- */ |
- void set rightParenthesis(Token parenthesis) { |
- _rightParenthesis = parenthesis; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_expression, visitor); |
- } |
-} |
-/** |
- * Instances of the class `PartDirective` represent a part directive. |
- * |
- * <pre> |
- * partDirective ::= |
- * [Annotation] 'part' [StringLiteral] ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class PartDirective extends UriBasedDirective { |
- |
- /** |
- * The token representing the 'part' token. |
- */ |
- Token partToken; |
- |
- /** |
- * The semicolon terminating the directive. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created part directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param partToken the token representing the 'part' token |
- * @param partUri the URI of the part being included |
- * @param semicolon the semicolon terminating the directive |
- */ |
- PartDirective.full(Comment comment, List<Annotation> metadata, Token partToken, StringLiteral partUri, Token semicolon) : super.full(comment, metadata, partUri) { |
- this.partToken = partToken; |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created part directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param partToken the token representing the 'part' token |
- * @param partUri the URI of the part being included |
- * @param semicolon the semicolon terminating the directive |
- */ |
- PartDirective({Comment comment, List<Annotation> metadata, Token partToken, StringLiteral partUri, Token semicolon}) : this.full(comment, metadata, partToken, partUri, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitPartDirective(this); |
- Token get endToken => semicolon; |
- Token get keyword => partToken; |
- CompilationUnitElement get uriElement => element as CompilationUnitElement; |
- Token get firstTokenAfterCommentAndMetadata => partToken; |
-} |
-/** |
- * Instances of the class `PartOfDirective` represent a part-of directive. |
- * |
- * <pre> |
- * partOfDirective ::= |
- * [Annotation] 'part' 'of' [Identifier] ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class PartOfDirective extends Directive { |
- |
- /** |
- * The token representing the 'part' token. |
- */ |
- Token partToken; |
- |
- /** |
- * The token representing the 'of' token. |
- */ |
- Token ofToken; |
- |
- /** |
- * The name of the library that the containing compilation unit is part of. |
- */ |
- LibraryIdentifier _libraryName; |
- |
- /** |
- * The semicolon terminating the directive. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created part-of directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param partToken the token representing the 'part' token |
- * @param ofToken the token representing the 'of' token |
- * @param libraryName the name of the library that the containing compilation unit is part of |
- * @param semicolon the semicolon terminating the directive |
- */ |
- PartOfDirective.full(Comment comment, List<Annotation> metadata, Token partToken, Token ofToken, LibraryIdentifier libraryName, Token semicolon) : super.full(comment, metadata) { |
- this.partToken = partToken; |
- this.ofToken = ofToken; |
- this._libraryName = becomeParentOf(libraryName); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created part-of directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param partToken the token representing the 'part' token |
- * @param ofToken the token representing the 'of' token |
- * @param libraryName the name of the library that the containing compilation unit is part of |
- * @param semicolon the semicolon terminating the directive |
- */ |
- PartOfDirective({Comment comment, List<Annotation> metadata, Token partToken, Token ofToken, LibraryIdentifier libraryName, Token semicolon}) : this.full(comment, metadata, partToken, ofToken, libraryName, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitPartOfDirective(this); |
- Token get endToken => semicolon; |
- Token get keyword => partToken; |
- |
- /** |
- * Return the name of the library that the containing compilation unit is part of. |
- * |
- * @return the name of the library that the containing compilation unit is part of |
- */ |
- LibraryIdentifier get libraryName => _libraryName; |
- |
- /** |
- * Set the name of the library that the containing compilation unit is part of to the given name. |
- * |
- * @param libraryName the name of the library that the containing compilation unit is part of |
- */ |
- void set libraryName(LibraryIdentifier libraryName) { |
- this._libraryName = becomeParentOf(libraryName); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_libraryName, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata => partToken; |
-} |
-/** |
- * Instances of the class `PostfixExpression` represent a postfix unary expression. |
- * |
- * <pre> |
- * postfixExpression ::= |
- * [Expression] [Token] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class PostfixExpression extends Expression { |
- |
- /** |
- * The expression computing the operand for the operator. |
- */ |
- Expression _operand; |
- |
- /** |
- * The postfix operator being applied to the operand. |
- */ |
- Token operator; |
- |
- /** |
- * The element associated with this the operator based on the propagated type of the operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. |
- */ |
- MethodElement _propagatedElement; |
- |
- /** |
- * The element associated with the operator based on the static type of the operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. |
- */ |
- MethodElement _staticElement; |
- |
- /** |
- * Initialize a newly created postfix expression. |
- * |
- * @param operand the expression computing the operand for the operator |
- * @param operator the postfix operator being applied to the operand |
- */ |
- PostfixExpression.full(Expression operand, Token operator) { |
- this._operand = becomeParentOf(operand); |
- this.operator = operator; |
- } |
- |
- /** |
- * Initialize a newly created postfix expression. |
- * |
- * @param operand the expression computing the operand for the operator |
- * @param operator the postfix operator being applied to the operand |
- */ |
- PostfixExpression({Expression operand, Token operator}) : this.full(operand, operator); |
- accept(ASTVisitor visitor) => visitor.visitPostfixExpression(this); |
- Token get beginToken => _operand.beginToken; |
- |
- /** |
- * Return the best element available for this operator. If resolution was able to find a better |
- * element based on type propagation, that element will be returned. Otherwise, the element found |
- * using the result of static analysis will be returned. If resolution has not been performed, |
- * then `null` will be returned. |
- * |
- * @return the best element available for this operator |
- */ |
- MethodElement get bestElement { |
- MethodElement element = propagatedElement; |
- if (element == null) { |
- element = staticElement; |
- } |
- return element; |
- } |
- Token get endToken => operator; |
- |
- /** |
- * Return the expression computing the operand for the operator. |
- * |
- * @return the expression computing the operand for the operator |
- */ |
- Expression get operand => _operand; |
- |
- /** |
- * Return the element associated with the operator based on the propagated type of the operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. One example of the latter case is an operator that is |
- * not defined for the type of the operand. |
- * |
- * @return the element associated with the operator |
- */ |
- MethodElement get propagatedElement => _propagatedElement; |
- |
- /** |
- * Return the element associated with the operator based on the static type of the operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. One example of the latter case is an operator that is |
- * not defined for the type of the operand. |
- * |
- * @return the element associated with the operator |
- */ |
- MethodElement get staticElement => _staticElement; |
- |
- /** |
- * Set the expression computing the operand for the operator to the given expression. |
- * |
- * @param expression the expression computing the operand for the operator |
- */ |
- void set operand(Expression expression) { |
- _operand = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the element associated with the operator based on the propagated type of the operand to the |
- * given element. |
- * |
- * @param element the element to be associated with the operator |
- */ |
- void set propagatedElement(MethodElement element) { |
- _propagatedElement = element; |
- } |
- |
- /** |
- * Set the element associated with the operator based on the static type of the operand to the |
- * given element. |
- * |
- * @param element the element to be associated with the operator |
- */ |
- void set staticElement(MethodElement element) { |
- _staticElement = element; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_operand, visitor); |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on |
- * propagated type information, then return the parameter element representing the parameter to |
- * which the value of the operand will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getPropagatedParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the right |
- * operand will be bound |
- */ |
- ParameterElement get propagatedParameterElementForOperand { |
- if (_propagatedElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _propagatedElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on static |
- * type information, then return the parameter element representing the parameter to which the |
- * value of the operand will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getStaticParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the right |
- * operand will be bound |
- */ |
- ParameterElement get staticParameterElementForOperand { |
- if (_staticElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _staticElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
-} |
-/** |
- * Instances of the class `PrefixExpression` represent a prefix unary expression. |
- * |
- * <pre> |
- * prefixExpression ::= |
- * [Token] [Expression] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class PrefixExpression extends Expression { |
- |
- /** |
- * The prefix operator being applied to the operand. |
- */ |
- Token operator; |
- |
- /** |
- * The expression computing the operand for the operator. |
- */ |
- Expression _operand; |
- |
- /** |
- * The element associated with the operator based on the static type of the operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. |
- */ |
- MethodElement _staticElement; |
- |
- /** |
- * The element associated with the operator based on the propagated type of the operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. |
- */ |
- MethodElement _propagatedElement; |
- |
- /** |
- * Initialize a newly created prefix expression. |
- * |
- * @param operator the prefix operator being applied to the operand |
- * @param operand the expression computing the operand for the operator |
- */ |
- PrefixExpression.full(Token operator, Expression operand) { |
- this.operator = operator; |
- this._operand = becomeParentOf(operand); |
- } |
- |
- /** |
- * Initialize a newly created prefix expression. |
- * |
- * @param operator the prefix operator being applied to the operand |
- * @param operand the expression computing the operand for the operator |
- */ |
- PrefixExpression({Token operator, Expression operand}) : this.full(operator, operand); |
- accept(ASTVisitor visitor) => visitor.visitPrefixExpression(this); |
- Token get beginToken => operator; |
- |
- /** |
- * Return the best element available for this operator. If resolution was able to find a better |
- * element based on type propagation, that element will be returned. Otherwise, the element found |
- * using the result of static analysis will be returned. If resolution has not been performed, |
- * then `null` will be returned. |
- * |
- * @return the best element available for this operator |
- */ |
- MethodElement get bestElement { |
- MethodElement element = propagatedElement; |
- if (element == null) { |
- element = staticElement; |
- } |
- return element; |
- } |
- Token get endToken => _operand.endToken; |
- |
- /** |
- * Return the expression computing the operand for the operator. |
- * |
- * @return the expression computing the operand for the operator |
- */ |
- Expression get operand => _operand; |
- |
- /** |
- * Return the element associated with the operator based on the propagated type of the operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. One example of the latter case is an operator that is |
- * not defined for the type of the operand. |
- * |
- * @return the element associated with the operator |
- */ |
- MethodElement get propagatedElement => _propagatedElement; |
- |
- /** |
- * Return the element associated with the operator based on the static type of the operand, or |
- * `null` if the AST structure has not been resolved, if the operator is not user definable, |
- * or if the operator could not be resolved. One example of the latter case is an operator that is |
- * not defined for the type of the operand. |
- * |
- * @return the element associated with the operator |
- */ |
- MethodElement get staticElement => _staticElement; |
- |
- /** |
- * Set the expression computing the operand for the operator to the given expression. |
- * |
- * @param expression the expression computing the operand for the operator |
- */ |
- void set operand(Expression expression) { |
- _operand = becomeParentOf(expression); |
- } |
- |
- /** |
- * Set the element associated with the operator based on the propagated type of the operand to the |
- * given element. |
- * |
- * @param element the element to be associated with the operator |
- */ |
- void set propagatedElement(MethodElement element) { |
- _propagatedElement = element; |
- } |
- |
- /** |
- * Set the element associated with the operator based on the static type of the operand to the |
- * given element. |
- * |
- * @param element the static element to be associated with the operator |
- */ |
- void set staticElement(MethodElement element) { |
- _staticElement = element; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_operand, visitor); |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on |
- * propagated type information, then return the parameter element representing the parameter to |
- * which the value of the operand will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getPropagatedParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the right |
- * operand will be bound |
- */ |
- ParameterElement get propagatedParameterElementForOperand { |
- if (_propagatedElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _propagatedElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
- |
- /** |
- * If the AST structure has been resolved, and the function being invoked is known based on static |
- * type information, then return the parameter element representing the parameter to which the |
- * value of the operand will be bound. Otherwise, return `null`. |
- * |
- * This method is only intended to be used by [Expression#getStaticParameterElement]. |
- * |
- * @return the parameter element representing the parameter to which the value of the right |
- * operand will be bound |
- */ |
- ParameterElement get staticParameterElementForOperand { |
- if (_staticElement == null) { |
- return null; |
- } |
- List<ParameterElement> parameters = _staticElement.parameters; |
- if (parameters.length < 1) { |
- return null; |
- } |
- return parameters[0]; |
- } |
-} |
-/** |
- * Instances of the class `PrefixedIdentifier` represent either an identifier that is prefixed |
- * or an access to an object property where the target of the property access is a simple |
- * identifier. |
- * |
- * <pre> |
- * prefixedIdentifier ::= |
- * [SimpleIdentifier] '.' [SimpleIdentifier] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class PrefixedIdentifier extends Identifier { |
- |
- /** |
- * The prefix associated with the library in which the identifier is defined. |
- */ |
- SimpleIdentifier _prefix; |
- |
- /** |
- * The period used to separate the prefix from the identifier. |
- */ |
- Token period; |
- |
- /** |
- * The identifier being prefixed. |
- */ |
- SimpleIdentifier _identifier; |
- |
- /** |
- * Initialize a newly created prefixed identifier. |
- * |
- * @param prefix the identifier being prefixed |
- * @param period the period used to separate the prefix from the identifier |
- * @param identifier the prefix associated with the library in which the identifier is defined |
- */ |
- PrefixedIdentifier.full(SimpleIdentifier prefix, Token period, SimpleIdentifier identifier) { |
- this._prefix = becomeParentOf(prefix); |
- this.period = period; |
- this._identifier = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Initialize a newly created prefixed identifier. |
- * |
- * @param prefix the identifier being prefixed |
- * @param period the period used to separate the prefix from the identifier |
- * @param identifier the prefix associated with the library in which the identifier is defined |
- */ |
- PrefixedIdentifier({SimpleIdentifier prefix, Token period, SimpleIdentifier identifier}) : this.full(prefix, period, identifier); |
- accept(ASTVisitor visitor) => visitor.visitPrefixedIdentifier(this); |
- Token get beginToken => _prefix.beginToken; |
- Element get bestElement { |
- if (_identifier == null) { |
- return null; |
- } |
- return _identifier.bestElement; |
- } |
- Token get endToken => _identifier.endToken; |
- |
- /** |
- * Return the identifier being prefixed. |
- * |
- * @return the identifier being prefixed |
- */ |
- SimpleIdentifier get identifier => _identifier; |
- String get name => "${_prefix.name}.${_identifier.name}"; |
- |
- /** |
- * Return the prefix associated with the library in which the identifier is defined. |
- * |
- * @return the prefix associated with the library in which the identifier is defined |
- */ |
- SimpleIdentifier get prefix => _prefix; |
- Element get propagatedElement { |
- if (_identifier == null) { |
- return null; |
- } |
- return _identifier.propagatedElement; |
- } |
- Element get staticElement { |
- if (_identifier == null) { |
- return null; |
- } |
- return _identifier.staticElement; |
- } |
- |
- /** |
- * Set the identifier being prefixed to the given identifier. |
- * |
- * @param identifier the identifier being prefixed |
- */ |
- void set identifier(SimpleIdentifier identifier) { |
- this._identifier = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Set the prefix associated with the library in which the identifier is defined to the given |
- * identifier. |
- * |
- * @param identifier the prefix associated with the library in which the identifier is defined |
- */ |
- void set prefix(SimpleIdentifier identifier) { |
- _prefix = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_prefix, visitor); |
- safelyVisitChild(_identifier, visitor); |
- } |
-} |
-/** |
- * Instances of the class `PropertyAccess` represent 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. |
- * |
- * <pre> |
- * propertyAccess ::= |
- * [Expression] '.' [SimpleIdentifier] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class PropertyAccess extends Expression { |
- |
- /** |
- * The expression computing the object defining the property being accessed. |
- */ |
- Expression _target; |
- |
- /** |
- * The property access operator. |
- */ |
- Token operator; |
- |
- /** |
- * The name of the property being accessed. |
- */ |
- SimpleIdentifier _propertyName; |
- |
- /** |
- * Initialize a newly created property access expression. |
- * |
- * @param target the expression computing the object defining the property being accessed |
- * @param operator the property access operator |
- * @param propertyName the name of the property being accessed |
- */ |
- PropertyAccess.full(Expression target, Token operator, SimpleIdentifier propertyName) { |
- this._target = becomeParentOf(target); |
- this.operator = operator; |
- this._propertyName = becomeParentOf(propertyName); |
- } |
- |
- /** |
- * Initialize a newly created property access expression. |
- * |
- * @param target the expression computing the object defining the property being accessed |
- * @param operator the property access operator |
- * @param propertyName the name of the property being accessed |
- */ |
- PropertyAccess({Expression target, Token operator, SimpleIdentifier propertyName}) : this.full(target, operator, propertyName); |
- accept(ASTVisitor visitor) => visitor.visitPropertyAccess(this); |
- Token get beginToken { |
- if (_target != null) { |
- return _target.beginToken; |
- } |
- return operator; |
- } |
- Token get endToken => _propertyName.endToken; |
- |
- /** |
- * Return the name of the property being accessed. |
- * |
- * @return the name of the property being accessed |
- */ |
- SimpleIdentifier get propertyName => _propertyName; |
- |
- /** |
- * 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 [getTarget]. If this invocation |
- * is part of a cascade expression, then the target stored with the cascade expression is |
- * returned. |
- * |
- * @return the expression used to compute the receiver of the invocation |
- * @see #getTarget() |
- */ |
- Expression get realTarget { |
- if (isCascaded) { |
- ASTNode ancestor = parent; |
- while (ancestor is! CascadeExpression) { |
- if (ancestor == null) { |
- return _target; |
- } |
- ancestor = ancestor.parent; |
- } |
- return ((ancestor as CascadeExpression)).target; |
- } |
- return _target; |
- } |
- |
- /** |
- * Return the expression computing the object defining the property being accessed, or |
- * `null` if this property access is part of a cascade expression. |
- * |
- * @return the expression computing the object defining the property being accessed |
- * @see #getRealTarget() |
- */ |
- Expression get target => _target; |
- bool get isAssignable => true; |
- |
- /** |
- * 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]. |
- * |
- * @return `true` if this expression is cascaded |
- */ |
- bool get isCascaded => operator != null && identical(operator.type, TokenType.PERIOD_PERIOD); |
- |
- /** |
- * Set the name of the property being accessed to the given identifier. |
- * |
- * @param identifier the name of the property being accessed |
- */ |
- void set propertyName(SimpleIdentifier identifier) { |
- _propertyName = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Set the expression computing the object defining the property being accessed to the given |
- * expression. |
- * |
- * @param expression the expression computing the object defining the property being accessed |
- */ |
- void set target(Expression expression) { |
- _target = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_target, visitor); |
- safelyVisitChild(_propertyName, visitor); |
- } |
-} |
-/** |
- * Instances of the class `RedirectingConstructorInvocation` represent the invocation of a |
- * another constructor in the same class from within a constructor's initialization list. |
- * |
- * <pre> |
- * redirectingConstructorInvocation ::= |
- * 'this' ('.' identifier)? arguments |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class RedirectingConstructorInvocation extends ConstructorInitializer { |
- |
- /** |
- * The token for the 'this' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * 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 period; |
- |
- /** |
- * The name of the constructor that is being invoked, or `null` if the unnamed constructor |
- * is being invoked. |
- */ |
- SimpleIdentifier _constructorName; |
- |
- /** |
- * The list of arguments to the constructor. |
- */ |
- ArgumentList _argumentList; |
- |
- /** |
- * The element associated with the 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 staticElement; |
- |
- /** |
- * Initialize a newly created redirecting invocation to invoke the constructor with the given name |
- * with the given arguments. |
- * |
- * @param keyword the token for the 'this' keyword |
- * @param period the token for the period before the name of the constructor that is being invoked |
- * @param constructorName the name of the constructor that is being invoked |
- * @param argumentList the list of arguments to the constructor |
- */ |
- RedirectingConstructorInvocation.full(Token keyword, Token period, SimpleIdentifier constructorName, ArgumentList argumentList) { |
- this.keyword = keyword; |
- this.period = period; |
- this._constructorName = becomeParentOf(constructorName); |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- |
- /** |
- * Initialize a newly created redirecting invocation to invoke the constructor with the given name |
- * with the given arguments. |
- * |
- * @param keyword the token for the 'this' keyword |
- * @param period the token for the period before the name of the constructor that is being invoked |
- * @param constructorName the name of the constructor that is being invoked |
- * @param argumentList the list of arguments to the constructor |
- */ |
- RedirectingConstructorInvocation({Token keyword, Token period, SimpleIdentifier constructorName, ArgumentList argumentList}) : this.full(keyword, period, constructorName, argumentList); |
- accept(ASTVisitor visitor) => visitor.visitRedirectingConstructorInvocation(this); |
- |
- /** |
- * Return the list of arguments to the constructor. |
- * |
- * @return the list of arguments to the constructor |
- */ |
- ArgumentList get argumentList => _argumentList; |
- Token get beginToken => keyword; |
- |
- /** |
- * Return the name of the constructor that is being invoked, or `null` if the unnamed |
- * constructor is being invoked. |
- * |
- * @return the name of the constructor that is being invoked |
- */ |
- SimpleIdentifier get constructorName => _constructorName; |
- Token get endToken => _argumentList.endToken; |
- |
- /** |
- * Set the list of arguments to the constructor to the given list. |
- * |
- * @param argumentList the list of arguments to the constructor |
- */ |
- void set argumentList(ArgumentList argumentList) { |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- |
- /** |
- * Set the name of the constructor that is being invoked to the given identifier. |
- * |
- * @param identifier the name of the constructor that is being invoked |
- */ |
- void set constructorName(SimpleIdentifier identifier) { |
- _constructorName = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_constructorName, visitor); |
- safelyVisitChild(_argumentList, visitor); |
- } |
-} |
-/** |
- * Instances of the class `RethrowExpression` represent a rethrow expression. |
- * |
- * <pre> |
- * rethrowExpression ::= |
- * 'rethrow' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class RethrowExpression extends Expression { |
- |
- /** |
- * The token representing the 'rethrow' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * Initialize a newly created rethrow expression. |
- * |
- * @param keyword the token representing the 'rethrow' keyword |
- */ |
- RethrowExpression.full(Token keyword) { |
- this.keyword = keyword; |
- } |
- |
- /** |
- * Initialize a newly created rethrow expression. |
- * |
- * @param keyword the token representing the 'rethrow' keyword |
- */ |
- RethrowExpression({Token keyword}) : this.full(keyword); |
- accept(ASTVisitor visitor) => visitor.visitRethrowExpression(this); |
- Token get beginToken => keyword; |
- Token get endToken => keyword; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `ReturnStatement` represent a return statement. |
- * |
- * <pre> |
- * returnStatement ::= |
- * 'return' [Expression]? ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ReturnStatement extends Statement { |
- |
- /** |
- * The token representing the 'return' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The expression computing the value to be returned, or `null` if no explicit value was |
- * provided. |
- */ |
- Expression _expression; |
- |
- /** |
- * The semicolon terminating the statement. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created return statement. |
- * |
- * @param keyword the token representing the 'return' keyword |
- * @param expression the expression computing the value to be returned |
- * @param semicolon the semicolon terminating the statement |
- */ |
- ReturnStatement.full(Token keyword, Expression expression, Token semicolon) { |
- this.keyword = keyword; |
- this._expression = becomeParentOf(expression); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created return statement. |
- * |
- * @param keyword the token representing the 'return' keyword |
- * @param expression the expression computing the value to be returned |
- * @param semicolon the semicolon terminating the statement |
- */ |
- ReturnStatement({Token keyword, Expression expression, Token semicolon}) : this.full(keyword, expression, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitReturnStatement(this); |
- Token get beginToken => keyword; |
- Token get endToken => semicolon; |
- |
- /** |
- * Return the expression computing the value to be returned, or `null` if no explicit value |
- * was provided. |
- * |
- * @return the expression computing the value to be returned |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Set the expression computing the value to be returned to the given expression. |
- * |
- * @param expression the expression computing the value to be returned |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_expression, visitor); |
- } |
-} |
-/** |
- * Instances of the class `ScriptTag` represent the script tag that can optionally occur at |
- * the beginning of a compilation unit. |
- * |
- * <pre> |
- * scriptTag ::= |
- * '#!' (~NEWLINE)* NEWLINE |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ScriptTag extends ASTNode { |
- |
- /** |
- * The token representing this script tag. |
- */ |
- Token scriptTag; |
- |
- /** |
- * Initialize a newly created script tag. |
- * |
- * @param scriptTag the token representing this script tag |
- */ |
- ScriptTag.full(Token scriptTag) { |
- this.scriptTag = scriptTag; |
- } |
- |
- /** |
- * Initialize a newly created script tag. |
- * |
- * @param scriptTag the token representing this script tag |
- */ |
- ScriptTag({Token scriptTag}) : this.full(scriptTag); |
- accept(ASTVisitor visitor) => visitor.visitScriptTag(this); |
- Token get beginToken => scriptTag; |
- Token get endToken => scriptTag; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `ShowCombinator` represent a combinator that restricts the names |
- * being imported to those in a given list. |
- * |
- * <pre> |
- * showCombinator ::= |
- * 'show' [SimpleIdentifier] (',' [SimpleIdentifier])* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ShowCombinator extends Combinator { |
- |
- /** |
- * The list of names from the library that are made visible by this combinator. |
- */ |
- NodeList<SimpleIdentifier> shownNames; |
- |
- /** |
- * Initialize a newly created import show combinator. |
- * |
- * @param keyword the comma introducing the combinator |
- * @param shownNames the list of names from the library that are made visible by this combinator |
- */ |
- ShowCombinator.full(Token keyword, List<SimpleIdentifier> shownNames) : super.full(keyword) { |
- this.shownNames = new NodeList<SimpleIdentifier>(this); |
- this.shownNames.addAll(shownNames); |
- } |
- |
- /** |
- * Initialize a newly created import show combinator. |
- * |
- * @param keyword the comma introducing the combinator |
- * @param shownNames the list of names from the library that are made visible by this combinator |
- */ |
- ShowCombinator({Token keyword, List<SimpleIdentifier> shownNames}) : this.full(keyword, shownNames); |
- accept(ASTVisitor visitor) => visitor.visitShowCombinator(this); |
- Token get endToken => shownNames.endToken; |
- void visitChildren(ASTVisitor visitor) { |
- shownNames.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `SimpleFormalParameter` represent a simple formal parameter. |
- * |
- * <pre> |
- * simpleFormalParameter ::= |
- * ('final' [TypeName] | 'var' | [TypeName])? [SimpleIdentifier] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SimpleFormalParameter extends NormalFormalParameter { |
- |
- /** |
- * The token representing either the 'final', 'const' or 'var' keyword, or `null` if no |
- * keyword was used. |
- */ |
- Token keyword; |
- |
- /** |
- * The name of the declared type of the parameter, or `null` if the parameter does not have |
- * a declared type. |
- */ |
- TypeName _type; |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param keyword the token representing either the 'final', 'const' or 'var' keyword |
- * @param type the name of the declared type of the parameter |
- * @param identifier the name of the parameter being declared |
- */ |
- SimpleFormalParameter.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier) : super.full(comment, metadata, identifier) { |
- this.keyword = keyword; |
- this._type = becomeParentOf(type); |
- } |
- |
- /** |
- * Initialize a newly created formal parameter. |
- * |
- * @param comment the documentation comment associated with this parameter |
- * @param metadata the annotations associated with this parameter |
- * @param keyword the token representing either the 'final', 'const' or 'var' keyword |
- * @param type the name of the declared type of the parameter |
- * @param identifier the name of the parameter being declared |
- */ |
- SimpleFormalParameter({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier}) : this.full(comment, metadata, keyword, type, identifier); |
- accept(ASTVisitor visitor) => visitor.visitSimpleFormalParameter(this); |
- Token get beginToken { |
- if (keyword != null) { |
- return keyword; |
- } else if (_type != null) { |
- return _type.beginToken; |
- } |
- return identifier.beginToken; |
- } |
- Token get endToken => identifier.endToken; |
- |
- /** |
- * Return the name of the declared type of the parameter, or `null` if the parameter does |
- * not have a declared type. |
- * |
- * @return the name of the declared type of the parameter |
- */ |
- TypeName get type => _type; |
- bool get isConst => (keyword is KeywordToken) && identical(((keyword as KeywordToken)).keyword, Keyword.CONST); |
- bool get isFinal => (keyword is KeywordToken) && identical(((keyword as KeywordToken)).keyword, Keyword.FINAL); |
- |
- /** |
- * Set the name of the declared type of the parameter to the given type name. |
- * |
- * @param typeName the name of the declared type of the parameter |
- */ |
- void set type(TypeName typeName) { |
- _type = becomeParentOf(typeName); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_type, visitor); |
- safelyVisitChild(identifier, visitor); |
- } |
-} |
-/** |
- * Instances of the class `SimpleIdentifier` represent a simple identifier. |
- * |
- * <pre> |
- * simpleIdentifier ::= |
- * initialCharacter internalCharacter* |
- * |
- * initialCharacter ::= '_' | '$' | letter |
- * |
- * internalCharacter ::= '_' | '$' | letter | digit |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SimpleIdentifier extends Identifier { |
- |
- /** |
- * The token representing the identifier. |
- */ |
- Token token; |
- |
- /** |
- * 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. |
- */ |
- Element _staticElement; |
- |
- /** |
- * The element associated with this identifier based on propagated type information, or |
- * `null` if the AST structure has not been resolved or if this identifier could not be |
- * resolved. |
- */ |
- Element _propagatedElement; |
- |
- /** |
- * If this expression is both in a getter and setter context, the [AuxiliaryElements] will |
- * be set to hold onto the static and propagated information. The auxiliary element will hold onto |
- * the elements from the getter context. |
- */ |
- AuxiliaryElements auxiliaryElements = null; |
- |
- /** |
- * Initialize a newly created identifier. |
- * |
- * @param token the token representing the identifier |
- */ |
- SimpleIdentifier.full(Token token) { |
- this.token = token; |
- } |
- |
- /** |
- * Initialize a newly created identifier. |
- * |
- * @param token the token representing the identifier |
- */ |
- SimpleIdentifier({Token token}) : this.full(token); |
- accept(ASTVisitor visitor) => visitor.visitSimpleIdentifier(this); |
- Token get beginToken => token; |
- Element get bestElement { |
- if (_propagatedElement == null) { |
- return _staticElement; |
- } |
- return _propagatedElement; |
- } |
- Token get endToken => token; |
- String get name => token.lexeme; |
- Element get propagatedElement => _propagatedElement; |
- Element get staticElement => _staticElement; |
- |
- /** |
- * Return `true` if this identifier is the name being declared in a declaration. |
- * |
- * @return `true` if this identifier is the name being declared in a declaration |
- */ |
- bool inDeclarationContext() { |
- ASTNode parent = this.parent; |
- if (parent is CatchClause) { |
- CatchClause clause = parent as CatchClause; |
- return identical(this, clause.exceptionParameter) || identical(this, clause.stackTraceParameter); |
- } else if (parent is ClassDeclaration) { |
- return identical(this, ((parent as ClassDeclaration)).name); |
- } else if (parent is ClassTypeAlias) { |
- return identical(this, ((parent as ClassTypeAlias)).name); |
- } else if (parent is ConstructorDeclaration) { |
- return identical(this, ((parent as ConstructorDeclaration)).name); |
- } else if (parent is DeclaredIdentifier) { |
- return identical(this, ((parent as DeclaredIdentifier)).identifier); |
- } else if (parent is FunctionDeclaration) { |
- return identical(this, ((parent as FunctionDeclaration)).name); |
- } else if (parent is FunctionTypeAlias) { |
- return identical(this, ((parent as FunctionTypeAlias)).name); |
- } else if (parent is Label) { |
- return identical(this, ((parent as Label)).label) && (parent.parent is LabeledStatement); |
- } else if (parent is MethodDeclaration) { |
- return identical(this, ((parent as MethodDeclaration)).name); |
- } else if (parent is FunctionTypedFormalParameter || parent is SimpleFormalParameter) { |
- return identical(this, ((parent as NormalFormalParameter)).identifier); |
- } else if (parent is TypeParameter) { |
- return identical(this, ((parent as TypeParameter)).name); |
- } else if (parent is VariableDeclaration) { |
- return identical(this, ((parent as VariableDeclaration)).name); |
- } |
- return false; |
- } |
- |
- /** |
- * 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. |
- * |
- * @return `true` if this expression is in a context where a getter will be invoked |
- */ |
- bool inGetterContext() { |
- ASTNode parent = this.parent; |
- ASTNode target = this; |
- if (parent is PrefixedIdentifier) { |
- PrefixedIdentifier prefixed = parent as PrefixedIdentifier; |
- if (identical(prefixed.prefix, this)) { |
- return true; |
- } |
- parent = prefixed.parent; |
- target = prefixed; |
- } else if (parent is PropertyAccess) { |
- PropertyAccess access = parent as PropertyAccess; |
- if (identical(access.target, this)) { |
- return true; |
- } |
- parent = access.parent; |
- target = access; |
- } |
- if (parent is Label) { |
- return false; |
- } |
- if (parent is AssignmentExpression) { |
- AssignmentExpression expr = parent as AssignmentExpression; |
- if (identical(expr.leftHandSide, target) && identical(expr.operator.type, TokenType.EQ)) { |
- return false; |
- } |
- } |
- return true; |
- } |
- |
- /** |
- * 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. |
- * |
- * @return `true` if this expression is in a context where a setter will be invoked |
- */ |
- bool inSetterContext() { |
- ASTNode parent = this.parent; |
- ASTNode target = this; |
- if (parent is PrefixedIdentifier) { |
- PrefixedIdentifier prefixed = parent as PrefixedIdentifier; |
- if (identical(prefixed.prefix, this)) { |
- return false; |
- } |
- parent = prefixed.parent; |
- target = prefixed; |
- } else if (parent is PropertyAccess) { |
- PropertyAccess access = parent as PropertyAccess; |
- if (identical(access.target, this)) { |
- return false; |
- } |
- parent = access.parent; |
- target = access; |
- } |
- if (parent is PrefixExpression) { |
- return ((parent as PrefixExpression)).operator.type.isIncrementOperator; |
- } else if (parent is PostfixExpression) { |
- return true; |
- } else if (parent is AssignmentExpression) { |
- return identical(((parent as AssignmentExpression)).leftHandSide, target); |
- } |
- return false; |
- } |
- bool get isSynthetic => token.isSynthetic; |
- |
- /** |
- * Set the element associated with this identifier based on propagated type information to the |
- * given element. |
- * |
- * @param element the element to be associated with this identifier |
- */ |
- void set propagatedElement(Element element) { |
- _propagatedElement = validateElement2(element); |
- } |
- |
- /** |
- * Set the element associated with this identifier based on static type information to the given |
- * element. |
- * |
- * @param element the element to be associated with this identifier |
- */ |
- void set staticElement(Element element) { |
- _staticElement = validateElement2(element); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- } |
- |
- /** |
- * Return the given element if it is an appropriate element based on the parent of this |
- * identifier, or `null` if it is not appropriate. |
- * |
- * @param element the element to be associated with this identifier |
- * @return the element to be associated with this identifier |
- */ |
- Element validateElement(ASTNode parent, Type expectedClass, Element element) { |
- if (!isInstanceOf(element, expectedClass)) { |
- AnalysisEngine.instance.logger.logInformation2("Internal error: attempting to set the name of a ${parent.runtimeType.toString()} to a ${element.runtimeType.toString()}", new JavaException()); |
- return null; |
- } |
- return element; |
- } |
- |
- /** |
- * Return the given element if it is an appropriate element based on the parent of this |
- * identifier, or `null` if it is not appropriate. |
- * |
- * @param element the element to be associated with this identifier |
- * @return the element to be associated with this identifier |
- */ |
- Element validateElement2(Element element) { |
- if (element == null) { |
- return null; |
- } |
- ASTNode parent = this.parent; |
- if (parent is ClassDeclaration && identical(((parent as ClassDeclaration)).name, this)) { |
- return validateElement(parent, ClassElement, element); |
- } else if (parent is ClassTypeAlias && identical(((parent as ClassTypeAlias)).name, this)) { |
- return validateElement(parent, ClassElement, element); |
- } else if (parent is DeclaredIdentifier && identical(((parent as DeclaredIdentifier)).identifier, this)) { |
- return validateElement(parent, LocalVariableElement, element); |
- } else if (parent is FormalParameter && identical(((parent as FormalParameter)).identifier, this)) { |
- return validateElement(parent, ParameterElement, element); |
- } else if (parent is FunctionDeclaration && identical(((parent as FunctionDeclaration)).name, this)) { |
- return validateElement(parent, ExecutableElement, element); |
- } else if (parent is FunctionTypeAlias && identical(((parent as FunctionTypeAlias)).name, this)) { |
- return validateElement(parent, FunctionTypeAliasElement, element); |
- } else if (parent is MethodDeclaration && identical(((parent as MethodDeclaration)).name, this)) { |
- return validateElement(parent, ExecutableElement, element); |
- } else if (parent is TypeParameter && identical(((parent as TypeParameter)).name, this)) { |
- return validateElement(parent, TypeParameterElement, element); |
- } else if (parent is VariableDeclaration && identical(((parent as VariableDeclaration)).name, this)) { |
- return validateElement(parent, VariableElement, element); |
- } |
- return element; |
- } |
-} |
-/** |
- * Instances of the class `SimpleStringLiteral` represent a string literal expression that |
- * does not contain any interpolations. |
- * |
- * <pre> |
- * simpleStringLiteral ::= |
- * rawStringLiteral |
- * | basicStringLiteral |
- * |
- * rawStringLiteral ::= |
- * '@' basicStringLiteral |
- * |
- * simpleStringLiteral ::= |
- * multiLineStringLiteral |
- * | singleLineStringLiteral |
- * |
- * multiLineStringLiteral ::= |
- * "'''" characters "'''" |
- * | '"""' characters '"""' |
- * |
- * singleLineStringLiteral ::= |
- * "'" characters "'" |
- * '"' characters '"' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SimpleStringLiteral extends StringLiteral { |
- |
- /** |
- * The token representing the literal. |
- */ |
- Token literal; |
- |
- /** |
- * The value of the literal. |
- */ |
- String _value; |
- |
- /** |
- * Initialize a newly created simple string literal. |
- * |
- * @param literal the token representing the literal |
- * @param value the value of the literal |
- */ |
- SimpleStringLiteral.full(Token literal, String value) { |
- this.literal = literal; |
- this._value = StringUtilities.intern(value); |
- } |
- |
- /** |
- * Initialize a newly created simple string literal. |
- * |
- * @param literal the token representing the literal |
- * @param value the value of the literal |
- */ |
- SimpleStringLiteral({Token literal, String value}) : this.full(literal, value); |
- accept(ASTVisitor visitor) => visitor.visitSimpleStringLiteral(this); |
- Token get beginToken => literal; |
- Token get endToken => literal; |
- |
- /** |
- * Return the value of the literal. |
- * |
- * @return the value of the literal |
- */ |
- String get value => _value; |
- |
- /** |
- * Return `true` if this string literal is a multi-line string. |
- * |
- * @return `true` if this string literal is a multi-line string |
- */ |
- bool get isMultiline { |
- if (_value.length < 6) { |
- return false; |
- } |
- return _value.endsWith("\"\"\"") || _value.endsWith("'''"); |
- } |
- |
- /** |
- * Return `true` if this string literal is a raw string. |
- * |
- * @return `true` if this string literal is a raw string |
- */ |
- bool get isRaw => _value.codeUnitAt(0) == 0x40; |
- bool get isSynthetic => literal.isSynthetic; |
- |
- /** |
- * Set the value of the literal to the given string. |
- * |
- * @param string the value of the literal |
- */ |
- void set value(String string) { |
- _value = StringUtilities.intern(_value); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- } |
- void appendStringValue(JavaStringBuilder builder) { |
- builder.append(value); |
- } |
-} |
-/** |
- * Instances of the class `Statement` defines the behavior common to nodes that represent a |
- * statement. |
- * |
- * <pre> |
- * statement ::= |
- * [Block] |
- * | [VariableDeclarationStatement] |
- * | [ForStatement] |
- * | [ForEachStatement] |
- * | [WhileStatement] |
- * | [DoStatement] |
- * | [SwitchStatement] |
- * | [IfStatement] |
- * | [TryStatement] |
- * | [BreakStatement] |
- * | [ContinueStatement] |
- * | [ReturnStatement] |
- * | [ExpressionStatement] |
- * | [FunctionDeclarationStatement] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class Statement extends ASTNode { |
-} |
-/** |
- * Instances of the class `StringInterpolation` represent a string interpolation literal. |
- * |
- * <pre> |
- * stringInterpolation ::= |
- * ''' [InterpolationElement]* ''' |
- * | '"' [InterpolationElement]* '"' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class StringInterpolation extends StringLiteral { |
- |
- /** |
- * The elements that will be composed to produce the resulting string. |
- */ |
- NodeList<InterpolationElement> elements; |
- |
- /** |
- * Initialize a newly created string interpolation expression. |
- * |
- * @param elements the elements that will be composed to produce the resulting string |
- */ |
- StringInterpolation.full(List<InterpolationElement> elements) { |
- this.elements = new NodeList<InterpolationElement>(this); |
- this.elements.addAll(elements); |
- } |
- |
- /** |
- * Initialize a newly created string interpolation expression. |
- * |
- * @param elements the elements that will be composed to produce the resulting string |
- */ |
- StringInterpolation({List<InterpolationElement> elements}) : this.full(elements); |
- accept(ASTVisitor visitor) => visitor.visitStringInterpolation(this); |
- Token get beginToken => elements.beginToken; |
- Token get endToken => elements.endToken; |
- void visitChildren(ASTVisitor visitor) { |
- elements.accept(visitor); |
- } |
- void appendStringValue(JavaStringBuilder builder) { |
- throw new IllegalArgumentException(); |
- } |
-} |
-/** |
- * Instances of the class `StringLiteral` represent a string literal expression. |
- * |
- * <pre> |
- * stringLiteral ::= |
- * [SimpleStringLiteral] |
- * | [AdjacentStrings] |
- * | [StringInterpolation] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class StringLiteral extends Literal { |
- |
- /** |
- * Return the value of the string literal, or `null` if the string is not a constant string |
- * without any string interpolation. |
- * |
- * @return the value of the string literal |
- */ |
- String get stringValue { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- try { |
- appendStringValue(builder); |
- } on IllegalArgumentException catch (exception) { |
- return null; |
- } |
- return builder.toString(); |
- } |
- |
- /** |
- * Append the value of the given string literal to the given string builder. |
- * |
- * @param builder the builder to which the string's value is to be appended |
- * @throws IllegalArgumentException if the string is not a constant string without any string |
- * interpolation |
- */ |
- void appendStringValue(JavaStringBuilder builder); |
-} |
-/** |
- * Instances of the class `SuperConstructorInvocation` represent the invocation of a |
- * superclass' constructor from within a constructor's initialization list. |
- * |
- * <pre> |
- * superInvocation ::= |
- * 'super' ('.' [SimpleIdentifier])? [ArgumentList] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SuperConstructorInvocation extends ConstructorInitializer { |
- |
- /** |
- * The token for the 'super' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * 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 period; |
- |
- /** |
- * The name of the constructor that is being invoked, or `null` if the unnamed constructor |
- * is being invoked. |
- */ |
- SimpleIdentifier _constructorName; |
- |
- /** |
- * The list of arguments to the constructor. |
- */ |
- ArgumentList _argumentList; |
- |
- /** |
- * The element associated with the 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 staticElement; |
- |
- /** |
- * Initialize a newly created super invocation to invoke the inherited constructor with the given |
- * name with the given arguments. |
- * |
- * @param keyword the token for the 'super' keyword |
- * @param period the token for the period before the name of the constructor that is being invoked |
- * @param constructorName the name of the constructor that is being invoked |
- * @param argumentList the list of arguments to the constructor |
- */ |
- SuperConstructorInvocation.full(Token keyword, Token period, SimpleIdentifier constructorName, ArgumentList argumentList) { |
- this.keyword = keyword; |
- this.period = period; |
- this._constructorName = becomeParentOf(constructorName); |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- |
- /** |
- * Initialize a newly created super invocation to invoke the inherited constructor with the given |
- * name with the given arguments. |
- * |
- * @param keyword the token for the 'super' keyword |
- * @param period the token for the period before the name of the constructor that is being invoked |
- * @param constructorName the name of the constructor that is being invoked |
- * @param argumentList the list of arguments to the constructor |
- */ |
- SuperConstructorInvocation({Token keyword, Token period, SimpleIdentifier constructorName, ArgumentList argumentList}) : this.full(keyword, period, constructorName, argumentList); |
- accept(ASTVisitor visitor) => visitor.visitSuperConstructorInvocation(this); |
- |
- /** |
- * Return the list of arguments to the constructor. |
- * |
- * @return the list of arguments to the constructor |
- */ |
- ArgumentList get argumentList => _argumentList; |
- Token get beginToken => keyword; |
- |
- /** |
- * Return the name of the constructor that is being invoked, or `null` if the unnamed |
- * constructor is being invoked. |
- * |
- * @return the name of the constructor that is being invoked |
- */ |
- SimpleIdentifier get constructorName => _constructorName; |
- Token get endToken => _argumentList.endToken; |
- |
- /** |
- * Set the list of arguments to the constructor to the given list. |
- * |
- * @param argumentList the list of arguments to the constructor |
- */ |
- void set argumentList(ArgumentList argumentList) { |
- this._argumentList = becomeParentOf(argumentList); |
- } |
- |
- /** |
- * Set the name of the constructor that is being invoked to the given identifier. |
- * |
- * @param identifier the name of the constructor that is being invoked |
- */ |
- void set constructorName(SimpleIdentifier identifier) { |
- _constructorName = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_constructorName, visitor); |
- safelyVisitChild(_argumentList, visitor); |
- } |
-} |
-/** |
- * Instances of the class `SuperExpression` represent a super expression. |
- * |
- * <pre> |
- * superExpression ::= |
- * 'super' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SuperExpression extends Expression { |
- |
- /** |
- * The token representing the keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * Initialize a newly created super expression. |
- * |
- * @param keyword the token representing the keyword |
- */ |
- SuperExpression.full(Token keyword) { |
- this.keyword = keyword; |
- } |
- |
- /** |
- * Initialize a newly created super expression. |
- * |
- * @param keyword the token representing the keyword |
- */ |
- SuperExpression({Token keyword}) : this.full(keyword); |
- accept(ASTVisitor visitor) => visitor.visitSuperExpression(this); |
- Token get beginToken => keyword; |
- Token get endToken => keyword; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `SwitchCase` represent the case in a switch statement. |
- * |
- * <pre> |
- * switchCase ::= |
- * [SimpleIdentifier]* 'case' [Expression] ':' [Statement]* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SwitchCase extends SwitchMember { |
- |
- /** |
- * The expression controlling whether the statements will be executed. |
- */ |
- Expression _expression; |
- |
- /** |
- * Initialize a newly created switch case. |
- * |
- * @param labels the labels associated with the switch member |
- * @param keyword the token representing the 'case' or 'default' keyword |
- * @param expression the expression controlling whether the statements will be executed |
- * @param colon the colon separating the keyword or the expression from the statements |
- * @param statements the statements that will be executed if this switch member is selected |
- */ |
- SwitchCase.full(List<Label> labels, Token keyword, Expression expression, Token colon, List<Statement> statements) : super.full(labels, keyword, colon, statements) { |
- this._expression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Initialize a newly created switch case. |
- * |
- * @param labels the labels associated with the switch member |
- * @param keyword the token representing the 'case' or 'default' keyword |
- * @param expression the expression controlling whether the statements will be executed |
- * @param colon the colon separating the keyword or the expression from the statements |
- * @param statements the statements that will be executed if this switch member is selected |
- */ |
- SwitchCase({List<Label> labels, Token keyword, Expression expression, Token colon, List<Statement> statements}) : this.full(labels, keyword, expression, colon, statements); |
- accept(ASTVisitor visitor) => visitor.visitSwitchCase(this); |
- |
- /** |
- * Return the expression controlling whether the statements will be executed. |
- * |
- * @return the expression controlling whether the statements will be executed |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Set the expression controlling whether the statements will be executed to the given expression. |
- * |
- * @param expression the expression controlling whether the statements will be executed |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- labels.accept(visitor); |
- safelyVisitChild(_expression, visitor); |
- statements.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `SwitchDefault` represent the default case in a switch statement. |
- * |
- * <pre> |
- * switchDefault ::= |
- * [SimpleIdentifier]* 'default' ':' [Statement]* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SwitchDefault extends SwitchMember { |
- |
- /** |
- * Initialize a newly created switch default. |
- * |
- * @param labels the labels associated with the switch member |
- * @param keyword the token representing the 'case' or 'default' keyword |
- * @param colon the colon separating the keyword or the expression from the statements |
- * @param statements the statements that will be executed if this switch member is selected |
- */ |
- SwitchDefault.full(List<Label> labels, Token keyword, Token colon, List<Statement> statements) : super.full(labels, keyword, colon, statements); |
- |
- /** |
- * Initialize a newly created switch default. |
- * |
- * @param labels the labels associated with the switch member |
- * @param keyword the token representing the 'case' or 'default' keyword |
- * @param colon the colon separating the keyword or the expression from the statements |
- * @param statements the statements that will be executed if this switch member is selected |
- */ |
- SwitchDefault({List<Label> labels, Token keyword, Token colon, List<Statement> statements}) : this.full(labels, keyword, colon, statements); |
- accept(ASTVisitor visitor) => visitor.visitSwitchDefault(this); |
- void visitChildren(ASTVisitor visitor) { |
- labels.accept(visitor); |
- statements.accept(visitor); |
- } |
-} |
-/** |
- * The abstract class `SwitchMember` defines the behavior common to objects representing |
- * elements within a switch statement. |
- * |
- * <pre> |
- * switchMember ::= |
- * switchCase |
- * | switchDefault |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class SwitchMember extends ASTNode { |
- |
- /** |
- * The labels associated with the switch member. |
- */ |
- NodeList<Label> labels; |
- |
- /** |
- * The token representing the 'case' or 'default' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The colon separating the keyword or the expression from the statements. |
- */ |
- Token colon; |
- |
- /** |
- * The statements that will be executed if this switch member is selected. |
- */ |
- NodeList<Statement> statements; |
- |
- /** |
- * Initialize a newly created switch member. |
- * |
- * @param labels the labels associated with the switch member |
- * @param keyword the token representing the 'case' or 'default' keyword |
- * @param colon the colon separating the keyword or the expression from the statements |
- * @param statements the statements that will be executed if this switch member is selected |
- */ |
- SwitchMember.full(List<Label> labels, Token keyword, Token colon, List<Statement> statements) { |
- this.labels = new NodeList<Label>(this); |
- this.statements = new NodeList<Statement>(this); |
- this.labels.addAll(labels); |
- this.keyword = keyword; |
- this.colon = colon; |
- this.statements.addAll(statements); |
- } |
- |
- /** |
- * Initialize a newly created switch member. |
- * |
- * @param labels the labels associated with the switch member |
- * @param keyword the token representing the 'case' or 'default' keyword |
- * @param colon the colon separating the keyword or the expression from the statements |
- * @param statements the statements that will be executed if this switch member is selected |
- */ |
- SwitchMember({List<Label> labels, Token keyword, Token colon, List<Statement> statements}) : this.full(labels, keyword, colon, statements); |
- Token get beginToken { |
- if (!labels.isEmpty) { |
- return labels.beginToken; |
- } |
- return keyword; |
- } |
- Token get endToken { |
- if (!statements.isEmpty) { |
- return statements.endToken; |
- } |
- return colon; |
- } |
-} |
-/** |
- * Instances of the class `SwitchStatement` represent a switch statement. |
- * |
- * <pre> |
- * switchStatement ::= |
- * 'switch' '(' [Expression] ')' '{' [SwitchCase]* [SwitchDefault]? '}' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SwitchStatement extends Statement { |
- |
- /** |
- * The token representing the 'switch' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token leftParenthesis; |
- |
- /** |
- * The expression used to determine which of the switch members will be selected. |
- */ |
- Expression _expression; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token rightParenthesis; |
- |
- /** |
- * The left curly bracket. |
- */ |
- Token leftBracket; |
- |
- /** |
- * The switch members that can be selected by the expression. |
- */ |
- NodeList<SwitchMember> members; |
- |
- /** |
- * The right curly bracket. |
- */ |
- Token rightBracket; |
- |
- /** |
- * Initialize a newly created switch statement. |
- * |
- * @param keyword the token representing the 'switch' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param expression the expression used to determine which of the switch members will be selected |
- * @param rightParenthesis the right parenthesis |
- * @param leftBracket the left curly bracket |
- * @param members the switch members that can be selected by the expression |
- * @param rightBracket the right curly bracket |
- */ |
- SwitchStatement.full(Token keyword, Token leftParenthesis, Expression expression, Token rightParenthesis, Token leftBracket, List<SwitchMember> members, Token rightBracket) { |
- this.members = new NodeList<SwitchMember>(this); |
- this.keyword = keyword; |
- this.leftParenthesis = leftParenthesis; |
- this._expression = becomeParentOf(expression); |
- this.rightParenthesis = rightParenthesis; |
- this.leftBracket = leftBracket; |
- this.members.addAll(members); |
- this.rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created switch statement. |
- * |
- * @param keyword the token representing the 'switch' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param expression the expression used to determine which of the switch members will be selected |
- * @param rightParenthesis the right parenthesis |
- * @param leftBracket the left curly bracket |
- * @param members the switch members that can be selected by the expression |
- * @param rightBracket the right curly bracket |
- */ |
- SwitchStatement({Token keyword, Token leftParenthesis, Expression expression, Token rightParenthesis, Token leftBracket, List<SwitchMember> members, Token rightBracket}) : this.full(keyword, leftParenthesis, expression, rightParenthesis, leftBracket, members, rightBracket); |
- accept(ASTVisitor visitor) => visitor.visitSwitchStatement(this); |
- Token get beginToken => keyword; |
- Token get endToken => rightBracket; |
- |
- /** |
- * Return the expression used to determine which of the switch members will be selected. |
- * |
- * @return the expression used to determine which of the switch members will be selected |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Set the expression used to determine which of the switch members will be selected to the given |
- * expression. |
- * |
- * @param expression the expression used to determine which of the switch members will be selected |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_expression, visitor); |
- members.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `SymbolLiteral` represent a symbol literal expression. |
- * |
- * <pre> |
- * symbolLiteral ::= |
- * '#' (operator | (identifier ('.' identifier)*)) |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SymbolLiteral extends Literal { |
- |
- /** |
- * The token introducing the literal. |
- */ |
- Token poundSign; |
- |
- /** |
- * The components of the literal. |
- */ |
- List<Token> components; |
- |
- /** |
- * Initialize a newly created symbol literal. |
- * |
- * @param poundSign the token introducing the literal |
- * @param components the components of the literal |
- */ |
- SymbolLiteral.full(Token poundSign, List<Token> components) { |
- this.poundSign = poundSign; |
- this.components = components; |
- } |
- |
- /** |
- * Initialize a newly created symbol literal. |
- * |
- * @param poundSign the token introducing the literal |
- * @param components the components of the literal |
- */ |
- SymbolLiteral({Token poundSign, List<Token> components}) : this.full(poundSign, components); |
- accept(ASTVisitor visitor) => visitor.visitSymbolLiteral(this); |
- Token get beginToken => poundSign; |
- Token get endToken => components[components.length - 1]; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `ThisExpression` represent a this expression. |
- * |
- * <pre> |
- * thisExpression ::= |
- * 'this' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ThisExpression extends Expression { |
- |
- /** |
- * The token representing the keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * Initialize a newly created this expression. |
- * |
- * @param keyword the token representing the keyword |
- */ |
- ThisExpression.full(Token keyword) { |
- this.keyword = keyword; |
- } |
- |
- /** |
- * Initialize a newly created this expression. |
- * |
- * @param keyword the token representing the keyword |
- */ |
- ThisExpression({Token keyword}) : this.full(keyword); |
- accept(ASTVisitor visitor) => visitor.visitThisExpression(this); |
- Token get beginToken => keyword; |
- Token get endToken => keyword; |
- void visitChildren(ASTVisitor visitor) { |
- } |
-} |
-/** |
- * Instances of the class `ThrowExpression` represent a throw expression. |
- * |
- * <pre> |
- * throwExpression ::= |
- * 'throw' [Expression] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ThrowExpression extends Expression { |
- |
- /** |
- * The token representing the 'throw' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The expression computing the exception to be thrown. |
- */ |
- Expression _expression; |
- |
- /** |
- * Initialize a newly created throw expression. |
- * |
- * @param keyword the token representing the 'throw' keyword |
- * @param expression the expression computing the exception to be thrown |
- */ |
- ThrowExpression.full(Token keyword, Expression expression) { |
- this.keyword = keyword; |
- this._expression = becomeParentOf(expression); |
- } |
- |
- /** |
- * Initialize a newly created throw expression. |
- * |
- * @param keyword the token representing the 'throw' keyword |
- * @param expression the expression computing the exception to be thrown |
- */ |
- ThrowExpression({Token keyword, Expression expression}) : this.full(keyword, expression); |
- accept(ASTVisitor visitor) => visitor.visitThrowExpression(this); |
- Token get beginToken => keyword; |
- Token get endToken { |
- if (_expression != null) { |
- return _expression.endToken; |
- } |
- return keyword; |
- } |
- |
- /** |
- * Return the expression computing the exception to be thrown. |
- * |
- * @return the expression computing the exception to be thrown |
- */ |
- Expression get expression => _expression; |
- |
- /** |
- * Set the expression computing the exception to be thrown to the given expression. |
- * |
- * @param expression the expression computing the exception to be thrown |
- */ |
- void set expression(Expression expression) { |
- this._expression = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_expression, visitor); |
- } |
-} |
-/** |
- * Instances of the class `TopLevelVariableDeclaration` represent the declaration of one or |
- * more top-level variables of the same type. |
- * |
- * <pre> |
- * topLevelVariableDeclaration ::= |
- * ('final' | 'const') type? staticFinalDeclarationList ';' |
- * | variableDeclaration ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class TopLevelVariableDeclaration extends CompilationUnitMember { |
- |
- /** |
- * The top-level variables being declared. |
- */ |
- VariableDeclarationList _variableList; |
- |
- /** |
- * The semicolon terminating the declaration. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created top-level variable declaration. |
- * |
- * @param comment the documentation comment associated with this variable |
- * @param metadata the annotations associated with this variable |
- * @param variableList the top-level variables being declared |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- TopLevelVariableDeclaration.full(Comment comment, List<Annotation> metadata, VariableDeclarationList variableList, Token semicolon) : super.full(comment, metadata) { |
- this._variableList = becomeParentOf(variableList); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created top-level variable declaration. |
- * |
- * @param comment the documentation comment associated with this variable |
- * @param metadata the annotations associated with this variable |
- * @param variableList the top-level variables being declared |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- TopLevelVariableDeclaration({Comment comment, List<Annotation> metadata, VariableDeclarationList variableList, Token semicolon}) : this.full(comment, metadata, variableList, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitTopLevelVariableDeclaration(this); |
- Element get element => null; |
- Token get endToken => semicolon; |
- |
- /** |
- * Return the top-level variables being declared. |
- * |
- * @return the top-level variables being declared |
- */ |
- VariableDeclarationList get variables => _variableList; |
- |
- /** |
- * Set the top-level variables being declared to the given list of variables. |
- * |
- * @param variableList the top-level variables being declared |
- */ |
- void set variables(VariableDeclarationList variableList) { |
- variableList = becomeParentOf(variableList); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_variableList, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata => _variableList.beginToken; |
-} |
-/** |
- * Instances of the class `TryStatement` represent a try statement. |
- * |
- * <pre> |
- * tryStatement ::= |
- * 'try' [Block] ([CatchClause]+ finallyClause? | finallyClause) |
- * |
- * finallyClause ::= |
- * 'finally' [Block] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class TryStatement extends Statement { |
- |
- /** |
- * The token representing the 'try' keyword. |
- */ |
- Token tryKeyword; |
- |
- /** |
- * The body of the statement. |
- */ |
- Block _body; |
- |
- /** |
- * The catch clauses contained in the try statement. |
- */ |
- NodeList<CatchClause> catchClauses; |
- |
- /** |
- * The token representing the 'finally' keyword, or `null` if the statement does not contain |
- * a finally clause. |
- */ |
- Token finallyKeyword; |
- |
- /** |
- * The finally block contained in the try statement, or `null` if the statement does not |
- * contain a finally clause. |
- */ |
- Block _finallyBlock; |
- |
- /** |
- * Initialize a newly created try statement. |
- * |
- * @param tryKeyword the token representing the 'try' keyword |
- * @param body the body of the statement |
- * @param catchClauses the catch clauses contained in the try statement |
- * @param finallyKeyword the token representing the 'finally' keyword |
- * @param finallyBlock the finally block contained in the try statement |
- */ |
- TryStatement.full(Token tryKeyword, Block body, List<CatchClause> catchClauses, Token finallyKeyword, Block finallyBlock) { |
- this.catchClauses = new NodeList<CatchClause>(this); |
- this.tryKeyword = tryKeyword; |
- this._body = becomeParentOf(body); |
- this.catchClauses.addAll(catchClauses); |
- this.finallyKeyword = finallyKeyword; |
- this._finallyBlock = becomeParentOf(finallyBlock); |
- } |
- |
- /** |
- * Initialize a newly created try statement. |
- * |
- * @param tryKeyword the token representing the 'try' keyword |
- * @param body the body of the statement |
- * @param catchClauses the catch clauses contained in the try statement |
- * @param finallyKeyword the token representing the 'finally' keyword |
- * @param finallyBlock the finally block contained in the try statement |
- */ |
- TryStatement({Token tryKeyword, Block body, List<CatchClause> catchClauses, Token finallyKeyword, Block finallyBlock}) : this.full(tryKeyword, body, catchClauses, finallyKeyword, finallyBlock); |
- accept(ASTVisitor visitor) => visitor.visitTryStatement(this); |
- Token get beginToken => tryKeyword; |
- |
- /** |
- * Return the body of the statement. |
- * |
- * @return the body of the statement |
- */ |
- Block get body => _body; |
- Token get endToken { |
- if (_finallyBlock != null) { |
- return _finallyBlock.endToken; |
- } else if (finallyKeyword != null) { |
- return finallyKeyword; |
- } else if (!catchClauses.isEmpty) { |
- return catchClauses.endToken; |
- } |
- return _body.endToken; |
- } |
- |
- /** |
- * Return the finally block contained in the try statement, or `null` if the statement does |
- * not contain a finally clause. |
- * |
- * @return the finally block contained in the try statement |
- */ |
- Block get finallyBlock => _finallyBlock; |
- |
- /** |
- * Set the body of the statement to the given block. |
- * |
- * @param block the body of the statement |
- */ |
- void set body(Block block) { |
- _body = becomeParentOf(block); |
- } |
- |
- /** |
- * Set the finally block contained in the try statement to the given block. |
- * |
- * @param block the finally block contained in the try statement |
- */ |
- void set finallyBlock(Block block) { |
- _finallyBlock = becomeParentOf(block); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_body, visitor); |
- catchClauses.accept(visitor); |
- safelyVisitChild(_finallyBlock, visitor); |
- } |
-} |
-/** |
- * The abstract class `TypeAlias` defines the behavior common to declarations of type aliases. |
- * |
- * <pre> |
- * typeAlias ::= |
- * 'typedef' typeAliasBody |
- * |
- * typeAliasBody ::= |
- * classTypeAlias |
- * | functionTypeAlias |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class TypeAlias extends CompilationUnitMember { |
- |
- /** |
- * The token representing the 'typedef' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The semicolon terminating the declaration. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created type alias. |
- * |
- * @param comment the documentation comment associated with this type alias |
- * @param metadata the annotations associated with this type alias |
- * @param keyword the token representing the 'typedef' keyword |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- TypeAlias.full(Comment comment, List<Annotation> metadata, Token keyword, Token semicolon) : super.full(comment, metadata) { |
- this.keyword = keyword; |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created type alias. |
- * |
- * @param comment the documentation comment associated with this type alias |
- * @param metadata the annotations associated with this type alias |
- * @param keyword the token representing the 'typedef' keyword |
- * @param semicolon the semicolon terminating the declaration |
- */ |
- TypeAlias({Comment comment, List<Annotation> metadata, Token keyword, Token semicolon}) : this.full(comment, metadata, keyword, semicolon); |
- Token get endToken => semicolon; |
- Token get firstTokenAfterCommentAndMetadata => keyword; |
-} |
-/** |
- * Instances of the class `TypeArgumentList` represent a list of type arguments. |
- * |
- * <pre> |
- * typeArguments ::= |
- * '<' typeName (',' typeName)* '>' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class TypeArgumentList extends ASTNode { |
- |
- /** |
- * The left bracket. |
- */ |
- Token leftBracket; |
- |
- /** |
- * The type arguments associated with the type. |
- */ |
- NodeList<TypeName> arguments; |
- |
- /** |
- * The right bracket. |
- */ |
- Token rightBracket; |
- |
- /** |
- * Initialize a newly created list of type arguments. |
- * |
- * @param leftBracket the left bracket |
- * @param arguments the type arguments associated with the type |
- * @param rightBracket the right bracket |
- */ |
- TypeArgumentList.full(Token leftBracket, List<TypeName> arguments, Token rightBracket) { |
- this.arguments = new NodeList<TypeName>(this); |
- this.leftBracket = leftBracket; |
- this.arguments.addAll(arguments); |
- this.rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created list of type arguments. |
- * |
- * @param leftBracket the left bracket |
- * @param arguments the type arguments associated with the type |
- * @param rightBracket the right bracket |
- */ |
- TypeArgumentList({Token leftBracket, List<TypeName> arguments, Token rightBracket}) : this.full(leftBracket, arguments, rightBracket); |
- accept(ASTVisitor visitor) => visitor.visitTypeArgumentList(this); |
- Token get beginToken => leftBracket; |
- Token get endToken => rightBracket; |
- void visitChildren(ASTVisitor visitor) { |
- arguments.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `TypeName` represent the name of a type, which can optionally |
- * include type arguments. |
- * |
- * <pre> |
- * typeName ::= |
- * [Identifier] typeArguments? |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class TypeName extends ASTNode { |
- |
- /** |
- * The name of the type. |
- */ |
- Identifier _name; |
- |
- /** |
- * The type arguments associated with the type, or `null` if there are no type arguments. |
- */ |
- TypeArgumentList _typeArguments; |
- |
- /** |
- * The type being named, or `null` if the AST structure has not been resolved. |
- */ |
- Type2 type; |
- |
- /** |
- * Initialize a newly created type name. |
- * |
- * @param name the name of the type |
- * @param typeArguments the type arguments associated with the type, or `null` if there are |
- * no type arguments |
- */ |
- TypeName.full(Identifier name, TypeArgumentList typeArguments) { |
- this._name = becomeParentOf(name); |
- this._typeArguments = becomeParentOf(typeArguments); |
- } |
- |
- /** |
- * Initialize a newly created type name. |
- * |
- * @param name the name of the type |
- * @param typeArguments the type arguments associated with the type, or `null` if there are |
- * no type arguments |
- */ |
- TypeName({Identifier name, TypeArgumentList typeArguments}) : this.full(name, typeArguments); |
- accept(ASTVisitor visitor) => visitor.visitTypeName(this); |
- Token get beginToken => _name.beginToken; |
- Token get endToken { |
- if (_typeArguments != null) { |
- return _typeArguments.endToken; |
- } |
- return _name.endToken; |
- } |
- |
- /** |
- * Return the name of the type. |
- * |
- * @return the name of the type |
- */ |
- Identifier get name => _name; |
- |
- /** |
- * Return the type arguments associated with the type, or `null` if there are no type |
- * arguments. |
- * |
- * @return the type arguments associated with the type |
- */ |
- TypeArgumentList get typeArguments => _typeArguments; |
- bool get isSynthetic => _name.isSynthetic && _typeArguments == null; |
- |
- /** |
- * Set the name of the type to the given identifier. |
- * |
- * @param identifier the name of the type |
- */ |
- void set name(Identifier identifier) { |
- _name = becomeParentOf(identifier); |
- } |
- |
- /** |
- * Set the type arguments associated with the type to the given type arguments. |
- * |
- * @param typeArguments the type arguments associated with the type |
- */ |
- void set typeArguments(TypeArgumentList typeArguments) { |
- this._typeArguments = becomeParentOf(typeArguments); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_typeArguments, visitor); |
- } |
-} |
-/** |
- * Instances of the class `TypeParameter` represent a type parameter. |
- * |
- * <pre> |
- * typeParameter ::= |
- * [SimpleIdentifier] ('extends' [TypeName])? |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class TypeParameter extends Declaration { |
- |
- /** |
- * The name of the type parameter. |
- */ |
- SimpleIdentifier _name; |
- |
- /** |
- * The token representing the 'extends' keyword, or `null` if there was no explicit upper |
- * bound. |
- */ |
- Token keyword; |
- |
- /** |
- * The name of the upper bound for legal arguments, or `null` if there was no explicit upper |
- * bound. |
- */ |
- TypeName _bound; |
- |
- /** |
- * Initialize a newly created type parameter. |
- * |
- * @param comment the documentation comment associated with the type parameter |
- * @param metadata the annotations associated with the type parameter |
- * @param name the name of the type parameter |
- * @param keyword the token representing the 'extends' keyword |
- * @param bound the name of the upper bound for legal arguments |
- */ |
- TypeParameter.full(Comment comment, List<Annotation> metadata, SimpleIdentifier name, Token keyword, TypeName bound) : super.full(comment, metadata) { |
- this._name = becomeParentOf(name); |
- this.keyword = keyword; |
- this._bound = becomeParentOf(bound); |
- } |
- |
- /** |
- * Initialize a newly created type parameter. |
- * |
- * @param comment the documentation comment associated with the type parameter |
- * @param metadata the annotations associated with the type parameter |
- * @param name the name of the type parameter |
- * @param keyword the token representing the 'extends' keyword |
- * @param bound the name of the upper bound for legal arguments |
- */ |
- TypeParameter({Comment comment, List<Annotation> metadata, SimpleIdentifier name, Token keyword, TypeName bound}) : this.full(comment, metadata, name, keyword, bound); |
- accept(ASTVisitor visitor) => visitor.visitTypeParameter(this); |
- |
- /** |
- * Return the name of the upper bound for legal arguments, or `null` if there was no |
- * explicit upper bound. |
- * |
- * @return the name of the upper bound for legal arguments |
- */ |
- TypeName get bound => _bound; |
- TypeParameterElement get element => _name != null ? (_name.staticElement as TypeParameterElement) : null; |
- Token get endToken { |
- if (_bound == null) { |
- return _name.endToken; |
- } |
- return _bound.endToken; |
- } |
- |
- /** |
- * Return the name of the type parameter. |
- * |
- * @return the name of the type parameter |
- */ |
- SimpleIdentifier get name => _name; |
- |
- /** |
- * Set the name of the upper bound for legal arguments to the given type name. |
- * |
- * @param typeName the name of the upper bound for legal arguments |
- */ |
- void set bound(TypeName typeName) { |
- _bound = becomeParentOf(typeName); |
- } |
- |
- /** |
- * Set the name of the type parameter to the given identifier. |
- * |
- * @param identifier the name of the type parameter |
- */ |
- void set name(SimpleIdentifier identifier) { |
- _name = becomeParentOf(identifier); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_bound, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata => _name.beginToken; |
-} |
-/** |
- * Instances of the class `TypeParameterList` represent type parameters within a declaration. |
- * |
- * <pre> |
- * typeParameterList ::= |
- * '<' [TypeParameter] (',' [TypeParameter])* '>' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class TypeParameterList extends ASTNode { |
- |
- /** |
- * The left angle bracket. |
- */ |
- Token leftBracket; |
- |
- /** |
- * The type parameters in the list. |
- */ |
- NodeList<TypeParameter> typeParameters; |
- |
- /** |
- * The right angle bracket. |
- */ |
- Token rightBracket; |
- |
- /** |
- * Initialize a newly created list of type parameters. |
- * |
- * @param leftBracket the left angle bracket |
- * @param typeParameters the type parameters in the list |
- * @param rightBracket the right angle bracket |
- */ |
- TypeParameterList.full(Token leftBracket, List<TypeParameter> typeParameters, Token rightBracket) { |
- this.typeParameters = new NodeList<TypeParameter>(this); |
- this.leftBracket = leftBracket; |
- this.typeParameters.addAll(typeParameters); |
- this.rightBracket = rightBracket; |
- } |
- |
- /** |
- * Initialize a newly created list of type parameters. |
- * |
- * @param leftBracket the left angle bracket |
- * @param typeParameters the type parameters in the list |
- * @param rightBracket the right angle bracket |
- */ |
- TypeParameterList({Token leftBracket, List<TypeParameter> typeParameters, Token rightBracket}) : this.full(leftBracket, typeParameters, rightBracket); |
- accept(ASTVisitor visitor) => visitor.visitTypeParameterList(this); |
- Token get beginToken => leftBracket; |
- Token get endToken => rightBracket; |
- void visitChildren(ASTVisitor visitor) { |
- typeParameters.accept(visitor); |
- } |
-} |
-/** |
- * The abstract class `TypedLiteral` defines the behavior common to literals that have a type |
- * associated with them. |
- * |
- * <pre> |
- * listLiteral ::= |
- * [ListLiteral] |
- * | [MapLiteral] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class TypedLiteral extends Literal { |
- |
- /** |
- * The token representing the 'const' keyword, or `null` if the literal is not a constant. |
- */ |
- Token constKeyword; |
- |
- /** |
- * The type argument associated with this literal, or `null` if no type arguments were |
- * declared. |
- */ |
- TypeArgumentList typeArguments; |
- |
- /** |
- * Initialize a newly created typed literal. |
- * |
- * @param constKeyword the token representing the 'const' keyword |
- * @param typeArguments the type argument associated with this literal, or `null` if no type |
- * arguments were declared |
- */ |
- TypedLiteral.full(Token constKeyword, TypeArgumentList typeArguments) { |
- this.constKeyword = constKeyword; |
- this.typeArguments = becomeParentOf(typeArguments); |
- } |
- |
- /** |
- * Initialize a newly created typed literal. |
- * |
- * @param constKeyword the token representing the 'const' keyword |
- * @param typeArguments the type argument associated with this literal, or `null` if no type |
- * arguments were declared |
- */ |
- TypedLiteral({Token constKeyword, TypeArgumentList typeArguments}) : this.full(constKeyword, typeArguments); |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(typeArguments, visitor); |
- } |
-} |
-/** |
- * The abstract class `UriBasedDirective` defines the behavior common to nodes that represent |
- * a directive that references a URI. |
- * |
- * <pre> |
- * uriBasedDirective ::= |
- * [ExportDirective] |
- * | [ImportDirective] |
- * | [PartDirective] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-abstract class UriBasedDirective extends Directive { |
- |
- /** |
- * The URI referenced by this directive. |
- */ |
- StringLiteral _uri; |
- |
- /** |
- * Initialize a newly create URI-based directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param uri the URI referenced by this directive |
- */ |
- UriBasedDirective.full(Comment comment, List<Annotation> metadata, StringLiteral uri) : super.full(comment, metadata) { |
- this._uri = becomeParentOf(uri); |
- } |
- |
- /** |
- * Initialize a newly create URI-based directive. |
- * |
- * @param comment the documentation comment associated with this directive |
- * @param metadata the annotations associated with the directive |
- * @param uri the URI referenced by this directive |
- */ |
- UriBasedDirective({Comment comment, List<Annotation> metadata, StringLiteral uri}) : this.full(comment, metadata, uri); |
- |
- /** |
- * Return the URI referenced by this directive. |
- * |
- * @return the URI referenced by this directive |
- */ |
- StringLiteral get uri => _uri; |
- |
- /** |
- * Return the element associated with the URI of this directive, or `null` if the AST |
- * structure has not been resolved or if this 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. |
- * |
- * @return the element associated with this directive |
- */ |
- Element get uriElement; |
- |
- /** |
- * Set the URI referenced by this directive to the given URI. |
- * |
- * @param uri the URI referenced by this directive |
- */ |
- void set uri(StringLiteral uri) { |
- this._uri = becomeParentOf(uri); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_uri, visitor); |
- } |
-} |
-/** |
- * Instances of the class `VariableDeclaration` represent an identifier that has an initial |
- * value associated with it. Instances of this class are always children of the class |
- * [VariableDeclarationList]. |
- * |
- * <pre> |
- * variableDeclaration ::= |
- * [SimpleIdentifier] ('=' [Expression])? |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class VariableDeclaration extends Declaration { |
- |
- /** |
- * The name of the variable being declared. |
- */ |
- SimpleIdentifier _name; |
- |
- /** |
- * The equal sign separating the variable name from the initial value, or `null` if the |
- * initial value was not specified. |
- */ |
- Token equals; |
- |
- /** |
- * The expression used to compute the initial value for the variable, or `null` if the |
- * initial value was not specified. |
- */ |
- Expression _initializer; |
- |
- /** |
- * Initialize a newly created variable declaration. |
- * |
- * @param comment the documentation comment associated with this declaration |
- * @param metadata the annotations associated with this member |
- * @param name the name of the variable being declared |
- * @param equals the equal sign separating the variable name from the initial value |
- * @param initializer the expression used to compute the initial value for the variable |
- */ |
- VariableDeclaration.full(Comment comment, List<Annotation> metadata, SimpleIdentifier name, Token equals, Expression initializer) : super.full(comment, metadata) { |
- this._name = becomeParentOf(name); |
- this.equals = equals; |
- this._initializer = becomeParentOf(initializer); |
- } |
- |
- /** |
- * Initialize a newly created variable declaration. |
- * |
- * @param comment the documentation comment associated with this declaration |
- * @param metadata the annotations associated with this member |
- * @param name the name of the variable being declared |
- * @param equals the equal sign separating the variable name from the initial value |
- * @param initializer the expression used to compute the initial value for the variable |
- */ |
- VariableDeclaration({Comment comment, List<Annotation> metadata, SimpleIdentifier name, Token equals, Expression initializer}) : this.full(comment, metadata, name, equals, initializer); |
- accept(ASTVisitor visitor) => visitor.visitVariableDeclaration(this); |
- |
- /** |
- * This overridden implementation of getDocumentationComment() looks in the grandparent node for |
- * dartdoc comments if no documentation is specifically available on the node. |
- */ |
- Comment get documentationComment { |
- Comment comment = super.documentationComment; |
- if (comment == null) { |
- if (parent != null && parent.parent != null) { |
- ASTNode node = parent.parent; |
- if (node is AnnotatedNode) { |
- return ((node as AnnotatedNode)).documentationComment; |
- } |
- } |
- } |
- return comment; |
- } |
- VariableElement get element => _name != null ? (_name.staticElement as VariableElement) : null; |
- Token get endToken { |
- if (_initializer != null) { |
- return _initializer.endToken; |
- } |
- return _name.endToken; |
- } |
- |
- /** |
- * Return the expression used to compute the initial value for the variable, or `null` if |
- * the initial value was not specified. |
- * |
- * @return the expression used to compute the initial value for the variable |
- */ |
- Expression get initializer => _initializer; |
- |
- /** |
- * Return the name of the variable being declared. |
- * |
- * @return the name of the variable being declared |
- */ |
- SimpleIdentifier get name => _name; |
- |
- /** |
- * Return `true` if this variable was declared with the 'const' modifier. |
- * |
- * @return `true` if this variable was declared with the 'const' modifier |
- */ |
- bool get isConst { |
- ASTNode parent = this.parent; |
- return parent is VariableDeclarationList && ((parent as VariableDeclarationList)).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. |
- * |
- * @return `true` if this variable was declared with the 'final' modifier |
- */ |
- bool get isFinal { |
- ASTNode parent = this.parent; |
- return parent is VariableDeclarationList && ((parent as VariableDeclarationList)).isFinal; |
- } |
- |
- /** |
- * Set the expression used to compute the initial value for the variable to the given expression. |
- * |
- * @param initializer the expression used to compute the initial value for the variable |
- */ |
- void set initializer(Expression initializer) { |
- this._initializer = becomeParentOf(initializer); |
- } |
- |
- /** |
- * Set the name of the variable being declared to the given identifier. |
- * |
- * @param name the name of the variable being declared |
- */ |
- void set name(SimpleIdentifier name) { |
- this._name = becomeParentOf(name); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- super.visitChildren(visitor); |
- safelyVisitChild(_name, visitor); |
- safelyVisitChild(_initializer, visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata => _name.beginToken; |
-} |
-/** |
- * Instances of the class `VariableDeclarationList` represent the declaration of one or more |
- * variables of the same type. |
- * |
- * <pre> |
- * variableDeclarationList ::= |
- * finalConstVarOrType [VariableDeclaration] (',' [VariableDeclaration])* |
- * |
- * finalConstVarOrType ::= |
- * | 'final' [TypeName]? |
- * | 'const' [TypeName]? |
- * | 'var' |
- * | [TypeName] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class VariableDeclarationList extends AnnotatedNode { |
- |
- /** |
- * The token representing the 'final', 'const' or 'var' keyword, or `null` if no keyword was |
- * included. |
- */ |
- Token keyword; |
- |
- /** |
- * The type of the variables being declared, or `null` if no type was provided. |
- */ |
- TypeName _type; |
- |
- /** |
- * A list containing the individual variables being declared. |
- */ |
- NodeList<VariableDeclaration> variables; |
- |
- /** |
- * Initialize a newly created variable declaration list. |
- * |
- * @param comment the documentation comment associated with this declaration list |
- * @param metadata the annotations associated with this declaration list |
- * @param keyword the token representing the 'final', 'const' or 'var' keyword |
- * @param type the type of the variables being declared |
- * @param variables a list containing the individual variables being declared |
- */ |
- VariableDeclarationList.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName type, List<VariableDeclaration> variables) : super.full(comment, metadata) { |
- this.variables = new NodeList<VariableDeclaration>(this); |
- this.keyword = keyword; |
- this._type = becomeParentOf(type); |
- this.variables.addAll(variables); |
- } |
- |
- /** |
- * Initialize a newly created variable declaration list. |
- * |
- * @param comment the documentation comment associated with this declaration list |
- * @param metadata the annotations associated with this declaration list |
- * @param keyword the token representing the 'final', 'const' or 'var' keyword |
- * @param type the type of the variables being declared |
- * @param variables a list containing the individual variables being declared |
- */ |
- VariableDeclarationList({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, List<VariableDeclaration> variables}) : this.full(comment, metadata, keyword, type, variables); |
- accept(ASTVisitor visitor) => visitor.visitVariableDeclarationList(this); |
- Token get endToken => variables.endToken; |
- |
- /** |
- * Return the type of the variables being declared, or `null` if no type was provided. |
- * |
- * @return the type of the variables being declared |
- */ |
- TypeName get type => _type; |
- |
- /** |
- * Return `true` if the variables in this list were declared with the 'const' modifier. |
- * |
- * @return `true` if the variables in this list were declared with the 'const' modifier |
- */ |
- bool get isConst => keyword is KeywordToken && identical(((keyword as KeywordToken)).keyword, Keyword.CONST); |
- |
- /** |
- * 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. |
- * |
- * @return `true` if the variables in this list were declared with the 'final' modifier |
- */ |
- bool get isFinal => keyword is KeywordToken && identical(((keyword as KeywordToken)).keyword, Keyword.FINAL); |
- |
- /** |
- * Set the type of the variables being declared to the given type name. |
- * |
- * @param typeName the type of the variables being declared |
- */ |
- void set type(TypeName typeName) { |
- _type = becomeParentOf(typeName); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_type, visitor); |
- variables.accept(visitor); |
- } |
- Token get firstTokenAfterCommentAndMetadata { |
- if (keyword != null) { |
- return keyword; |
- } else if (_type != null) { |
- return _type.beginToken; |
- } |
- return variables.beginToken; |
- } |
-} |
-/** |
- * Instances of the class `VariableDeclarationStatement` represent a list of variables that |
- * are being declared in a context where a statement is required. |
- * |
- * <pre> |
- * variableDeclarationStatement ::= |
- * [VariableDeclarationList] ';' |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class VariableDeclarationStatement extends Statement { |
- |
- /** |
- * The variables being declared. |
- */ |
- VariableDeclarationList _variableList; |
- |
- /** |
- * The semicolon terminating the statement. |
- */ |
- Token semicolon; |
- |
- /** |
- * Initialize a newly created variable declaration statement. |
- * |
- * @param variableList the fields being declared |
- * @param semicolon the semicolon terminating the statement |
- */ |
- VariableDeclarationStatement.full(VariableDeclarationList variableList, Token semicolon) { |
- this._variableList = becomeParentOf(variableList); |
- this.semicolon = semicolon; |
- } |
- |
- /** |
- * Initialize a newly created variable declaration statement. |
- * |
- * @param variableList the fields being declared |
- * @param semicolon the semicolon terminating the statement |
- */ |
- VariableDeclarationStatement({VariableDeclarationList variableList, Token semicolon}) : this.full(variableList, semicolon); |
- accept(ASTVisitor visitor) => visitor.visitVariableDeclarationStatement(this); |
- Token get beginToken => _variableList.beginToken; |
- Token get endToken => semicolon; |
- |
- /** |
- * Return the variables being declared. |
- * |
- * @return the variables being declared |
- */ |
- VariableDeclarationList get variables => _variableList; |
- |
- /** |
- * Set the variables being declared to the given list of variables. |
- * |
- * @param variableList the variables being declared |
- */ |
- void set variables(VariableDeclarationList variableList) { |
- this._variableList = becomeParentOf(variableList); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_variableList, visitor); |
- } |
-} |
-/** |
- * Instances of the class `WhileStatement` represent a while statement. |
- * |
- * <pre> |
- * whileStatement ::= |
- * 'while' '(' [Expression] ')' [Statement] |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class WhileStatement extends Statement { |
- |
- /** |
- * The token representing the 'while' keyword. |
- */ |
- Token keyword; |
- |
- /** |
- * The left parenthesis. |
- */ |
- Token leftParenthesis; |
- |
- /** |
- * The expression used to determine whether to execute the body of the loop. |
- */ |
- Expression _condition; |
- |
- /** |
- * The right parenthesis. |
- */ |
- Token rightParenthesis; |
- |
- /** |
- * The body of the loop. |
- */ |
- Statement _body; |
- |
- /** |
- * Initialize a newly created while statement. |
- * |
- * @param keyword the token representing the 'while' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param condition the expression used to determine whether to execute the body of the loop |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the loop |
- */ |
- WhileStatement.full(Token keyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Statement body) { |
- this.keyword = keyword; |
- this.leftParenthesis = leftParenthesis; |
- this._condition = becomeParentOf(condition); |
- this.rightParenthesis = rightParenthesis; |
- this._body = becomeParentOf(body); |
- } |
- |
- /** |
- * Initialize a newly created while statement. |
- * |
- * @param keyword the token representing the 'while' keyword |
- * @param leftParenthesis the left parenthesis |
- * @param condition the expression used to determine whether to execute the body of the loop |
- * @param rightParenthesis the right parenthesis |
- * @param body the body of the loop |
- */ |
- WhileStatement({Token keyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Statement body}) : this.full(keyword, leftParenthesis, condition, rightParenthesis, body); |
- accept(ASTVisitor visitor) => visitor.visitWhileStatement(this); |
- Token get beginToken => keyword; |
- |
- /** |
- * Return the body of the loop. |
- * |
- * @return the body of the loop |
- */ |
- Statement get body => _body; |
- |
- /** |
- * Return the expression used to determine whether to execute the body of the loop. |
- * |
- * @return the expression used to determine whether to execute the body of the loop |
- */ |
- Expression get condition => _condition; |
- Token get endToken => _body.endToken; |
- |
- /** |
- * Set the body of the loop to the given statement. |
- * |
- * @param statement the body of the loop |
- */ |
- void set body(Statement statement) { |
- _body = becomeParentOf(statement); |
- } |
- |
- /** |
- * Set the expression used to determine whether to execute the body of the loop to the given |
- * expression. |
- * |
- * @param expression the expression used to determine whether to execute the body of the loop |
- */ |
- void set condition(Expression expression) { |
- _condition = becomeParentOf(expression); |
- } |
- void visitChildren(ASTVisitor visitor) { |
- safelyVisitChild(_condition, visitor); |
- safelyVisitChild(_body, visitor); |
- } |
-} |
-/** |
- * Instances of the class `WithClause` represent the with clause in a class declaration. |
- * |
- * <pre> |
- * withClause ::= |
- * 'with' [TypeName] (',' [TypeName])* |
- * </pre> |
- * |
- * @coverage dart.engine.ast |
- */ |
-class WithClause extends ASTNode { |
- |
- /** |
- * The token representing the 'with' keyword. |
- */ |
- Token withKeyword; |
- |
- /** |
- * The names of the mixins that were specified. |
- */ |
- NodeList<TypeName> mixinTypes; |
- |
- /** |
- * Initialize a newly created with clause. |
- * |
- * @param withKeyword the token representing the 'with' keyword |
- * @param mixinTypes the names of the mixins that were specified |
- */ |
- WithClause.full(Token withKeyword, List<TypeName> mixinTypes) { |
- this.mixinTypes = new NodeList<TypeName>(this); |
- this.withKeyword = withKeyword; |
- this.mixinTypes.addAll(mixinTypes); |
- } |
- |
- /** |
- * Initialize a newly created with clause. |
- * |
- * @param withKeyword the token representing the 'with' keyword |
- * @param mixinTypes the names of the mixins that were specified |
- */ |
- WithClause({Token withKeyword, List<TypeName> mixinTypes}) : this.full(withKeyword, mixinTypes); |
- accept(ASTVisitor visitor) => visitor.visitWithClause(this); |
- Token get beginToken => withKeyword; |
- Token get endToken => mixinTypes.endToken; |
- |
- /** |
- * Set the token representing the 'with' keyword to the given token. |
- * |
- * @param withKeyword the token representing the 'with' keyword |
- */ |
- void set mixinKeyword(Token withKeyword) { |
- this.withKeyword = withKeyword; |
- } |
- void visitChildren(ASTVisitor visitor) { |
- mixinTypes.accept(visitor); |
- } |
-} |
-/** |
- * Instances of the class `BreadthFirstVisitor` implement an AST visitor that will recursively |
- * visit all of the nodes in an AST structure, similar to [GeneralizingASTVisitor]. This |
- * visitor uses a breadth-first ordering rather than the depth-first ordering of |
- * [GeneralizingASTVisitor]. |
- * |
- * Subclasses that override a visit method must either invoke the overridden visit method or |
- * explicitly invoke the more general visit method. Failure to do so will cause the visit methods |
- * for superclasses of the node to not be invoked and will cause the children of the visited node to |
- * not be visited. |
- * |
- * In addition, subclasses should <b>not</b> explicitly visit the children of a node, but should |
- * ensure that the method [visitNode] is used to visit the children (either directly |
- * or indirectly). Failure to do will break the order in which nodes are visited. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class BreadthFirstVisitor<R> extends GeneralizingASTVisitor<R> { |
- |
- /** |
- * A queue holding the nodes that have not yet been visited in the order in which they ought to be |
- * visited. |
- */ |
- Queue<ASTNode> _queue = new Queue<ASTNode>(); |
- |
- /** |
- * A visitor, used to visit the children of the current node, that will add the nodes it visits to |
- * the [queue]. |
- */ |
- GeneralizingASTVisitor<Object> _childVisitor; |
- |
- /** |
- * Visit all nodes in the tree starting at the given `root` node, in breadth-first order. |
- * |
- * @param root the root of the AST structure to be visited |
- */ |
- void visitAllNodes(ASTNode root) { |
- _queue.add(root); |
- while (!_queue.isEmpty) { |
- ASTNode next = _queue.removeFirst(); |
- next.accept(this); |
- } |
- } |
- R visitNode(ASTNode node) { |
- node.visitChildren(_childVisitor); |
- return null; |
- } |
- BreadthFirstVisitor() { |
- this._childVisitor = new GeneralizingASTVisitor_2(this); |
- } |
-} |
-class GeneralizingASTVisitor_2 extends GeneralizingASTVisitor<Object> { |
- final BreadthFirstVisitor BreadthFirstVisitor_this; |
- GeneralizingASTVisitor_2(this.BreadthFirstVisitor_this) : super(); |
- Object visitNode(ASTNode node) { |
- BreadthFirstVisitor_this._queue.add(node); |
- return null; |
- } |
-} |
-/** |
- * Instances of the class `ConstantEvaluator` evaluate constant expressions to produce their |
- * compile-time value. According to the Dart Language Specification: <blockquote> A constant |
- * expression is one of the following: |
- * |
- * * A literal number. |
- * * A literal boolean. |
- * * A literal string where any interpolated expression is a compile-time constant that evaluates |
- * to a numeric, string or boolean value or to `null`. |
- * * `null`. |
- * * A reference to a static constant variable. |
- * * An identifier expression that denotes a constant variable, a class or a type parameter. |
- * * A constant constructor invocation. |
- * * A constant list literal. |
- * * A constant map literal. |
- * * A simple or qualified identifier denoting a top-level function or a static method. |
- * * A parenthesized expression `(e)` where `e` is a constant expression. |
- * * An expression of one of the forms `identical(e1, e2)`, `e1 == e2`, |
- * `e1 != e2` where `e1` and `e2` are constant expressions that evaluate to a |
- * numeric, string or boolean value or to `null`. |
- * * An expression of one of the forms `!e`, `e1 && e2` or `e1 || e2`, where |
- * `e`, `e1` and `e2` are constant expressions that evaluate to a boolean value or |
- * to `null`. |
- * * An expression of one of the forms `~e`, `e1 ^ e2`, `e1 & e2`, |
- * `e1 | e2`, `e1 >> e2` or `e1 << e2`, where `e`, `e1` and `e2` |
- * are constant expressions that evaluate to an integer value or to `null`. |
- * * An expression of one of the forms `-e`, `e1 + e2`, `e1 - e2`, |
- * `e1 * e2`, `e1 / e2`, `e1 ~/ e2`, `e1 > e2`, `e1 < e2`, |
- * `e1 >= e2`, `e1 <= e2` or `e1 % e2`, where `e`, `e1` and `e2` |
- * are constant expressions that evaluate to a numeric value or to `null`. |
- * |
- * </blockquote> The values returned by instances of this class are therefore `null` and |
- * instances of the classes `Boolean`, `BigInteger`, `Double`, `String`, and |
- * `DartObject`. |
- * |
- * In addition, this class defines several values that can be returned to indicate various |
- * conditions encountered during evaluation. These are documented with the static field that define |
- * those values. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ConstantEvaluator extends GeneralizingASTVisitor<Object> { |
- |
- /** |
- * The value returned for expressions (or non-expression nodes) that are not compile-time constant |
- * expressions. |
- */ |
- static Object NOT_A_CONSTANT = new Object(); |
- Object visitAdjacentStrings(AdjacentStrings node) { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- for (StringLiteral string in node.strings) { |
- Object value = string.accept(this); |
- if (identical(value, NOT_A_CONSTANT)) { |
- return value; |
- } |
- builder.append(value); |
- } |
- return builder.toString(); |
- } |
- Object visitBinaryExpression(BinaryExpression node) { |
- Object leftOperand = node.leftOperand.accept(this); |
- if (identical(leftOperand, NOT_A_CONSTANT)) { |
- return leftOperand; |
- } |
- Object rightOperand = node.rightOperand.accept(this); |
- if (identical(rightOperand, NOT_A_CONSTANT)) { |
- return rightOperand; |
- } |
- while (true) { |
- if (node.operator.type == TokenType.AMPERSAND) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) & (rightOperand as int); |
- } |
- } else if (node.operator.type == TokenType.AMPERSAND_AMPERSAND) { |
- if (leftOperand is bool && rightOperand is bool) { |
- return ((leftOperand as bool)) && ((rightOperand as bool)); |
- } |
- } else if (node.operator.type == TokenType.BANG_EQ) { |
- if (leftOperand is bool && rightOperand is bool) { |
- return ((leftOperand as bool)) != ((rightOperand as bool)); |
- } else if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) != rightOperand; |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)) != rightOperand; |
- } else if (leftOperand is String && rightOperand is String) { |
- return ((leftOperand as String)) != rightOperand; |
- } |
- } else if (node.operator.type == TokenType.BAR) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) | (rightOperand as int); |
- } |
- } else if (node.operator.type == TokenType.BAR_BAR) { |
- if (leftOperand is bool && rightOperand is bool) { |
- return ((leftOperand as bool)) || ((rightOperand as bool)); |
- } |
- } else if (node.operator.type == TokenType.CARET) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) ^ (rightOperand as int); |
- } |
- } else if (node.operator.type == TokenType.EQ_EQ) { |
- if (leftOperand is bool && rightOperand is bool) { |
- return identical(leftOperand as bool, rightOperand as bool); |
- } else if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) == rightOperand; |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)) == rightOperand; |
- } else if (leftOperand is String && rightOperand is String) { |
- return ((leftOperand as String)) == rightOperand; |
- } |
- } else if (node.operator.type == TokenType.GT) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)).compareTo(rightOperand as int) > 0; |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)).compareTo(rightOperand as double) > 0; |
- } |
- } else if (node.operator.type == TokenType.GT_EQ) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)).compareTo(rightOperand as int) >= 0; |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)).compareTo(rightOperand as double) >= 0; |
- } |
- } else if (node.operator.type == TokenType.GT_GT) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) >> ((rightOperand as int)); |
- } |
- } else if (node.operator.type == TokenType.LT) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)).compareTo(rightOperand as int) < 0; |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)).compareTo(rightOperand as double) < 0; |
- } |
- } else if (node.operator.type == TokenType.LT_EQ) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)).compareTo(rightOperand as int) <= 0; |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)).compareTo(rightOperand as double) <= 0; |
- } |
- } else if (node.operator.type == TokenType.LT_LT) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) << ((rightOperand as int)); |
- } |
- } else if (node.operator.type == TokenType.MINUS) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) - (rightOperand as int); |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)) - ((rightOperand as double)); |
- } |
- } else if (node.operator.type == TokenType.PERCENT) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)).remainder(rightOperand as int); |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)) % ((rightOperand as double)); |
- } |
- } else if (node.operator.type == TokenType.PLUS) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) + (rightOperand as int); |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)) + ((rightOperand as double)); |
- } |
- } else if (node.operator.type == TokenType.STAR) { |
- if (leftOperand is int && rightOperand is int) { |
- return ((leftOperand as int)) * (rightOperand as int); |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)) * ((rightOperand as double)); |
- } |
- } else if (node.operator.type == TokenType.SLASH) { |
- if (leftOperand is int && rightOperand is int) { |
- if (rightOperand != 0) { |
- return ((leftOperand as int)) ~/ (rightOperand as int); |
- } else { |
- return ((leftOperand as int)).toDouble() / ((rightOperand as int)).toDouble(); |
- } |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)) / ((rightOperand as double)); |
- } |
- } else if (node.operator.type == TokenType.TILDE_SLASH) { |
- if (leftOperand is int && rightOperand is int) { |
- if (rightOperand != 0) { |
- return ((leftOperand as int)) ~/ (rightOperand as int); |
- } else { |
- return 0; |
- } |
- } else if (leftOperand is double && rightOperand is double) { |
- return ((leftOperand as double)) ~/ ((rightOperand as double)); |
- } |
- } |
- break; |
- } |
- return visitExpression(node); |
- } |
- Object visitBooleanLiteral(BooleanLiteral node) => node.value ? true : false; |
- Object visitDoubleLiteral(DoubleLiteral node) => node.value; |
- Object visitIntegerLiteral(IntegerLiteral node) => node.value; |
- Object visitInterpolationExpression(InterpolationExpression node) { |
- Object value = node.expression.accept(this); |
- if (value == null || value is bool || value is String || value is int || value is double) { |
- return value; |
- } |
- return NOT_A_CONSTANT; |
- } |
- Object visitInterpolationString(InterpolationString node) => node.value; |
- Object visitListLiteral(ListLiteral node) { |
- List<Object> list = new List<Object>(); |
- for (Expression element in node.elements) { |
- Object value = element.accept(this); |
- if (identical(value, NOT_A_CONSTANT)) { |
- return value; |
- } |
- list.add(value); |
- } |
- return list; |
- } |
- Object visitMapLiteral(MapLiteral node) { |
- Map<String, Object> map = new Map<String, Object>(); |
- for (MapLiteralEntry entry in node.entries) { |
- Object key = entry.key.accept(this); |
- Object value = entry.value.accept(this); |
- if (key is! String || identical(value, NOT_A_CONSTANT)) { |
- return NOT_A_CONSTANT; |
- } |
- map[(key as String)] = value; |
- } |
- return map; |
- } |
- Object visitMethodInvocation(MethodInvocation node) => visitNode(node); |
- Object visitNode(ASTNode node) => NOT_A_CONSTANT; |
- Object visitNullLiteral(NullLiteral node) => null; |
- Object visitParenthesizedExpression(ParenthesizedExpression node) => node.expression.accept(this); |
- Object visitPrefixedIdentifier(PrefixedIdentifier node) => getConstantValue(null); |
- Object visitPrefixExpression(PrefixExpression node) { |
- Object operand = node.operand.accept(this); |
- if (identical(operand, NOT_A_CONSTANT)) { |
- return operand; |
- } |
- while (true) { |
- if (node.operator.type == TokenType.BANG) { |
- if (identical(operand, true)) { |
- return false; |
- } else if (identical(operand, false)) { |
- return true; |
- } |
- } else if (node.operator.type == TokenType.TILDE) { |
- if (operand is int) { |
- return ~((operand as int)); |
- } |
- } else if (node.operator.type == TokenType.MINUS) { |
- if (operand == null) { |
- return null; |
- } else if (operand is int) { |
- return -((operand as int)); |
- } else if (operand is double) { |
- return -((operand as double)); |
- } |
- } |
- break; |
- } |
- return NOT_A_CONSTANT; |
- } |
- Object visitPropertyAccess(PropertyAccess node) => getConstantValue(null); |
- Object visitSimpleIdentifier(SimpleIdentifier node) => getConstantValue(null); |
- Object visitSimpleStringLiteral(SimpleStringLiteral node) => node.value; |
- Object visitStringInterpolation(StringInterpolation node) { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- for (InterpolationElement element in node.elements) { |
- Object value = element.accept(this); |
- if (identical(value, NOT_A_CONSTANT)) { |
- return value; |
- } |
- builder.append(value); |
- } |
- return builder.toString(); |
- } |
- Object visitSymbolLiteral(SymbolLiteral node) { |
- JavaStringBuilder builder = new JavaStringBuilder(); |
- for (Token component in node.components) { |
- if (builder.length > 0) { |
- builder.appendChar(0x2E); |
- } |
- builder.append(component.lexeme); |
- } |
- return builder.toString(); |
- } |
- |
- /** |
- * Return the constant value of the static constant represented by the given element. |
- * |
- * @param element the element whose value is to be returned |
- * @return the constant value of the static constant |
- */ |
- Object getConstantValue(Element element) { |
- if (element is FieldElement) { |
- FieldElement field = element as FieldElement; |
- if (field.isStatic && field.isConst) { |
- } |
- } |
- return NOT_A_CONSTANT; |
- } |
-} |
-/** |
- * Instances of the class `ElementLocator` locate the [Element] |
- * associated with a given [ASTNode]. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ElementLocator { |
- |
- /** |
- * Locate the [Element] associated with the given [ASTNode]. |
- * |
- * @param node the node (not `null`) |
- * @return the associated element, or `null` if none is found |
- */ |
- static Element locate(ASTNode node) { |
- ElementLocator_ElementMapper mapper = new ElementLocator_ElementMapper(); |
- return node.accept(mapper); |
- } |
-} |
-/** |
- * Visitor that maps nodes to elements. |
- */ |
-class ElementLocator_ElementMapper extends GeneralizingASTVisitor<Element> { |
- Element visitAssignmentExpression(AssignmentExpression node) => node.bestElement; |
- Element visitBinaryExpression(BinaryExpression node) => node.bestElement; |
- Element visitClassDeclaration(ClassDeclaration node) => node.element; |
- Element visitCompilationUnit(CompilationUnit node) => node.element; |
- Element visitConstructorDeclaration(ConstructorDeclaration node) => node.element; |
- Element visitFunctionDeclaration(FunctionDeclaration node) => node.element; |
- Element visitIdentifier(Identifier node) { |
- ASTNode parent = node.parent; |
- if (parent is ConstructorDeclaration) { |
- ConstructorDeclaration decl = parent as ConstructorDeclaration; |
- Identifier returnType = decl.returnType; |
- if (identical(returnType, node)) { |
- SimpleIdentifier name = decl.name; |
- if (name != null) { |
- return name.bestElement; |
- } |
- Element element = node.bestElement; |
- if (element is ClassElement) { |
- return ((element as ClassElement)).unnamedConstructor; |
- } |
- } |
- } |
- if (parent is LibraryIdentifier) { |
- ASTNode grandParent = ((parent as LibraryIdentifier)).parent; |
- if (grandParent is PartOfDirective) { |
- Element element = ((grandParent as PartOfDirective)).element; |
- if (element is LibraryElement) { |
- return ((element as LibraryElement)).definingCompilationUnit; |
- } |
- } |
- } |
- Element element = node.bestElement; |
- if (element == null) { |
- element = node.staticElement; |
- } |
- return element; |
- } |
- Element visitImportDirective(ImportDirective node) => node.element; |
- Element visitIndexExpression(IndexExpression node) => node.bestElement; |
- Element visitInstanceCreationExpression(InstanceCreationExpression node) => node.staticElement; |
- Element visitLibraryDirective(LibraryDirective node) => node.element; |
- Element visitMethodDeclaration(MethodDeclaration node) => node.element; |
- Element visitMethodInvocation(MethodInvocation node) => node.methodName.bestElement; |
- Element visitPostfixExpression(PostfixExpression node) => node.bestElement; |
- Element visitPrefixedIdentifier(PrefixedIdentifier node) => node.bestElement; |
- Element visitPrefixExpression(PrefixExpression node) => node.bestElement; |
- Element visitStringLiteral(StringLiteral node) { |
- ASTNode parent = node.parent; |
- if (parent is UriBasedDirective) { |
- return ((parent as UriBasedDirective)).uriElement; |
- } |
- return null; |
- } |
- Element visitVariableDeclaration(VariableDeclaration node) => node.element; |
-} |
-/** |
- * Instances of the class `GeneralizingASTVisitor` implement an AST visitor that will |
- * recursively visit all of the nodes in an AST structure (like instances of the class |
- * [RecursiveASTVisitor]). In addition, when a node of a specific type is visited not only |
- * will the visit method for that specific type of node be invoked, but additional methods for the |
- * superclasses of that node will also be invoked. For example, using an instance of this class to |
- * visit a [Block] will cause the method [visitBlock] to be invoked but will |
- * also cause the methods [visitStatement] and [visitNode] to be |
- * subsequently invoked. This allows visitors to be written that visit all statements without |
- * needing to override the visit method for each of the specific subclasses of [Statement]. |
- * |
- * Subclasses that override a visit method must either invoke the overridden visit method or |
- * explicitly invoke the more general visit method. Failure to do so will cause the visit methods |
- * for superclasses of the node to not be invoked and will cause the children of the visited node to |
- * not be visited. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class GeneralizingASTVisitor<R> implements ASTVisitor<R> { |
- R visitAdjacentStrings(AdjacentStrings node) => visitStringLiteral(node); |
- R visitAnnotatedNode(AnnotatedNode node) => visitNode(node); |
- R visitAnnotation(Annotation node) => visitNode(node); |
- R visitArgumentDefinitionTest(ArgumentDefinitionTest node) => visitExpression(node); |
- R visitArgumentList(ArgumentList node) => visitNode(node); |
- R visitAsExpression(AsExpression node) => visitExpression(node); |
- R visitAssertStatement(AssertStatement node) => visitStatement(node); |
- R visitAssignmentExpression(AssignmentExpression node) => visitExpression(node); |
- R visitBinaryExpression(BinaryExpression node) => visitExpression(node); |
- R visitBlock(Block node) => visitStatement(node); |
- R visitBlockFunctionBody(BlockFunctionBody node) => visitFunctionBody(node); |
- R visitBooleanLiteral(BooleanLiteral node) => visitLiteral(node); |
- R visitBreakStatement(BreakStatement node) => visitStatement(node); |
- R visitCascadeExpression(CascadeExpression node) => visitExpression(node); |
- R visitCatchClause(CatchClause node) => visitNode(node); |
- R visitClassDeclaration(ClassDeclaration node) => visitCompilationUnitMember(node); |
- R visitClassMember(ClassMember node) => visitDeclaration(node); |
- R visitClassTypeAlias(ClassTypeAlias node) => visitTypeAlias(node); |
- R visitCombinator(Combinator node) => visitNode(node); |
- R visitComment(Comment node) => visitNode(node); |
- R visitCommentReference(CommentReference node) => visitNode(node); |
- R visitCompilationUnit(CompilationUnit node) => visitNode(node); |
- R visitCompilationUnitMember(CompilationUnitMember node) => visitDeclaration(node); |
- R visitConditionalExpression(ConditionalExpression node) => visitExpression(node); |
- R visitConstructorDeclaration(ConstructorDeclaration node) => visitClassMember(node); |
- R visitConstructorFieldInitializer(ConstructorFieldInitializer node) => visitConstructorInitializer(node); |
- R visitConstructorInitializer(ConstructorInitializer node) => visitNode(node); |
- R visitConstructorName(ConstructorName node) => visitNode(node); |
- R visitContinueStatement(ContinueStatement node) => visitStatement(node); |
- R visitDeclaration(Declaration node) => visitAnnotatedNode(node); |
- R visitDeclaredIdentifier(DeclaredIdentifier node) => visitDeclaration(node); |
- R visitDefaultFormalParameter(DefaultFormalParameter node) => visitFormalParameter(node); |
- R visitDirective(Directive node) => visitAnnotatedNode(node); |
- R visitDoStatement(DoStatement node) => visitStatement(node); |
- R visitDoubleLiteral(DoubleLiteral node) => visitLiteral(node); |
- R visitEmptyFunctionBody(EmptyFunctionBody node) => visitFunctionBody(node); |
- R visitEmptyStatement(EmptyStatement node) => visitStatement(node); |
- R visitExportDirective(ExportDirective node) => visitNamespaceDirective(node); |
- R visitExpression(Expression node) => visitNode(node); |
- R visitExpressionFunctionBody(ExpressionFunctionBody node) => visitFunctionBody(node); |
- R visitExpressionStatement(ExpressionStatement node) => visitStatement(node); |
- R visitExtendsClause(ExtendsClause node) => visitNode(node); |
- R visitFieldDeclaration(FieldDeclaration node) => visitClassMember(node); |
- R visitFieldFormalParameter(FieldFormalParameter node) => visitNormalFormalParameter(node); |
- R visitForEachStatement(ForEachStatement node) => visitStatement(node); |
- R visitFormalParameter(FormalParameter node) => visitNode(node); |
- R visitFormalParameterList(FormalParameterList node) => visitNode(node); |
- R visitForStatement(ForStatement node) => visitStatement(node); |
- R visitFunctionBody(FunctionBody node) => visitNode(node); |
- R visitFunctionDeclaration(FunctionDeclaration node) => visitCompilationUnitMember(node); |
- R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => visitStatement(node); |
- R visitFunctionExpression(FunctionExpression node) => visitExpression(node); |
- R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => visitExpression(node); |
- R visitFunctionTypeAlias(FunctionTypeAlias node) => visitTypeAlias(node); |
- R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => visitNormalFormalParameter(node); |
- R visitHideCombinator(HideCombinator node) => visitCombinator(node); |
- R visitIdentifier(Identifier node) => visitExpression(node); |
- R visitIfStatement(IfStatement node) => visitStatement(node); |
- R visitImplementsClause(ImplementsClause node) => visitNode(node); |
- R visitImportDirective(ImportDirective node) => visitNamespaceDirective(node); |
- R visitIndexExpression(IndexExpression node) => visitExpression(node); |
- R visitInstanceCreationExpression(InstanceCreationExpression node) => visitExpression(node); |
- R visitIntegerLiteral(IntegerLiteral node) => visitLiteral(node); |
- R visitInterpolationElement(InterpolationElement node) => visitNode(node); |
- R visitInterpolationExpression(InterpolationExpression node) => visitInterpolationElement(node); |
- R visitInterpolationString(InterpolationString node) => visitInterpolationElement(node); |
- R visitIsExpression(IsExpression node) => visitExpression(node); |
- R visitLabel(Label node) => visitNode(node); |
- R visitLabeledStatement(LabeledStatement node) => visitStatement(node); |
- R visitLibraryDirective(LibraryDirective node) => visitDirective(node); |
- R visitLibraryIdentifier(LibraryIdentifier node) => visitIdentifier(node); |
- R visitListLiteral(ListLiteral node) => visitTypedLiteral(node); |
- R visitLiteral(Literal node) => visitExpression(node); |
- R visitMapLiteral(MapLiteral node) => visitTypedLiteral(node); |
- R visitMapLiteralEntry(MapLiteralEntry node) => visitNode(node); |
- R visitMethodDeclaration(MethodDeclaration node) => visitClassMember(node); |
- R visitMethodInvocation(MethodInvocation node) => visitExpression(node); |
- R visitNamedExpression(NamedExpression node) => visitExpression(node); |
- R visitNamespaceDirective(NamespaceDirective node) => visitUriBasedDirective(node); |
- R visitNativeClause(NativeClause node) => visitNode(node); |
- R visitNativeFunctionBody(NativeFunctionBody node) => visitFunctionBody(node); |
- R visitNode(ASTNode node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitNormalFormalParameter(NormalFormalParameter node) => visitFormalParameter(node); |
- R visitNullLiteral(NullLiteral node) => visitLiteral(node); |
- R visitParenthesizedExpression(ParenthesizedExpression node) => visitExpression(node); |
- R visitPartDirective(PartDirective node) => visitUriBasedDirective(node); |
- R visitPartOfDirective(PartOfDirective node) => visitDirective(node); |
- R visitPostfixExpression(PostfixExpression node) => visitExpression(node); |
- R visitPrefixedIdentifier(PrefixedIdentifier node) => visitIdentifier(node); |
- R visitPrefixExpression(PrefixExpression node) => visitExpression(node); |
- R visitPropertyAccess(PropertyAccess node) => visitExpression(node); |
- R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => visitConstructorInitializer(node); |
- R visitRethrowExpression(RethrowExpression node) => visitExpression(node); |
- R visitReturnStatement(ReturnStatement node) => visitStatement(node); |
- R visitScriptTag(ScriptTag scriptTag) => visitNode(scriptTag); |
- R visitShowCombinator(ShowCombinator node) => visitCombinator(node); |
- R visitSimpleFormalParameter(SimpleFormalParameter node) => visitNormalFormalParameter(node); |
- R visitSimpleIdentifier(SimpleIdentifier node) => visitIdentifier(node); |
- R visitSimpleStringLiteral(SimpleStringLiteral node) => visitStringLiteral(node); |
- R visitStatement(Statement node) => visitNode(node); |
- R visitStringInterpolation(StringInterpolation node) => visitStringLiteral(node); |
- R visitStringLiteral(StringLiteral node) => visitLiteral(node); |
- R visitSuperConstructorInvocation(SuperConstructorInvocation node) => visitConstructorInitializer(node); |
- R visitSuperExpression(SuperExpression node) => visitExpression(node); |
- R visitSwitchCase(SwitchCase node) => visitSwitchMember(node); |
- R visitSwitchDefault(SwitchDefault node) => visitSwitchMember(node); |
- R visitSwitchMember(SwitchMember node) => visitNode(node); |
- R visitSwitchStatement(SwitchStatement node) => visitStatement(node); |
- R visitSymbolLiteral(SymbolLiteral node) => visitLiteral(node); |
- R visitThisExpression(ThisExpression node) => visitExpression(node); |
- R visitThrowExpression(ThrowExpression node) => visitExpression(node); |
- R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => visitCompilationUnitMember(node); |
- R visitTryStatement(TryStatement node) => visitStatement(node); |
- R visitTypeAlias(TypeAlias node) => visitCompilationUnitMember(node); |
- R visitTypeArgumentList(TypeArgumentList node) => visitNode(node); |
- R visitTypedLiteral(TypedLiteral node) => visitLiteral(node); |
- R visitTypeName(TypeName node) => visitNode(node); |
- R visitTypeParameter(TypeParameter node) => visitNode(node); |
- R visitTypeParameterList(TypeParameterList node) => visitNode(node); |
- R visitUriBasedDirective(UriBasedDirective node) => visitDirective(node); |
- R visitVariableDeclaration(VariableDeclaration node) => visitDeclaration(node); |
- R visitVariableDeclarationList(VariableDeclarationList node) => visitNode(node); |
- R visitVariableDeclarationStatement(VariableDeclarationStatement node) => visitStatement(node); |
- R visitWhileStatement(WhileStatement node) => visitStatement(node); |
- R visitWithClause(WithClause node) => visitNode(node); |
-} |
-/** |
- * Instances of the class `NodeLocator` locate the [ASTNode] associated with a |
- * source range, given the AST structure built from the source. More specifically, they will return |
- * the [ASTNode] with the shortest length whose source range completely encompasses |
- * the specified range. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class NodeLocator extends UnifyingASTVisitor<Object> { |
- |
- /** |
- * The start offset of the range used to identify the node. |
- */ |
- int _startOffset = 0; |
- |
- /** |
- * The end offset of the range used to identify the node. |
- */ |
- int _endOffset = 0; |
- |
- /** |
- * The element that was found that corresponds to the given source range, or `null` if there |
- * is no such element. |
- */ |
- ASTNode foundNode; |
- |
- /** |
- * Initialize a newly created locator to locate one or more [ASTNode] by locating |
- * the node within an AST structure that corresponds to the given offset in the source. |
- * |
- * @param offset the offset used to identify the node |
- */ |
- NodeLocator.con1(int offset) : this.con2(offset, offset); |
- |
- /** |
- * Initialize a newly created locator to locate one or more [ASTNode] by locating |
- * the node within an AST structure that corresponds to the given range of characters in the |
- * source. |
- * |
- * @param start the start offset of the range used to identify the node |
- * @param end the end offset of the range used to identify the node |
- */ |
- NodeLocator.con2(int start, int end) { |
- this._startOffset = start; |
- this._endOffset = end; |
- } |
- |
- /** |
- * Search within the given AST node for an identifier representing a [DartElement] in the specified source range. Return the element that was found, or `null` if |
- * no element was found. |
- * |
- * @param node the AST node within which to search |
- * @return the element that was found |
- */ |
- ASTNode searchWithin(ASTNode node) { |
- if (node == null) { |
- return null; |
- } |
- try { |
- node.accept(this); |
- } on NodeLocator_NodeFoundException catch (exception) { |
- } on JavaException catch (exception) { |
- AnalysisEngine.instance.logger.logInformation2("Unable to locate element at offset (${_startOffset} - ${_endOffset})", exception); |
- return null; |
- } |
- return foundNode; |
- } |
- Object visitNode(ASTNode node) { |
- int start = node.offset; |
- int end = start + node.length; |
- if (end < _startOffset) { |
- return null; |
- } |
- if (start > _endOffset) { |
- return null; |
- } |
- try { |
- node.visitChildren(this); |
- } on NodeLocator_NodeFoundException catch (exception) { |
- throw exception; |
- } on JavaException catch (exception) { |
- AnalysisEngine.instance.logger.logInformation2("Exception caught while traversing an AST structure.", exception); |
- } |
- if (start <= _startOffset && _endOffset <= end) { |
- foundNode = node; |
- throw new NodeLocator_NodeFoundException(); |
- } |
- return null; |
- } |
-} |
-/** |
- * Instances of the class `NodeFoundException` are used to cancel visiting after a node has |
- * been found. |
- */ |
-class NodeLocator_NodeFoundException extends RuntimeException { |
- static int _serialVersionUID = 1; |
-} |
-/** |
- * Instances of the class `RecursiveASTVisitor` implement an AST visitor that will recursively |
- * visit all of the nodes in an AST structure. For example, using an instance of this class to visit |
- * a [Block] will also cause all of the statements in the block to be visited. |
- * |
- * Subclasses that override a visit method must either invoke the overridden visit method or must |
- * explicitly ask the visited node to visit its children. Failure to do so will cause the children |
- * of the visited node to not be visited. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class RecursiveASTVisitor<R> implements ASTVisitor<R> { |
- R visitAdjacentStrings(AdjacentStrings node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitAnnotation(Annotation node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitArgumentDefinitionTest(ArgumentDefinitionTest node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitArgumentList(ArgumentList node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitAsExpression(AsExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitAssertStatement(AssertStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitAssignmentExpression(AssignmentExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitBinaryExpression(BinaryExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitBlock(Block node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitBlockFunctionBody(BlockFunctionBody node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitBooleanLiteral(BooleanLiteral node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitBreakStatement(BreakStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitCascadeExpression(CascadeExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitCatchClause(CatchClause node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitClassDeclaration(ClassDeclaration node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitClassTypeAlias(ClassTypeAlias node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitComment(Comment node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitCommentReference(CommentReference node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitCompilationUnit(CompilationUnit node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitConditionalExpression(ConditionalExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitConstructorDeclaration(ConstructorDeclaration node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitConstructorFieldInitializer(ConstructorFieldInitializer node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitConstructorName(ConstructorName node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitContinueStatement(ContinueStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitDeclaredIdentifier(DeclaredIdentifier node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitDefaultFormalParameter(DefaultFormalParameter node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitDoStatement(DoStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitDoubleLiteral(DoubleLiteral node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitEmptyFunctionBody(EmptyFunctionBody node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitEmptyStatement(EmptyStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitExportDirective(ExportDirective node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitExpressionFunctionBody(ExpressionFunctionBody node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitExpressionStatement(ExpressionStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitExtendsClause(ExtendsClause node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitFieldDeclaration(FieldDeclaration node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitFieldFormalParameter(FieldFormalParameter node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitForEachStatement(ForEachStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitFormalParameterList(FormalParameterList node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitForStatement(ForStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitFunctionDeclaration(FunctionDeclaration node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitFunctionExpression(FunctionExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitFunctionTypeAlias(FunctionTypeAlias node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitHideCombinator(HideCombinator node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitIfStatement(IfStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitImplementsClause(ImplementsClause node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitImportDirective(ImportDirective node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitIndexExpression(IndexExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitInstanceCreationExpression(InstanceCreationExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitIntegerLiteral(IntegerLiteral node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitInterpolationExpression(InterpolationExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitInterpolationString(InterpolationString node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitIsExpression(IsExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitLabel(Label node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitLabeledStatement(LabeledStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitLibraryDirective(LibraryDirective node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitLibraryIdentifier(LibraryIdentifier node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitListLiteral(ListLiteral node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitMapLiteral(MapLiteral node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitMapLiteralEntry(MapLiteralEntry node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitMethodDeclaration(MethodDeclaration node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitMethodInvocation(MethodInvocation node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitNamedExpression(NamedExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitNativeClause(NativeClause node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitNativeFunctionBody(NativeFunctionBody node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitNullLiteral(NullLiteral node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitParenthesizedExpression(ParenthesizedExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitPartDirective(PartDirective node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitPartOfDirective(PartOfDirective node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitPostfixExpression(PostfixExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitPrefixedIdentifier(PrefixedIdentifier node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitPrefixExpression(PrefixExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitPropertyAccess(PropertyAccess node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitRethrowExpression(RethrowExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitReturnStatement(ReturnStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitScriptTag(ScriptTag node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitShowCombinator(ShowCombinator node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitSimpleFormalParameter(SimpleFormalParameter node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitSimpleIdentifier(SimpleIdentifier node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitSimpleStringLiteral(SimpleStringLiteral node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitStringInterpolation(StringInterpolation node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitSuperConstructorInvocation(SuperConstructorInvocation node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitSuperExpression(SuperExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitSwitchCase(SwitchCase node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitSwitchDefault(SwitchDefault node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitSwitchStatement(SwitchStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitSymbolLiteral(SymbolLiteral node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitThisExpression(ThisExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitThrowExpression(ThrowExpression node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitTryStatement(TryStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitTypeArgumentList(TypeArgumentList node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitTypeName(TypeName node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitTypeParameter(TypeParameter node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitTypeParameterList(TypeParameterList node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitVariableDeclaration(VariableDeclaration node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitVariableDeclarationList(VariableDeclarationList node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitVariableDeclarationStatement(VariableDeclarationStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitWhileStatement(WhileStatement node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitWithClause(WithClause node) { |
- node.visitChildren(this); |
- return null; |
- } |
-} |
-/** |
- * Instances of the class `SimpleASTVisitor` implement an AST visitor that will do nothing |
- * when visiting an AST node. It is intended to be a superclass for classes that use the visitor |
- * pattern primarily as a dispatch mechanism (and hence don't need to recursively visit a whole |
- * structure) and that only need to visit a small number of node types. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class SimpleASTVisitor<R> implements ASTVisitor<R> { |
- R visitAdjacentStrings(AdjacentStrings node) => null; |
- R visitAnnotation(Annotation node) => null; |
- R visitArgumentDefinitionTest(ArgumentDefinitionTest node) => null; |
- R visitArgumentList(ArgumentList node) => null; |
- R visitAsExpression(AsExpression node) => null; |
- R visitAssertStatement(AssertStatement node) => null; |
- R visitAssignmentExpression(AssignmentExpression node) => null; |
- R visitBinaryExpression(BinaryExpression node) => null; |
- R visitBlock(Block node) => null; |
- R visitBlockFunctionBody(BlockFunctionBody node) => null; |
- R visitBooleanLiteral(BooleanLiteral node) => null; |
- R visitBreakStatement(BreakStatement node) => null; |
- R visitCascadeExpression(CascadeExpression node) => null; |
- R visitCatchClause(CatchClause node) => null; |
- R visitClassDeclaration(ClassDeclaration node) => null; |
- R visitClassTypeAlias(ClassTypeAlias node) => null; |
- R visitComment(Comment node) => null; |
- R visitCommentReference(CommentReference node) => null; |
- R visitCompilationUnit(CompilationUnit node) => null; |
- R visitConditionalExpression(ConditionalExpression node) => null; |
- R visitConstructorDeclaration(ConstructorDeclaration node) => null; |
- R visitConstructorFieldInitializer(ConstructorFieldInitializer node) => null; |
- R visitConstructorName(ConstructorName node) => null; |
- R visitContinueStatement(ContinueStatement node) => null; |
- R visitDeclaredIdentifier(DeclaredIdentifier node) => null; |
- R visitDefaultFormalParameter(DefaultFormalParameter node) => null; |
- R visitDoStatement(DoStatement node) => null; |
- R visitDoubleLiteral(DoubleLiteral node) => null; |
- R visitEmptyFunctionBody(EmptyFunctionBody node) => null; |
- R visitEmptyStatement(EmptyStatement node) => null; |
- R visitExportDirective(ExportDirective node) => null; |
- R visitExpressionFunctionBody(ExpressionFunctionBody node) => null; |
- R visitExpressionStatement(ExpressionStatement node) => null; |
- R visitExtendsClause(ExtendsClause node) => null; |
- R visitFieldDeclaration(FieldDeclaration node) => null; |
- R visitFieldFormalParameter(FieldFormalParameter node) => null; |
- R visitForEachStatement(ForEachStatement node) => null; |
- R visitFormalParameterList(FormalParameterList node) => null; |
- R visitForStatement(ForStatement node) => null; |
- R visitFunctionDeclaration(FunctionDeclaration node) => null; |
- R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => null; |
- R visitFunctionExpression(FunctionExpression node) => null; |
- R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => null; |
- R visitFunctionTypeAlias(FunctionTypeAlias node) => null; |
- R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => null; |
- R visitHideCombinator(HideCombinator node) => null; |
- R visitIfStatement(IfStatement node) => null; |
- R visitImplementsClause(ImplementsClause node) => null; |
- R visitImportDirective(ImportDirective node) => null; |
- R visitIndexExpression(IndexExpression node) => null; |
- R visitInstanceCreationExpression(InstanceCreationExpression node) => null; |
- R visitIntegerLiteral(IntegerLiteral node) => null; |
- R visitInterpolationExpression(InterpolationExpression node) => null; |
- R visitInterpolationString(InterpolationString node) => null; |
- R visitIsExpression(IsExpression node) => null; |
- R visitLabel(Label node) => null; |
- R visitLabeledStatement(LabeledStatement node) => null; |
- R visitLibraryDirective(LibraryDirective node) => null; |
- R visitLibraryIdentifier(LibraryIdentifier node) => null; |
- R visitListLiteral(ListLiteral node) => null; |
- R visitMapLiteral(MapLiteral node) => null; |
- R visitMapLiteralEntry(MapLiteralEntry node) => null; |
- R visitMethodDeclaration(MethodDeclaration node) => null; |
- R visitMethodInvocation(MethodInvocation node) => null; |
- R visitNamedExpression(NamedExpression node) => null; |
- R visitNativeClause(NativeClause node) => null; |
- R visitNativeFunctionBody(NativeFunctionBody node) => null; |
- R visitNullLiteral(NullLiteral node) => null; |
- R visitParenthesizedExpression(ParenthesizedExpression node) => null; |
- R visitPartDirective(PartDirective node) => null; |
- R visitPartOfDirective(PartOfDirective node) => null; |
- R visitPostfixExpression(PostfixExpression node) => null; |
- R visitPrefixedIdentifier(PrefixedIdentifier node) => null; |
- R visitPrefixExpression(PrefixExpression node) => null; |
- R visitPropertyAccess(PropertyAccess node) => null; |
- R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => null; |
- R visitRethrowExpression(RethrowExpression node) => null; |
- R visitReturnStatement(ReturnStatement node) => null; |
- R visitScriptTag(ScriptTag node) => null; |
- R visitShowCombinator(ShowCombinator node) => null; |
- R visitSimpleFormalParameter(SimpleFormalParameter node) => null; |
- R visitSimpleIdentifier(SimpleIdentifier node) => null; |
- R visitSimpleStringLiteral(SimpleStringLiteral node) => null; |
- R visitStringInterpolation(StringInterpolation node) => null; |
- R visitSuperConstructorInvocation(SuperConstructorInvocation node) => null; |
- R visitSuperExpression(SuperExpression node) => null; |
- R visitSwitchCase(SwitchCase node) => null; |
- R visitSwitchDefault(SwitchDefault node) => null; |
- R visitSwitchStatement(SwitchStatement node) => null; |
- R visitSymbolLiteral(SymbolLiteral node) => null; |
- R visitThisExpression(ThisExpression node) => null; |
- R visitThrowExpression(ThrowExpression node) => null; |
- R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => null; |
- R visitTryStatement(TryStatement node) => null; |
- R visitTypeArgumentList(TypeArgumentList node) => null; |
- R visitTypeName(TypeName node) => null; |
- R visitTypeParameter(TypeParameter node) => null; |
- R visitTypeParameterList(TypeParameterList node) => null; |
- R visitVariableDeclaration(VariableDeclaration node) => null; |
- R visitVariableDeclarationList(VariableDeclarationList node) => null; |
- R visitVariableDeclarationStatement(VariableDeclarationStatement node) => null; |
- R visitWhileStatement(WhileStatement node) => null; |
- R visitWithClause(WithClause node) => null; |
-} |
-/** |
- * Instances of the class `ToSourceVisitor` write a source representation of a visited AST |
- * node (and all of it's children) to a writer. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class ToSourceVisitor implements ASTVisitor<Object> { |
- |
- /** |
- * The writer to which the source is to be written. |
- */ |
- PrintWriter _writer; |
- |
- /** |
- * Initialize a newly created visitor to write source code representing the visited nodes to the |
- * given writer. |
- * |
- * @param writer the writer to which the source is to be written |
- */ |
- ToSourceVisitor(PrintWriter writer) { |
- this._writer = writer; |
- } |
- Object visitAdjacentStrings(AdjacentStrings node) { |
- visitList2(node.strings, " "); |
- return null; |
- } |
- Object visitAnnotation(Annotation node) { |
- _writer.print('@'); |
- visit(node.name); |
- visit3(".", node.constructorName); |
- visit(node.arguments); |
- return null; |
- } |
- Object visitArgumentDefinitionTest(ArgumentDefinitionTest node) { |
- _writer.print('?'); |
- visit(node.identifier); |
- return null; |
- } |
- Object visitArgumentList(ArgumentList node) { |
- _writer.print('('); |
- visitList2(node.arguments, ", "); |
- _writer.print(')'); |
- return null; |
- } |
- Object visitAsExpression(AsExpression node) { |
- visit(node.expression); |
- _writer.print(" as "); |
- visit(node.type); |
- return null; |
- } |
- Object visitAssertStatement(AssertStatement node) { |
- _writer.print("assert ("); |
- visit(node.condition); |
- _writer.print(");"); |
- return null; |
- } |
- Object visitAssignmentExpression(AssignmentExpression node) { |
- visit(node.leftHandSide); |
- _writer.print(' '); |
- _writer.print(node.operator.lexeme); |
- _writer.print(' '); |
- visit(node.rightHandSide); |
- return null; |
- } |
- Object visitBinaryExpression(BinaryExpression node) { |
- visit(node.leftOperand); |
- _writer.print(' '); |
- _writer.print(node.operator.lexeme); |
- _writer.print(' '); |
- visit(node.rightOperand); |
- return null; |
- } |
- Object visitBlock(Block node) { |
- _writer.print('{'); |
- visitList2(node.statements, " "); |
- _writer.print('}'); |
- return null; |
- } |
- Object visitBlockFunctionBody(BlockFunctionBody node) { |
- visit(node.block); |
- return null; |
- } |
- Object visitBooleanLiteral(BooleanLiteral node) { |
- _writer.print(node.literal.lexeme); |
- return null; |
- } |
- Object visitBreakStatement(BreakStatement node) { |
- _writer.print("break"); |
- visit3(" ", node.label); |
- _writer.print(";"); |
- return null; |
- } |
- Object visitCascadeExpression(CascadeExpression node) { |
- visit(node.target); |
- visitList(node.cascadeSections); |
- return null; |
- } |
- Object visitCatchClause(CatchClause node) { |
- visit3("on ", node.exceptionType); |
- if (node.catchKeyword != null) { |
- if (node.exceptionType != null) { |
- _writer.print(' '); |
- } |
- _writer.print("catch ("); |
- visit(node.exceptionParameter); |
- visit3(", ", node.stackTraceParameter); |
- _writer.print(") "); |
- } else { |
- _writer.print(" "); |
- } |
- visit(node.body); |
- return null; |
- } |
- Object visitClassDeclaration(ClassDeclaration node) { |
- visit5(node.abstractKeyword, " "); |
- _writer.print("class "); |
- visit(node.name); |
- visit(node.typeParameters); |
- visit3(" ", node.extendsClause); |
- visit3(" ", node.withClause); |
- visit3(" ", node.implementsClause); |
- _writer.print(" {"); |
- visitList2(node.members, " "); |
- _writer.print("}"); |
- return null; |
- } |
- Object visitClassTypeAlias(ClassTypeAlias node) { |
- _writer.print("class "); |
- visit(node.name); |
- visit(node.typeParameters); |
- _writer.print(" = "); |
- if (node.abstractKeyword != null) { |
- _writer.print("abstract "); |
- } |
- visit(node.superclass); |
- visit3(" ", node.withClause); |
- visit3(" ", node.implementsClause); |
- _writer.print(";"); |
- return null; |
- } |
- Object visitComment(Comment node) => null; |
- Object visitCommentReference(CommentReference node) => null; |
- Object visitCompilationUnit(CompilationUnit node) { |
- ScriptTag scriptTag = node.scriptTag; |
- NodeList<Directive> directives = node.directives; |
- visit(scriptTag); |
- String prefix = scriptTag == null ? "" : " "; |
- visitList4(prefix, directives, " "); |
- prefix = scriptTag == null && directives.isEmpty ? "" : " "; |
- visitList4(prefix, node.declarations, " "); |
- return null; |
- } |
- Object visitConditionalExpression(ConditionalExpression node) { |
- visit(node.condition); |
- _writer.print(" ? "); |
- visit(node.thenExpression); |
- _writer.print(" : "); |
- visit(node.elseExpression); |
- return null; |
- } |
- Object visitConstructorDeclaration(ConstructorDeclaration node) { |
- visit5(node.externalKeyword, " "); |
- visit5(node.constKeyword, " "); |
- visit5(node.factoryKeyword, " "); |
- visit(node.returnType); |
- visit3(".", node.name); |
- visit(node.parameters); |
- visitList4(" : ", node.initializers, ", "); |
- visit3(" = ", node.redirectedConstructor); |
- visit4(" ", node.body); |
- return null; |
- } |
- Object visitConstructorFieldInitializer(ConstructorFieldInitializer node) { |
- visit5(node.keyword, "."); |
- visit(node.fieldName); |
- _writer.print(" = "); |
- visit(node.expression); |
- return null; |
- } |
- Object visitConstructorName(ConstructorName node) { |
- visit(node.type); |
- visit3(".", node.name); |
- return null; |
- } |
- Object visitContinueStatement(ContinueStatement node) { |
- _writer.print("continue"); |
- visit3(" ", node.label); |
- _writer.print(";"); |
- return null; |
- } |
- Object visitDeclaredIdentifier(DeclaredIdentifier node) { |
- visit5(node.keyword, " "); |
- visit2(node.type, " "); |
- visit(node.identifier); |
- return null; |
- } |
- Object visitDefaultFormalParameter(DefaultFormalParameter node) { |
- visit(node.parameter); |
- if (node.separator != null) { |
- _writer.print(" "); |
- _writer.print(node.separator.lexeme); |
- visit3(" ", node.defaultValue); |
- } |
- return null; |
- } |
- Object visitDoStatement(DoStatement node) { |
- _writer.print("do "); |
- visit(node.body); |
- _writer.print(" while ("); |
- visit(node.condition); |
- _writer.print(");"); |
- return null; |
- } |
- Object visitDoubleLiteral(DoubleLiteral node) { |
- _writer.print(node.literal.lexeme); |
- return null; |
- } |
- Object visitEmptyFunctionBody(EmptyFunctionBody node) { |
- _writer.print(';'); |
- return null; |
- } |
- Object visitEmptyStatement(EmptyStatement node) { |
- _writer.print(';'); |
- return null; |
- } |
- Object visitExportDirective(ExportDirective node) { |
- _writer.print("export "); |
- visit(node.uri); |
- visitList4(" ", node.combinators, " "); |
- _writer.print(';'); |
- return null; |
- } |
- Object visitExpressionFunctionBody(ExpressionFunctionBody node) { |
- _writer.print("=> "); |
- visit(node.expression); |
- if (node.semicolon != null) { |
- _writer.print(';'); |
- } |
- return null; |
- } |
- Object visitExpressionStatement(ExpressionStatement node) { |
- visit(node.expression); |
- _writer.print(';'); |
- return null; |
- } |
- Object visitExtendsClause(ExtendsClause node) { |
- _writer.print("extends "); |
- visit(node.superclass); |
- return null; |
- } |
- Object visitFieldDeclaration(FieldDeclaration node) { |
- visit5(node.staticKeyword, " "); |
- visit(node.fields); |
- _writer.print(";"); |
- return null; |
- } |
- Object visitFieldFormalParameter(FieldFormalParameter node) { |
- visit5(node.keyword, " "); |
- visit2(node.type, " "); |
- _writer.print("this."); |
- visit(node.identifier); |
- visit(node.parameters); |
- return null; |
- } |
- Object visitForEachStatement(ForEachStatement node) { |
- DeclaredIdentifier loopVariable = node.loopVariable; |
- _writer.print("for ("); |
- if (loopVariable == null) { |
- visit(node.identifier); |
- } else { |
- visit(loopVariable); |
- } |
- _writer.print(" in "); |
- visit(node.iterator); |
- _writer.print(") "); |
- visit(node.body); |
- return null; |
- } |
- Object visitFormalParameterList(FormalParameterList node) { |
- String groupEnd = null; |
- _writer.print('('); |
- NodeList<FormalParameter> parameters = node.parameters; |
- int size = parameters.length; |
- for (int i = 0; i < size; i++) { |
- FormalParameter parameter = parameters[i]; |
- if (i > 0) { |
- _writer.print(", "); |
- } |
- if (groupEnd == null && parameter is DefaultFormalParameter) { |
- if (identical(parameter.kind, ParameterKind.NAMED)) { |
- groupEnd = "}"; |
- _writer.print('{'); |
- } else { |
- groupEnd = "]"; |
- _writer.print('['); |
- } |
- } |
- parameter.accept(this); |
- } |
- if (groupEnd != null) { |
- _writer.print(groupEnd); |
- } |
- _writer.print(')'); |
- return null; |
- } |
- Object visitForStatement(ForStatement node) { |
- Expression initialization = node.initialization; |
- _writer.print("for ("); |
- if (initialization != null) { |
- visit(initialization); |
- } else { |
- visit(node.variables); |
- } |
- _writer.print(";"); |
- visit3(" ", node.condition); |
- _writer.print(";"); |
- visitList4(" ", node.updaters, ", "); |
- _writer.print(") "); |
- visit(node.body); |
- return null; |
- } |
- Object visitFunctionDeclaration(FunctionDeclaration node) { |
- visit2(node.returnType, " "); |
- visit5(node.propertyKeyword, " "); |
- visit(node.name); |
- visit(node.functionExpression); |
- return null; |
- } |
- Object visitFunctionDeclarationStatement(FunctionDeclarationStatement node) { |
- visit(node.functionDeclaration); |
- _writer.print(';'); |
- return null; |
- } |
- Object visitFunctionExpression(FunctionExpression node) { |
- visit(node.parameters); |
- _writer.print(' '); |
- visit(node.body); |
- return null; |
- } |
- Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { |
- visit(node.function); |
- visit(node.argumentList); |
- return null; |
- } |
- Object visitFunctionTypeAlias(FunctionTypeAlias node) { |
- _writer.print("typedef "); |
- visit2(node.returnType, " "); |
- visit(node.name); |
- visit(node.typeParameters); |
- visit(node.parameters); |
- _writer.print(";"); |
- return null; |
- } |
- Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { |
- visit2(node.returnType, " "); |
- visit(node.identifier); |
- visit(node.parameters); |
- return null; |
- } |
- Object visitHideCombinator(HideCombinator node) { |
- _writer.print("hide "); |
- visitList2(node.hiddenNames, ", "); |
- return null; |
- } |
- Object visitIfStatement(IfStatement node) { |
- _writer.print("if ("); |
- visit(node.condition); |
- _writer.print(") "); |
- visit(node.thenStatement); |
- visit3(" else ", node.elseStatement); |
- return null; |
- } |
- Object visitImplementsClause(ImplementsClause node) { |
- _writer.print("implements "); |
- visitList2(node.interfaces, ", "); |
- return null; |
- } |
- Object visitImportDirective(ImportDirective node) { |
- _writer.print("import "); |
- visit(node.uri); |
- visit3(" as ", node.prefix); |
- visitList4(" ", node.combinators, " "); |
- _writer.print(';'); |
- return null; |
- } |
- Object visitIndexExpression(IndexExpression node) { |
- if (node.isCascaded) { |
- _writer.print(".."); |
- } else { |
- visit(node.target); |
- } |
- _writer.print('['); |
- visit(node.index); |
- _writer.print(']'); |
- return null; |
- } |
- Object visitInstanceCreationExpression(InstanceCreationExpression node) { |
- visit5(node.keyword, " "); |
- visit(node.constructorName); |
- visit(node.argumentList); |
- return null; |
- } |
- Object visitIntegerLiteral(IntegerLiteral node) { |
- _writer.print(node.literal.lexeme); |
- return null; |
- } |
- Object visitInterpolationExpression(InterpolationExpression node) { |
- if (node.rightBracket != null) { |
- _writer.print("\${"); |
- visit(node.expression); |
- _writer.print("}"); |
- } else { |
- _writer.print("\$"); |
- visit(node.expression); |
- } |
- return null; |
- } |
- Object visitInterpolationString(InterpolationString node) { |
- _writer.print(node.contents.lexeme); |
- return null; |
- } |
- Object visitIsExpression(IsExpression node) { |
- visit(node.expression); |
- if (node.notOperator == null) { |
- _writer.print(" is "); |
- } else { |
- _writer.print(" is! "); |
- } |
- visit(node.type); |
- return null; |
- } |
- Object visitLabel(Label node) { |
- visit(node.label); |
- _writer.print(":"); |
- return null; |
- } |
- Object visitLabeledStatement(LabeledStatement node) { |
- visitList3(node.labels, " ", " "); |
- visit(node.statement); |
- return null; |
- } |
- Object visitLibraryDirective(LibraryDirective node) { |
- _writer.print("library "); |
- visit(node.name); |
- _writer.print(';'); |
- return null; |
- } |
- Object visitLibraryIdentifier(LibraryIdentifier node) { |
- _writer.print(node.name); |
- return null; |
- } |
- Object visitListLiteral(ListLiteral node) { |
- if (node.constKeyword != null) { |
- _writer.print(node.constKeyword.lexeme); |
- _writer.print(' '); |
- } |
- visit2(node.typeArguments, " "); |
- _writer.print("["); |
- visitList2(node.elements, ", "); |
- _writer.print("]"); |
- return null; |
- } |
- Object visitMapLiteral(MapLiteral node) { |
- if (node.constKeyword != null) { |
- _writer.print(node.constKeyword.lexeme); |
- _writer.print(' '); |
- } |
- visit2(node.typeArguments, " "); |
- _writer.print("{"); |
- visitList2(node.entries, ", "); |
- _writer.print("}"); |
- return null; |
- } |
- Object visitMapLiteralEntry(MapLiteralEntry node) { |
- visit(node.key); |
- _writer.print(" : "); |
- visit(node.value); |
- return null; |
- } |
- Object visitMethodDeclaration(MethodDeclaration node) { |
- visit5(node.externalKeyword, " "); |
- visit5(node.modifierKeyword, " "); |
- visit2(node.returnType, " "); |
- visit5(node.propertyKeyword, " "); |
- visit5(node.operatorKeyword, " "); |
- visit(node.name); |
- if (!node.isGetter) { |
- visit(node.parameters); |
- } |
- visit4(" ", node.body); |
- return null; |
- } |
- Object visitMethodInvocation(MethodInvocation node) { |
- if (node.isCascaded) { |
- _writer.print(".."); |
- } else { |
- visit2(node.target, "."); |
- } |
- visit(node.methodName); |
- visit(node.argumentList); |
- return null; |
- } |
- Object visitNamedExpression(NamedExpression node) { |
- visit(node.name); |
- visit3(" ", node.expression); |
- return null; |
- } |
- Object visitNativeClause(NativeClause node) { |
- _writer.print("native "); |
- visit(node.name); |
- return null; |
- } |
- Object visitNativeFunctionBody(NativeFunctionBody node) { |
- _writer.print("native "); |
- visit(node.stringLiteral); |
- _writer.print(';'); |
- return null; |
- } |
- Object visitNullLiteral(NullLiteral node) { |
- _writer.print("null"); |
- return null; |
- } |
- Object visitParenthesizedExpression(ParenthesizedExpression node) { |
- _writer.print('('); |
- visit(node.expression); |
- _writer.print(')'); |
- return null; |
- } |
- Object visitPartDirective(PartDirective node) { |
- _writer.print("part "); |
- visit(node.uri); |
- _writer.print(';'); |
- return null; |
- } |
- Object visitPartOfDirective(PartOfDirective node) { |
- _writer.print("part of "); |
- visit(node.libraryName); |
- _writer.print(';'); |
- return null; |
- } |
- Object visitPostfixExpression(PostfixExpression node) { |
- visit(node.operand); |
- _writer.print(node.operator.lexeme); |
- return null; |
- } |
- Object visitPrefixedIdentifier(PrefixedIdentifier node) { |
- visit(node.prefix); |
- _writer.print('.'); |
- visit(node.identifier); |
- return null; |
- } |
- Object visitPrefixExpression(PrefixExpression node) { |
- _writer.print(node.operator.lexeme); |
- visit(node.operand); |
- return null; |
- } |
- Object visitPropertyAccess(PropertyAccess node) { |
- if (node.isCascaded) { |
- _writer.print(".."); |
- } else { |
- visit(node.target); |
- _writer.print('.'); |
- } |
- visit(node.propertyName); |
- return null; |
- } |
- Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) { |
- _writer.print("this"); |
- visit3(".", node.constructorName); |
- visit(node.argumentList); |
- return null; |
- } |
- Object visitRethrowExpression(RethrowExpression node) { |
- _writer.print("rethrow"); |
- return null; |
- } |
- Object visitReturnStatement(ReturnStatement node) { |
- Expression expression = node.expression; |
- if (expression == null) { |
- _writer.print("return;"); |
- } else { |
- _writer.print("return "); |
- expression.accept(this); |
- _writer.print(";"); |
- } |
- return null; |
- } |
- Object visitScriptTag(ScriptTag node) { |
- _writer.print(node.scriptTag.lexeme); |
- return null; |
- } |
- Object visitShowCombinator(ShowCombinator node) { |
- _writer.print("show "); |
- visitList2(node.shownNames, ", "); |
- return null; |
- } |
- Object visitSimpleFormalParameter(SimpleFormalParameter node) { |
- visit5(node.keyword, " "); |
- visit2(node.type, " "); |
- visit(node.identifier); |
- return null; |
- } |
- Object visitSimpleIdentifier(SimpleIdentifier node) { |
- _writer.print(node.token.lexeme); |
- return null; |
- } |
- Object visitSimpleStringLiteral(SimpleStringLiteral node) { |
- _writer.print(node.literal.lexeme); |
- return null; |
- } |
- Object visitStringInterpolation(StringInterpolation node) { |
- visitList(node.elements); |
- return null; |
- } |
- Object visitSuperConstructorInvocation(SuperConstructorInvocation node) { |
- _writer.print("super"); |
- visit3(".", node.constructorName); |
- visit(node.argumentList); |
- return null; |
- } |
- Object visitSuperExpression(SuperExpression node) { |
- _writer.print("super"); |
- return null; |
- } |
- Object visitSwitchCase(SwitchCase node) { |
- visitList3(node.labels, " ", " "); |
- _writer.print("case "); |
- visit(node.expression); |
- _writer.print(": "); |
- visitList2(node.statements, " "); |
- return null; |
- } |
- Object visitSwitchDefault(SwitchDefault node) { |
- visitList3(node.labels, " ", " "); |
- _writer.print("default: "); |
- visitList2(node.statements, " "); |
- return null; |
- } |
- Object visitSwitchStatement(SwitchStatement node) { |
- _writer.print("switch ("); |
- visit(node.expression); |
- _writer.print(") {"); |
- visitList2(node.members, " "); |
- _writer.print("}"); |
- return null; |
- } |
- Object visitSymbolLiteral(SymbolLiteral node) { |
- _writer.print("#"); |
- List<Token> components = node.components; |
- for (int i = 0; i < components.length; i++) { |
- if (i > 0) { |
- _writer.print("."); |
- } |
- _writer.print(components[i].lexeme); |
- } |
- return null; |
- } |
- Object visitThisExpression(ThisExpression node) { |
- _writer.print("this"); |
- return null; |
- } |
- Object visitThrowExpression(ThrowExpression node) { |
- _writer.print("throw "); |
- visit(node.expression); |
- return null; |
- } |
- Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) { |
- visit2(node.variables, ";"); |
- return null; |
- } |
- Object visitTryStatement(TryStatement node) { |
- _writer.print("try "); |
- visit(node.body); |
- visitList4(" ", node.catchClauses, " "); |
- visit3(" finally ", node.finallyBlock); |
- return null; |
- } |
- Object visitTypeArgumentList(TypeArgumentList node) { |
- _writer.print('<'); |
- visitList2(node.arguments, ", "); |
- _writer.print('>'); |
- return null; |
- } |
- Object visitTypeName(TypeName node) { |
- visit(node.name); |
- visit(node.typeArguments); |
- return null; |
- } |
- Object visitTypeParameter(TypeParameter node) { |
- visit(node.name); |
- visit3(" extends ", node.bound); |
- return null; |
- } |
- Object visitTypeParameterList(TypeParameterList node) { |
- _writer.print('<'); |
- visitList2(node.typeParameters, ", "); |
- _writer.print('>'); |
- return null; |
- } |
- Object visitVariableDeclaration(VariableDeclaration node) { |
- visit(node.name); |
- visit3(" = ", node.initializer); |
- return null; |
- } |
- Object visitVariableDeclarationList(VariableDeclarationList node) { |
- visit5(node.keyword, " "); |
- visit2(node.type, " "); |
- visitList2(node.variables, ", "); |
- return null; |
- } |
- Object visitVariableDeclarationStatement(VariableDeclarationStatement node) { |
- visit(node.variables); |
- _writer.print(";"); |
- return null; |
- } |
- Object visitWhileStatement(WhileStatement node) { |
- _writer.print("while ("); |
- visit(node.condition); |
- _writer.print(") "); |
- visit(node.body); |
- return null; |
- } |
- Object visitWithClause(WithClause node) { |
- _writer.print("with "); |
- visitList2(node.mixinTypes, ", "); |
- return null; |
- } |
- |
- /** |
- * Safely visit the given node. |
- * |
- * @param node the node to be visited |
- */ |
- void visit(ASTNode node) { |
- if (node != null) { |
- node.accept(this); |
- } |
- } |
- |
- /** |
- * Safely visit the given node, printing the suffix after the node if it is non-`null`. |
- * |
- * @param suffix the suffix to be printed if there is a node to visit |
- * @param node the node to be visited |
- */ |
- void visit2(ASTNode node, String suffix) { |
- if (node != null) { |
- node.accept(this); |
- _writer.print(suffix); |
- } |
- } |
- |
- /** |
- * Safely visit the given node, printing the prefix before the node if it is non-`null`. |
- * |
- * @param prefix the prefix to be printed if there is a node to visit |
- * @param node the node to be visited |
- */ |
- void visit3(String prefix, ASTNode node) { |
- if (node != null) { |
- _writer.print(prefix); |
- node.accept(this); |
- } |
- } |
- |
- /** |
- * Visit the given function body, printing the prefix before if given body is not empty. |
- * |
- * @param prefix the prefix to be printed if there is a node to visit |
- * @param body the function body to be visited |
- */ |
- void visit4(String prefix, FunctionBody body) { |
- if (body is! EmptyFunctionBody) { |
- _writer.print(prefix); |
- } |
- visit(body); |
- } |
- |
- /** |
- * Safely visit the given node, printing the suffix after the node if it is non-`null`. |
- * |
- * @param suffix the suffix to be printed if there is a node to visit |
- * @param node the node to be visited |
- */ |
- void visit5(Token token, String suffix) { |
- if (token != null) { |
- _writer.print(token.lexeme); |
- _writer.print(suffix); |
- } |
- } |
- |
- /** |
- * Print a list of nodes without any separation. |
- * |
- * @param nodes the nodes to be printed |
- * @param separator the separator to be printed between adjacent nodes |
- */ |
- void visitList(NodeList<ASTNode> nodes) { |
- visitList2(nodes, ""); |
- } |
- |
- /** |
- * Print a list of nodes, separated by the given separator. |
- * |
- * @param nodes the nodes to be printed |
- * @param separator the separator to be printed between adjacent nodes |
- */ |
- void visitList2(NodeList<ASTNode> nodes, String separator) { |
- if (nodes != null) { |
- int size = nodes.length; |
- for (int i = 0; i < size; i++) { |
- if (i > 0) { |
- _writer.print(separator); |
- } |
- nodes[i].accept(this); |
- } |
- } |
- } |
- |
- /** |
- * Print a list of nodes, separated by the given separator. |
- * |
- * @param nodes the nodes to be printed |
- * @param separator the separator to be printed between adjacent nodes |
- * @param suffix the suffix to be printed if the list is not empty |
- */ |
- void visitList3(NodeList<ASTNode> nodes, String separator, String suffix) { |
- if (nodes != null) { |
- int size = nodes.length; |
- if (size > 0) { |
- for (int i = 0; i < size; i++) { |
- if (i > 0) { |
- _writer.print(separator); |
- } |
- nodes[i].accept(this); |
- } |
- _writer.print(suffix); |
- } |
- } |
- } |
- |
- /** |
- * Print a list of nodes, separated by the given separator. |
- * |
- * @param prefix the prefix to be printed if the list is not empty |
- * @param nodes the nodes to be printed |
- * @param separator the separator to be printed between adjacent nodes |
- */ |
- void visitList4(String prefix, NodeList<ASTNode> nodes, String separator) { |
- if (nodes != null) { |
- int size = nodes.length; |
- if (size > 0) { |
- _writer.print(prefix); |
- for (int i = 0; i < size; i++) { |
- if (i > 0) { |
- _writer.print(separator); |
- } |
- nodes[i].accept(this); |
- } |
- } |
- } |
- } |
-} |
-/** |
- * Instances of the class `UnifyingASTVisitor` implement an AST visitor that will recursively |
- * visit all of the nodes in an AST structure (like instances of the class |
- * [RecursiveASTVisitor]). In addition, every node will also be visited by using a single |
- * unified [visitNode] method. |
- * |
- * Subclasses that override a visit method must either invoke the overridden visit method or |
- * explicitly invoke the more general [visitNode] method. Failure to do so will |
- * cause the children of the visited node to not be visited. |
- * |
- * @coverage dart.engine.ast |
- */ |
-class UnifyingASTVisitor<R> implements ASTVisitor<R> { |
- R visitAdjacentStrings(AdjacentStrings node) => visitNode(node); |
- R visitAnnotation(Annotation node) => visitNode(node); |
- R visitArgumentDefinitionTest(ArgumentDefinitionTest node) => visitNode(node); |
- R visitArgumentList(ArgumentList node) => visitNode(node); |
- R visitAsExpression(AsExpression node) => visitNode(node); |
- R visitAssertStatement(AssertStatement node) => visitNode(node); |
- R visitAssignmentExpression(AssignmentExpression node) => visitNode(node); |
- R visitBinaryExpression(BinaryExpression node) => visitNode(node); |
- R visitBlock(Block node) => visitNode(node); |
- R visitBlockFunctionBody(BlockFunctionBody node) => visitNode(node); |
- R visitBooleanLiteral(BooleanLiteral node) => visitNode(node); |
- R visitBreakStatement(BreakStatement node) => visitNode(node); |
- R visitCascadeExpression(CascadeExpression node) => visitNode(node); |
- R visitCatchClause(CatchClause node) => visitNode(node); |
- R visitClassDeclaration(ClassDeclaration node) => visitNode(node); |
- R visitClassTypeAlias(ClassTypeAlias node) => visitNode(node); |
- R visitComment(Comment node) => visitNode(node); |
- R visitCommentReference(CommentReference node) => visitNode(node); |
- R visitCompilationUnit(CompilationUnit node) => visitNode(node); |
- R visitConditionalExpression(ConditionalExpression node) => visitNode(node); |
- R visitConstructorDeclaration(ConstructorDeclaration node) => visitNode(node); |
- R visitConstructorFieldInitializer(ConstructorFieldInitializer node) => visitNode(node); |
- R visitConstructorName(ConstructorName node) => visitNode(node); |
- R visitContinueStatement(ContinueStatement node) => visitNode(node); |
- R visitDeclaredIdentifier(DeclaredIdentifier node) => visitNode(node); |
- R visitDefaultFormalParameter(DefaultFormalParameter node) => visitNode(node); |
- R visitDoStatement(DoStatement node) => visitNode(node); |
- R visitDoubleLiteral(DoubleLiteral node) => visitNode(node); |
- R visitEmptyFunctionBody(EmptyFunctionBody node) => visitNode(node); |
- R visitEmptyStatement(EmptyStatement node) => visitNode(node); |
- R visitExportDirective(ExportDirective node) => visitNode(node); |
- R visitExpressionFunctionBody(ExpressionFunctionBody node) => visitNode(node); |
- R visitExpressionStatement(ExpressionStatement node) => visitNode(node); |
- R visitExtendsClause(ExtendsClause node) => visitNode(node); |
- R visitFieldDeclaration(FieldDeclaration node) => visitNode(node); |
- R visitFieldFormalParameter(FieldFormalParameter node) => visitNode(node); |
- R visitForEachStatement(ForEachStatement node) => visitNode(node); |
- R visitFormalParameterList(FormalParameterList node) => visitNode(node); |
- R visitForStatement(ForStatement node) => visitNode(node); |
- R visitFunctionDeclaration(FunctionDeclaration node) => visitNode(node); |
- R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => visitNode(node); |
- R visitFunctionExpression(FunctionExpression node) => visitNode(node); |
- R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => visitNode(node); |
- R visitFunctionTypeAlias(FunctionTypeAlias node) => visitNode(node); |
- R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => visitNode(node); |
- R visitHideCombinator(HideCombinator node) => visitNode(node); |
- R visitIfStatement(IfStatement node) => visitNode(node); |
- R visitImplementsClause(ImplementsClause node) => visitNode(node); |
- R visitImportDirective(ImportDirective node) => visitNode(node); |
- R visitIndexExpression(IndexExpression node) => visitNode(node); |
- R visitInstanceCreationExpression(InstanceCreationExpression node) => visitNode(node); |
- R visitIntegerLiteral(IntegerLiteral node) => visitNode(node); |
- R visitInterpolationExpression(InterpolationExpression node) => visitNode(node); |
- R visitInterpolationString(InterpolationString node) => visitNode(node); |
- R visitIsExpression(IsExpression node) => visitNode(node); |
- R visitLabel(Label node) => visitNode(node); |
- R visitLabeledStatement(LabeledStatement node) => visitNode(node); |
- R visitLibraryDirective(LibraryDirective node) => visitNode(node); |
- R visitLibraryIdentifier(LibraryIdentifier node) => visitNode(node); |
- R visitListLiteral(ListLiteral node) => visitNode(node); |
- R visitMapLiteral(MapLiteral node) => visitNode(node); |
- R visitMapLiteralEntry(MapLiteralEntry node) => visitNode(node); |
- R visitMethodDeclaration(MethodDeclaration node) => visitNode(node); |
- R visitMethodInvocation(MethodInvocation node) => visitNode(node); |
- R visitNamedExpression(NamedExpression node) => visitNode(node); |
- R visitNativeClause(NativeClause node) => visitNode(node); |
- R visitNativeFunctionBody(NativeFunctionBody node) => visitNode(node); |
- R visitNode(ASTNode node) { |
- node.visitChildren(this); |
- return null; |
- } |
- R visitNullLiteral(NullLiteral node) => visitNode(node); |
- R visitParenthesizedExpression(ParenthesizedExpression node) => visitNode(node); |
- R visitPartDirective(PartDirective node) => visitNode(node); |
- R visitPartOfDirective(PartOfDirective node) => visitNode(node); |
- R visitPostfixExpression(PostfixExpression node) => visitNode(node); |
- R visitPrefixedIdentifier(PrefixedIdentifier node) => visitNode(node); |
- R visitPrefixExpression(PrefixExpression node) => visitNode(node); |
- R visitPropertyAccess(PropertyAccess node) => visitNode(node); |
- R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => visitNode(node); |
- R visitRethrowExpression(RethrowExpression node) => visitNode(node); |
- R visitReturnStatement(ReturnStatement node) => visitNode(node); |
- R visitScriptTag(ScriptTag scriptTag) => visitNode(scriptTag); |
- R visitShowCombinator(ShowCombinator node) => visitNode(node); |
- R visitSimpleFormalParameter(SimpleFormalParameter node) => visitNode(node); |
- R visitSimpleIdentifier(SimpleIdentifier node) => visitNode(node); |
- R visitSimpleStringLiteral(SimpleStringLiteral node) => visitNode(node); |
- R visitStringInterpolation(StringInterpolation node) => visitNode(node); |
- R visitSuperConstructorInvocation(SuperConstructorInvocation node) => visitNode(node); |
- R visitSuperExpression(SuperExpression node) => visitNode(node); |
- R visitSwitchCase(SwitchCase node) => visitNode(node); |
- R visitSwitchDefault(SwitchDefault node) => visitNode(node); |
- R visitSwitchStatement(SwitchStatement node) => visitNode(node); |
- R visitSymbolLiteral(SymbolLiteral node) => visitNode(node); |
- R visitThisExpression(ThisExpression node) => visitNode(node); |
- R visitThrowExpression(ThrowExpression node) => visitNode(node); |
- R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => visitNode(node); |
- R visitTryStatement(TryStatement node) => visitNode(node); |
- R visitTypeArgumentList(TypeArgumentList node) => visitNode(node); |
- R visitTypeName(TypeName node) => visitNode(node); |
- R visitTypeParameter(TypeParameter node) => visitNode(node); |
- R visitTypeParameterList(TypeParameterList node) => visitNode(node); |
- R visitVariableDeclaration(VariableDeclaration node) => visitNode(node); |
- R visitVariableDeclarationList(VariableDeclarationList node) => visitNode(node); |
- R visitVariableDeclarationStatement(VariableDeclarationStatement node) => visitNode(node); |
- R visitWhileStatement(WhileStatement node) => visitNode(node); |
- R visitWithClause(WithClause node) => visitNode(node); |
-} |
-/** |
- * Instances of the class `ASTCloner` implement an object that will clone any AST structure |
- * that it visits. The cloner will only clone the structure, it will not preserve any resolution |
- * results or properties associated with the nodes. |
- */ |
-class ASTCloner implements ASTVisitor<ASTNode> { |
- AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings.full(clone3(node.strings)); |
- Annotation visitAnnotation(Annotation node) => new Annotation.full(node.atSign, clone2(node.name), node.period, clone2(node.constructorName), clone2(node.arguments)); |
- ArgumentDefinitionTest visitArgumentDefinitionTest(ArgumentDefinitionTest node) => new ArgumentDefinitionTest.full(node.question, clone2(node.identifier)); |
- ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList.full(node.leftParenthesis, clone3(node.arguments), node.rightParenthesis); |
- AsExpression visitAsExpression(AsExpression node) => new AsExpression.full(clone2(node.expression), node.asOperator, clone2(node.type)); |
- ASTNode visitAssertStatement(AssertStatement node) => new AssertStatement.full(node.keyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, node.semicolon); |
- AssignmentExpression visitAssignmentExpression(AssignmentExpression node) => new AssignmentExpression.full(clone2(node.leftHandSide), node.operator, clone2(node.rightHandSide)); |
- BinaryExpression visitBinaryExpression(BinaryExpression node) => new BinaryExpression.full(clone2(node.leftOperand), node.operator, clone2(node.rightOperand)); |
- Block visitBlock(Block node) => new Block.full(node.leftBracket, clone3(node.statements), node.rightBracket); |
- BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody.full(clone2(node.block)); |
- BooleanLiteral visitBooleanLiteral(BooleanLiteral node) => new BooleanLiteral.full(node.literal, node.value); |
- BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement.full(node.keyword, clone2(node.label), node.semicolon); |
- CascadeExpression visitCascadeExpression(CascadeExpression node) => new CascadeExpression.full(clone2(node.target), clone3(node.cascadeSections)); |
- CatchClause visitCatchClause(CatchClause node) => new CatchClause.full(node.onKeyword, clone2(node.exceptionType), node.catchKeyword, node.leftParenthesis, clone2(node.exceptionParameter), node.comma, clone2(node.stackTraceParameter), node.rightParenthesis, clone2(node.body)); |
- ClassDeclaration visitClassDeclaration(ClassDeclaration node) { |
- ClassDeclaration copy = new ClassDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.abstractKeyword, node.classKeyword, clone2(node.name), clone2(node.typeParameters), clone2(node.extendsClause), clone2(node.withClause), clone2(node.implementsClause), node.leftBracket, clone3(node.members), node.rightBracket); |
- copy.nativeClause = clone2(node.nativeClause); |
- return copy; |
- } |
- ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.name), clone2(node.typeParameters), node.equals, node.abstractKeyword, clone2(node.superclass), clone2(node.withClause), clone2(node.implementsClause), node.semicolon); |
- Comment visitComment(Comment node) { |
- if (node.isDocumentation) { |
- return Comment.createDocumentationComment2(node.tokens, clone3(node.references)); |
- } else if (node.isBlock) { |
- return Comment.createBlockComment(node.tokens); |
- } |
- return Comment.createEndOfLineComment(node.tokens); |
- } |
- CommentReference visitCommentReference(CommentReference node) => new CommentReference.full(node.newKeyword, clone2(node.identifier)); |
- CompilationUnit visitCompilationUnit(CompilationUnit node) { |
- CompilationUnit clone = new CompilationUnit.full(node.beginToken, clone2(node.scriptTag), clone3(node.directives), clone3(node.declarations), node.endToken); |
- clone.lineInfo = node.lineInfo; |
- return clone; |
- } |
- ConditionalExpression visitConditionalExpression(ConditionalExpression node) => new ConditionalExpression.full(clone2(node.condition), node.question, clone2(node.thenExpression), node.colon, clone2(node.elseExpression)); |
- ConstructorDeclaration visitConstructorDeclaration(ConstructorDeclaration node) => new ConstructorDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.externalKeyword, node.constKeyword, node.factoryKeyword, clone2(node.returnType), node.period, clone2(node.name), clone2(node.parameters), node.separator, clone3(node.initializers), clone2(node.redirectedConstructor), clone2(node.body)); |
- ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer.full(node.keyword, node.period, clone2(node.fieldName), node.equals, clone2(node.expression)); |
- ConstructorName visitConstructorName(ConstructorName node) => new ConstructorName.full(clone2(node.type), node.period, clone2(node.name)); |
- ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement.full(node.keyword, clone2(node.label), node.semicolon); |
- DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.type), clone2(node.identifier)); |
- DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter.full(clone2(node.parameter), node.kind, node.separator, clone2(node.defaultValue)); |
- DoStatement visitDoStatement(DoStatement node) => new DoStatement.full(node.doKeyword, clone2(node.body), node.whileKeyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, node.semicolon); |
- DoubleLiteral visitDoubleLiteral(DoubleLiteral node) => new DoubleLiteral.full(node.literal, node.value); |
- EmptyFunctionBody visitEmptyFunctionBody(EmptyFunctionBody node) => new EmptyFunctionBody.full(node.semicolon); |
- EmptyStatement visitEmptyStatement(EmptyStatement node) => new EmptyStatement.full(node.semicolon); |
- ExportDirective visitExportDirective(ExportDirective node) => new ExportDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.uri), clone3(node.combinators), node.semicolon); |
- ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody.full(node.functionDefinition, clone2(node.expression), node.semicolon); |
- ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement.full(clone2(node.expression), node.semicolon); |
- ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause.full(node.keyword, clone2(node.superclass)); |
- FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.staticKeyword, clone2(node.fields), node.semicolon); |
- FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.type), node.thisToken, node.period, clone2(node.identifier), clone2(node.parameters)); |
- ForEachStatement visitForEachStatement(ForEachStatement node) { |
- DeclaredIdentifier loopVariable = node.loopVariable; |
- if (loopVariable == null) { |
- return new ForEachStatement.con2_full(node.forKeyword, node.leftParenthesis, clone2(node.identifier), node.inKeyword, clone2(node.iterator), node.rightParenthesis, clone2(node.body)); |
- } |
- return new ForEachStatement.con1_full(node.forKeyword, node.leftParenthesis, clone2(loopVariable), node.inKeyword, clone2(node.iterator), node.rightParenthesis, clone2(node.body)); |
- } |
- FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList.full(node.leftParenthesis, clone3(node.parameters), node.leftDelimiter, node.rightDelimiter, node.rightParenthesis); |
- ForStatement visitForStatement(ForStatement node) => new ForStatement.full(node.forKeyword, node.leftParenthesis, clone2(node.variables), clone2(node.initialization), node.leftSeparator, clone2(node.condition), node.rightSeparator, clone3(node.updaters), node.rightParenthesis, clone2(node.body)); |
- FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.externalKeyword, clone2(node.returnType), node.propertyKeyword, clone2(node.name), clone2(node.functionExpression)); |
- FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement.full(clone2(node.functionDeclaration)); |
- FunctionExpression visitFunctionExpression(FunctionExpression node) => new FunctionExpression.full(clone2(node.parameters), clone2(node.body)); |
- FunctionExpressionInvocation visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => new FunctionExpressionInvocation.full(clone2(node.function), clone2(node.argumentList)); |
- FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.returnType), clone2(node.name), clone2(node.typeParameters), clone2(node.parameters), node.semicolon); |
- FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter.full(clone2(node.documentationComment), clone3(node.metadata), clone2(node.returnType), clone2(node.identifier), clone2(node.parameters)); |
- HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator.full(node.keyword, clone3(node.hiddenNames)); |
- IfStatement visitIfStatement(IfStatement node) => new IfStatement.full(node.ifKeyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, clone2(node.thenStatement), node.elseKeyword, clone2(node.elseStatement)); |
- ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause.full(node.keyword, clone3(node.interfaces)); |
- ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.uri), node.asToken, clone2(node.prefix), clone3(node.combinators), node.semicolon); |
- IndexExpression visitIndexExpression(IndexExpression node) { |
- Token period = node.period; |
- if (period == null) { |
- return new IndexExpression.forTarget_full(clone2(node.target), node.leftBracket, clone2(node.index), node.rightBracket); |
- } else { |
- return new IndexExpression.forCascade_full(period, node.leftBracket, clone2(node.index), node.rightBracket); |
- } |
- } |
- InstanceCreationExpression visitInstanceCreationExpression(InstanceCreationExpression node) => new InstanceCreationExpression.full(node.keyword, clone2(node.constructorName), clone2(node.argumentList)); |
- IntegerLiteral visitIntegerLiteral(IntegerLiteral node) => new IntegerLiteral.full(node.literal, node.value); |
- InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression.full(node.leftBracket, clone2(node.expression), node.rightBracket); |
- InterpolationString visitInterpolationString(InterpolationString node) => new InterpolationString.full(node.contents, node.value); |
- IsExpression visitIsExpression(IsExpression node) => new IsExpression.full(clone2(node.expression), node.isOperator, node.notOperator, clone2(node.type)); |
- Label visitLabel(Label node) => new Label.full(clone2(node.label), node.colon); |
- LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement.full(clone3(node.labels), clone2(node.statement)); |
- LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.libraryToken, clone2(node.name), node.semicolon); |
- LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) => new LibraryIdentifier.full(clone3(node.components)); |
- ListLiteral visitListLiteral(ListLiteral node) => new ListLiteral.full(node.constKeyword, clone2(node.typeArguments), node.leftBracket, clone3(node.elements), node.rightBracket); |
- MapLiteral visitMapLiteral(MapLiteral node) => new MapLiteral.full(node.constKeyword, clone2(node.typeArguments), node.leftBracket, clone3(node.entries), node.rightBracket); |
- MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry.full(clone2(node.key), node.separator, clone2(node.value)); |
- MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.externalKeyword, node.modifierKeyword, clone2(node.returnType), node.propertyKeyword, node.operatorKeyword, clone2(node.name), clone2(node.parameters), clone2(node.body)); |
- MethodInvocation visitMethodInvocation(MethodInvocation node) => new MethodInvocation.full(clone2(node.target), node.period, clone2(node.methodName), clone2(node.argumentList)); |
- NamedExpression visitNamedExpression(NamedExpression node) => new NamedExpression.full(clone2(node.name), clone2(node.expression)); |
- ASTNode visitNativeClause(NativeClause node) => new NativeClause.full(node.keyword, clone2(node.name)); |
- NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody.full(node.nativeToken, clone2(node.stringLiteral), node.semicolon); |
- NullLiteral visitNullLiteral(NullLiteral node) => new NullLiteral.full(node.literal); |
- ParenthesizedExpression visitParenthesizedExpression(ParenthesizedExpression node) => new ParenthesizedExpression.full(node.leftParenthesis, clone2(node.expression), node.rightParenthesis); |
- PartDirective visitPartDirective(PartDirective node) => new PartDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.partToken, clone2(node.uri), node.semicolon); |
- PartOfDirective visitPartOfDirective(PartOfDirective node) => new PartOfDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.partToken, node.ofToken, clone2(node.libraryName), node.semicolon); |
- PostfixExpression visitPostfixExpression(PostfixExpression node) => new PostfixExpression.full(clone2(node.operand), node.operator); |
- PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) => new PrefixedIdentifier.full(clone2(node.prefix), node.period, clone2(node.identifier)); |
- PrefixExpression visitPrefixExpression(PrefixExpression node) => new PrefixExpression.full(node.operator, clone2(node.operand)); |
- PropertyAccess visitPropertyAccess(PropertyAccess node) => new PropertyAccess.full(clone2(node.target), node.operator, clone2(node.propertyName)); |
- RedirectingConstructorInvocation visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => new RedirectingConstructorInvocation.full(node.keyword, node.period, clone2(node.constructorName), clone2(node.argumentList)); |
- RethrowExpression visitRethrowExpression(RethrowExpression node) => new RethrowExpression.full(node.keyword); |
- ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement.full(node.keyword, clone2(node.expression), node.semicolon); |
- ScriptTag visitScriptTag(ScriptTag node) => new ScriptTag.full(node.scriptTag); |
- ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator.full(node.keyword, clone3(node.shownNames)); |
- SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.type), clone2(node.identifier)); |
- SimpleIdentifier visitSimpleIdentifier(SimpleIdentifier node) => new SimpleIdentifier.full(node.token); |
- SimpleStringLiteral visitSimpleStringLiteral(SimpleStringLiteral node) => new SimpleStringLiteral.full(node.literal, node.value); |
- StringInterpolation visitStringInterpolation(StringInterpolation node) => new StringInterpolation.full(clone3(node.elements)); |
- SuperConstructorInvocation visitSuperConstructorInvocation(SuperConstructorInvocation node) => new SuperConstructorInvocation.full(node.keyword, node.period, clone2(node.constructorName), clone2(node.argumentList)); |
- SuperExpression visitSuperExpression(SuperExpression node) => new SuperExpression.full(node.keyword); |
- SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase.full(clone3(node.labels), node.keyword, clone2(node.expression), node.colon, clone3(node.statements)); |
- SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault.full(clone3(node.labels), node.keyword, node.colon, clone3(node.statements)); |
- SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement.full(node.keyword, node.leftParenthesis, clone2(node.expression), node.rightParenthesis, node.leftBracket, clone3(node.members), node.rightBracket); |
- ASTNode visitSymbolLiteral(SymbolLiteral node) => new SymbolLiteral.full(node.poundSign, node.components); |
- ThisExpression visitThisExpression(ThisExpression node) => new ThisExpression.full(node.keyword); |
- ThrowExpression visitThrowExpression(ThrowExpression node) => new ThrowExpression.full(node.keyword, clone2(node.expression)); |
- TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), clone2(node.variables), node.semicolon); |
- TryStatement visitTryStatement(TryStatement node) => new TryStatement.full(node.tryKeyword, clone2(node.body), clone3(node.catchClauses), node.finallyKeyword, clone2(node.finallyBlock)); |
- TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList.full(node.leftBracket, clone3(node.arguments), node.rightBracket); |
- TypeName visitTypeName(TypeName node) => new TypeName.full(clone2(node.name), clone2(node.typeArguments)); |
- TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter.full(clone2(node.documentationComment), clone3(node.metadata), clone2(node.name), node.keyword, clone2(node.bound)); |
- TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList.full(node.leftBracket, clone3(node.typeParameters), node.rightBracket); |
- VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration.full(null, clone3(node.metadata), clone2(node.name), node.equals, clone2(node.initializer)); |
- VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList.full(null, clone3(node.metadata), node.keyword, clone2(node.type), clone3(node.variables)); |
- VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement.full(clone2(node.variables), node.semicolon); |
- WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement.full(node.keyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, clone2(node.body)); |
- WithClause visitWithClause(WithClause node) => new WithClause.full(node.withKeyword, clone3(node.mixinTypes)); |
- ASTNode clone2(ASTNode node) { |
- if (node == null) { |
- return null; |
- } |
- return node.accept(this) as ASTNode; |
- } |
- List clone3(NodeList nodes) { |
- List clonedNodes = new List(); |
- for (ASTNode node in nodes) { |
- clonedNodes.add(node.accept(this) as ASTNode); |
- } |
- return clonedNodes; |
- } |
-} |
-/** |
- * Instances of the class `IncrementalASTCloner` implement an object that will clone any AST |
- * structure that it visits. The cloner will clone the structure, replacing the specified ASTNode |
- * with a new ASTNode, mapping the old token stream to a new token stream, and preserving resolution |
- * results. |
- */ |
-class IncrementalASTCloner implements ASTVisitor<ASTNode> { |
- |
- /** |
- * The node to be replaced during the cloning process. |
- */ |
- ASTNode _oldNode; |
- |
- /** |
- * The replacement node used during the cloning process. |
- */ |
- ASTNode _newNode; |
- |
- /** |
- * A mapping of old tokens to new tokens used during the cloning process. |
- */ |
- TokenMap _tokenMap; |
- |
- /** |
- * Construct a new instance that will replace `oldNode` with `newNode` in the process |
- * of cloning an existing AST structure. |
- * |
- * @param oldNode the node to be replaced |
- * @param newNode the replacement node |
- * @param tokenMap a mapping of old tokens to new tokens (not `null`) |
- */ |
- IncrementalASTCloner(ASTNode oldNode, ASTNode newNode, TokenMap tokenMap) { |
- this._oldNode = oldNode; |
- this._newNode = newNode; |
- this._tokenMap = tokenMap; |
- } |
- AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings.full(clone5(node.strings)); |
- Annotation visitAnnotation(Annotation node) { |
- Annotation copy = new Annotation.full(map(node.atSign), clone4(node.name), map(node.period), clone4(node.constructorName), clone4(node.arguments)); |
- copy.element = node.element; |
- return copy; |
- } |
- ArgumentDefinitionTest visitArgumentDefinitionTest(ArgumentDefinitionTest node) { |
- ArgumentDefinitionTest copy = new ArgumentDefinitionTest.full(map(node.question), clone4(node.identifier)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList.full(map(node.leftParenthesis), clone5(node.arguments), map(node.rightParenthesis)); |
- AsExpression visitAsExpression(AsExpression node) { |
- AsExpression copy = new AsExpression.full(clone4(node.expression), map(node.asOperator), clone4(node.type)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- ASTNode visitAssertStatement(AssertStatement node) => new AssertStatement.full(map(node.keyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), map(node.semicolon)); |
- AssignmentExpression visitAssignmentExpression(AssignmentExpression node) { |
- AssignmentExpression copy = new AssignmentExpression.full(clone4(node.leftHandSide), map(node.operator), clone4(node.rightHandSide)); |
- copy.propagatedElement = node.propagatedElement; |
- copy.staticElement = node.staticElement; |
- return copy; |
- } |
- BinaryExpression visitBinaryExpression(BinaryExpression node) { |
- BinaryExpression copy = new BinaryExpression.full(clone4(node.leftOperand), map(node.operator), clone4(node.rightOperand)); |
- copy.propagatedElement = node.propagatedElement; |
- copy.propagatedType = node.propagatedType; |
- copy.staticElement = node.staticElement; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- Block visitBlock(Block node) => new Block.full(map(node.leftBracket), clone5(node.statements), map(node.rightBracket)); |
- BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody.full(clone4(node.block)); |
- BooleanLiteral visitBooleanLiteral(BooleanLiteral node) { |
- BooleanLiteral copy = new BooleanLiteral.full(map(node.literal), node.value); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement.full(map(node.keyword), clone4(node.label), map(node.semicolon)); |
- CascadeExpression visitCascadeExpression(CascadeExpression node) { |
- CascadeExpression copy = new CascadeExpression.full(clone4(node.target), clone5(node.cascadeSections)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- CatchClause visitCatchClause(CatchClause node) => new CatchClause.full(map(node.onKeyword), clone4(node.exceptionType), map(node.catchKeyword), map(node.leftParenthesis), clone4(node.exceptionParameter), map(node.comma), clone4(node.stackTraceParameter), map(node.rightParenthesis), clone4(node.body)); |
- ClassDeclaration visitClassDeclaration(ClassDeclaration node) { |
- ClassDeclaration copy = new ClassDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.abstractKeyword), map(node.classKeyword), clone4(node.name), clone4(node.typeParameters), clone4(node.extendsClause), clone4(node.withClause), clone4(node.implementsClause), map(node.leftBracket), clone5(node.members), map(node.rightBracket)); |
- copy.nativeClause = clone4(node.nativeClause); |
- return copy; |
- } |
- ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.name), clone4(node.typeParameters), map(node.equals), map(node.abstractKeyword), clone4(node.superclass), clone4(node.withClause), clone4(node.implementsClause), map(node.semicolon)); |
- Comment visitComment(Comment node) { |
- if (node.isDocumentation) { |
- return Comment.createDocumentationComment2(map2(node.tokens), clone5(node.references)); |
- } else if (node.isBlock) { |
- return Comment.createBlockComment(map2(node.tokens)); |
- } |
- return Comment.createEndOfLineComment(map2(node.tokens)); |
- } |
- CommentReference visitCommentReference(CommentReference node) => new CommentReference.full(map(node.newKeyword), clone4(node.identifier)); |
- CompilationUnit visitCompilationUnit(CompilationUnit node) { |
- CompilationUnit copy = new CompilationUnit.full(map(node.beginToken), clone4(node.scriptTag), clone5(node.directives), clone5(node.declarations), map(node.endToken)); |
- copy.lineInfo = node.lineInfo; |
- copy.element = node.element; |
- return copy; |
- } |
- ConditionalExpression visitConditionalExpression(ConditionalExpression node) { |
- ConditionalExpression copy = new ConditionalExpression.full(clone4(node.condition), map(node.question), clone4(node.thenExpression), map(node.colon), clone4(node.elseExpression)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- ConstructorDeclaration visitConstructorDeclaration(ConstructorDeclaration node) { |
- ConstructorDeclaration copy = new ConstructorDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.externalKeyword), map(node.constKeyword), map(node.factoryKeyword), clone4(node.returnType), map(node.period), clone4(node.name), clone4(node.parameters), map(node.separator), clone5(node.initializers), clone4(node.redirectedConstructor), clone4(node.body)); |
- copy.element = node.element; |
- return copy; |
- } |
- ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer.full(map(node.keyword), map(node.period), clone4(node.fieldName), map(node.equals), clone4(node.expression)); |
- ConstructorName visitConstructorName(ConstructorName node) { |
- ConstructorName copy = new ConstructorName.full(clone4(node.type), map(node.period), clone4(node.name)); |
- copy.staticElement = node.staticElement; |
- return copy; |
- } |
- ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement.full(map(node.keyword), clone4(node.label), map(node.semicolon)); |
- DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.type), clone4(node.identifier)); |
- DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter.full(clone4(node.parameter), node.kind, map(node.separator), clone4(node.defaultValue)); |
- DoStatement visitDoStatement(DoStatement node) => new DoStatement.full(map(node.doKeyword), clone4(node.body), map(node.whileKeyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), map(node.semicolon)); |
- DoubleLiteral visitDoubleLiteral(DoubleLiteral node) { |
- DoubleLiteral copy = new DoubleLiteral.full(map(node.literal), node.value); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- EmptyFunctionBody visitEmptyFunctionBody(EmptyFunctionBody node) => new EmptyFunctionBody.full(map(node.semicolon)); |
- EmptyStatement visitEmptyStatement(EmptyStatement node) => new EmptyStatement.full(map(node.semicolon)); |
- ExportDirective visitExportDirective(ExportDirective node) { |
- ExportDirective copy = new ExportDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.uri), clone5(node.combinators), map(node.semicolon)); |
- copy.element = node.element; |
- return copy; |
- } |
- ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody.full(map(node.functionDefinition), clone4(node.expression), map(node.semicolon)); |
- ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement.full(clone4(node.expression), map(node.semicolon)); |
- ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause.full(map(node.keyword), clone4(node.superclass)); |
- FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.staticKeyword), clone4(node.fields), map(node.semicolon)); |
- FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.type), map(node.thisToken), map(node.period), clone4(node.identifier), clone4(node.parameters)); |
- ForEachStatement visitForEachStatement(ForEachStatement node) { |
- DeclaredIdentifier loopVariable = node.loopVariable; |
- if (loopVariable == null) { |
- return new ForEachStatement.con2_full(map(node.forKeyword), map(node.leftParenthesis), clone4(node.identifier), map(node.inKeyword), clone4(node.iterator), map(node.rightParenthesis), clone4(node.body)); |
- } |
- return new ForEachStatement.con1_full(map(node.forKeyword), map(node.leftParenthesis), clone4(loopVariable), map(node.inKeyword), clone4(node.iterator), map(node.rightParenthesis), clone4(node.body)); |
- } |
- FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList.full(map(node.leftParenthesis), clone5(node.parameters), map(node.leftDelimiter), map(node.rightDelimiter), map(node.rightParenthesis)); |
- ForStatement visitForStatement(ForStatement node) => new ForStatement.full(map(node.forKeyword), map(node.leftParenthesis), clone4(node.variables), clone4(node.initialization), map(node.leftSeparator), clone4(node.condition), map(node.rightSeparator), clone5(node.updaters), map(node.rightParenthesis), clone4(node.body)); |
- FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.externalKeyword), clone4(node.returnType), map(node.propertyKeyword), clone4(node.name), clone4(node.functionExpression)); |
- FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement.full(clone4(node.functionDeclaration)); |
- FunctionExpression visitFunctionExpression(FunctionExpression node) { |
- FunctionExpression copy = new FunctionExpression.full(clone4(node.parameters), clone4(node.body)); |
- copy.element = node.element; |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- FunctionExpressionInvocation visitFunctionExpressionInvocation(FunctionExpressionInvocation node) { |
- FunctionExpressionInvocation copy = new FunctionExpressionInvocation.full(clone4(node.function), clone4(node.argumentList)); |
- copy.propagatedElement = node.propagatedElement; |
- copy.propagatedType = node.propagatedType; |
- copy.staticElement = node.staticElement; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.returnType), clone4(node.name), clone4(node.typeParameters), clone4(node.parameters), map(node.semicolon)); |
- FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter.full(clone4(node.documentationComment), clone5(node.metadata), clone4(node.returnType), clone4(node.identifier), clone4(node.parameters)); |
- HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator.full(map(node.keyword), clone5(node.hiddenNames)); |
- IfStatement visitIfStatement(IfStatement node) => new IfStatement.full(map(node.ifKeyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), clone4(node.thenStatement), map(node.elseKeyword), clone4(node.elseStatement)); |
- ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause.full(map(node.keyword), clone5(node.interfaces)); |
- ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.uri), map(node.asToken), clone4(node.prefix), clone5(node.combinators), map(node.semicolon)); |
- IndexExpression visitIndexExpression(IndexExpression node) { |
- Token period = map(node.period); |
- IndexExpression copy; |
- if (period == null) { |
- copy = new IndexExpression.forTarget_full(clone4(node.target), map(node.leftBracket), clone4(node.index), map(node.rightBracket)); |
- } else { |
- copy = new IndexExpression.forCascade_full(period, map(node.leftBracket), clone4(node.index), map(node.rightBracket)); |
- } |
- copy.auxiliaryElements = node.auxiliaryElements; |
- copy.propagatedElement = node.propagatedElement; |
- copy.propagatedType = node.propagatedType; |
- copy.staticElement = node.staticElement; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- InstanceCreationExpression visitInstanceCreationExpression(InstanceCreationExpression node) { |
- InstanceCreationExpression copy = new InstanceCreationExpression.full(map(node.keyword), clone4(node.constructorName), clone4(node.argumentList)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticElement = node.staticElement; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- IntegerLiteral visitIntegerLiteral(IntegerLiteral node) { |
- IntegerLiteral copy = new IntegerLiteral.full(map(node.literal), node.value); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression.full(map(node.leftBracket), clone4(node.expression), map(node.rightBracket)); |
- InterpolationString visitInterpolationString(InterpolationString node) => new InterpolationString.full(map(node.contents), node.value); |
- IsExpression visitIsExpression(IsExpression node) { |
- IsExpression copy = new IsExpression.full(clone4(node.expression), map(node.isOperator), map(node.notOperator), clone4(node.type)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- Label visitLabel(Label node) => new Label.full(clone4(node.label), map(node.colon)); |
- LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement.full(clone5(node.labels), clone4(node.statement)); |
- LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.libraryToken), clone4(node.name), map(node.semicolon)); |
- LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) { |
- LibraryIdentifier copy = new LibraryIdentifier.full(clone5(node.components)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- ListLiteral visitListLiteral(ListLiteral node) { |
- ListLiteral copy = new ListLiteral.full(map(node.constKeyword), clone4(node.typeArguments), map(node.leftBracket), clone5(node.elements), map(node.rightBracket)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- MapLiteral visitMapLiteral(MapLiteral node) { |
- MapLiteral copy = new MapLiteral.full(map(node.constKeyword), clone4(node.typeArguments), map(node.leftBracket), clone5(node.entries), map(node.rightBracket)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry.full(clone4(node.key), map(node.separator), clone4(node.value)); |
- MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.externalKeyword), map(node.modifierKeyword), clone4(node.returnType), map(node.propertyKeyword), map(node.operatorKeyword), clone4(node.name), clone4(node.parameters), clone4(node.body)); |
- MethodInvocation visitMethodInvocation(MethodInvocation node) { |
- MethodInvocation copy = new MethodInvocation.full(clone4(node.target), map(node.period), clone4(node.methodName), clone4(node.argumentList)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- NamedExpression visitNamedExpression(NamedExpression node) { |
- NamedExpression copy = new NamedExpression.full(clone4(node.name), clone4(node.expression)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- ASTNode visitNativeClause(NativeClause node) => new NativeClause.full(map(node.keyword), clone4(node.name)); |
- NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody.full(map(node.nativeToken), clone4(node.stringLiteral), map(node.semicolon)); |
- NullLiteral visitNullLiteral(NullLiteral node) { |
- NullLiteral copy = new NullLiteral.full(map(node.literal)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- ParenthesizedExpression visitParenthesizedExpression(ParenthesizedExpression node) { |
- ParenthesizedExpression copy = new ParenthesizedExpression.full(map(node.leftParenthesis), clone4(node.expression), map(node.rightParenthesis)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- PartDirective visitPartDirective(PartDirective node) { |
- PartDirective copy = new PartDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.partToken), clone4(node.uri), map(node.semicolon)); |
- copy.element = node.element; |
- return copy; |
- } |
- PartOfDirective visitPartOfDirective(PartOfDirective node) { |
- PartOfDirective copy = new PartOfDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.partToken), map(node.ofToken), clone4(node.libraryName), map(node.semicolon)); |
- copy.element = node.element; |
- return copy; |
- } |
- PostfixExpression visitPostfixExpression(PostfixExpression node) { |
- PostfixExpression copy = new PostfixExpression.full(clone4(node.operand), map(node.operator)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) { |
- PrefixedIdentifier copy = new PrefixedIdentifier.full(clone4(node.prefix), map(node.period), clone4(node.identifier)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- PrefixExpression visitPrefixExpression(PrefixExpression node) { |
- PrefixExpression copy = new PrefixExpression.full(map(node.operator), clone4(node.operand)); |
- copy.propagatedElement = node.propagatedElement; |
- copy.propagatedType = node.propagatedType; |
- copy.staticElement = node.staticElement; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- PropertyAccess visitPropertyAccess(PropertyAccess node) { |
- PropertyAccess copy = new PropertyAccess.full(clone4(node.target), map(node.operator), clone4(node.propertyName)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- RedirectingConstructorInvocation visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) { |
- RedirectingConstructorInvocation copy = new RedirectingConstructorInvocation.full(map(node.keyword), map(node.period), clone4(node.constructorName), clone4(node.argumentList)); |
- copy.staticElement = node.staticElement; |
- return copy; |
- } |
- RethrowExpression visitRethrowExpression(RethrowExpression node) { |
- RethrowExpression copy = new RethrowExpression.full(map(node.keyword)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement.full(map(node.keyword), clone4(node.expression), map(node.semicolon)); |
- ScriptTag visitScriptTag(ScriptTag node) => new ScriptTag.full(map(node.scriptTag)); |
- ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator.full(map(node.keyword), clone5(node.shownNames)); |
- SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.type), clone4(node.identifier)); |
- SimpleIdentifier visitSimpleIdentifier(SimpleIdentifier node) { |
- SimpleIdentifier copy = new SimpleIdentifier.full(map(node.token)); |
- copy.auxiliaryElements = node.auxiliaryElements; |
- copy.propagatedElement = node.propagatedElement; |
- copy.propagatedType = node.propagatedType; |
- copy.staticElement = node.staticElement; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- SimpleStringLiteral visitSimpleStringLiteral(SimpleStringLiteral node) { |
- SimpleStringLiteral copy = new SimpleStringLiteral.full(map(node.literal), node.value); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- StringInterpolation visitStringInterpolation(StringInterpolation node) { |
- StringInterpolation copy = new StringInterpolation.full(clone5(node.elements)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- SuperConstructorInvocation visitSuperConstructorInvocation(SuperConstructorInvocation node) { |
- SuperConstructorInvocation copy = new SuperConstructorInvocation.full(map(node.keyword), map(node.period), clone4(node.constructorName), clone4(node.argumentList)); |
- copy.staticElement = node.staticElement; |
- return copy; |
- } |
- SuperExpression visitSuperExpression(SuperExpression node) { |
- SuperExpression copy = new SuperExpression.full(map(node.keyword)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase.full(clone5(node.labels), map(node.keyword), clone4(node.expression), map(node.colon), clone5(node.statements)); |
- SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault.full(clone5(node.labels), map(node.keyword), map(node.colon), clone5(node.statements)); |
- SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement.full(map(node.keyword), map(node.leftParenthesis), clone4(node.expression), map(node.rightParenthesis), map(node.leftBracket), clone5(node.members), map(node.rightBracket)); |
- ASTNode visitSymbolLiteral(SymbolLiteral node) { |
- SymbolLiteral copy = new SymbolLiteral.full(map(node.poundSign), map2(node.components)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- ThisExpression visitThisExpression(ThisExpression node) { |
- ThisExpression copy = new ThisExpression.full(map(node.keyword)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- ThrowExpression visitThrowExpression(ThrowExpression node) { |
- ThrowExpression copy = new ThrowExpression.full(map(node.keyword), clone4(node.expression)); |
- copy.propagatedType = node.propagatedType; |
- copy.staticType = node.staticType; |
- return copy; |
- } |
- TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), clone4(node.variables), map(node.semicolon)); |
- TryStatement visitTryStatement(TryStatement node) => new TryStatement.full(map(node.tryKeyword), clone4(node.body), clone5(node.catchClauses), map(node.finallyKeyword), clone4(node.finallyBlock)); |
- TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList.full(map(node.leftBracket), clone5(node.arguments), map(node.rightBracket)); |
- TypeName visitTypeName(TypeName node) { |
- TypeName copy = new TypeName.full(clone4(node.name), clone4(node.typeArguments)); |
- copy.type = node.type; |
- return copy; |
- } |
- TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter.full(clone4(node.documentationComment), clone5(node.metadata), clone4(node.name), map(node.keyword), clone4(node.bound)); |
- TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList.full(map(node.leftBracket), clone5(node.typeParameters), map(node.rightBracket)); |
- VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration.full(null, clone5(node.metadata), clone4(node.name), map(node.equals), clone4(node.initializer)); |
- VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList.full(null, clone5(node.metadata), map(node.keyword), clone4(node.type), clone5(node.variables)); |
- VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement.full(clone4(node.variables), map(node.semicolon)); |
- WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement.full(map(node.keyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), clone4(node.body)); |
- WithClause visitWithClause(WithClause node) => new WithClause.full(map(node.withKeyword), clone5(node.mixinTypes)); |
- ASTNode clone4(ASTNode node) { |
- if (node == null) { |
- return null; |
- } |
- if (identical(node, _oldNode)) { |
- return _newNode as ASTNode; |
- } |
- return node.accept(this) as ASTNode; |
- } |
- List clone5(NodeList nodes) { |
- List clonedNodes = new List(); |
- for (ASTNode node in nodes) { |
- clonedNodes.add(clone4(node)); |
- } |
- return clonedNodes; |
- } |
- Token map(Token oldToken) { |
- if (oldToken == null) { |
- return null; |
- } |
- return _tokenMap.get(oldToken); |
- } |
- List<Token> map2(List<Token> oldTokens) { |
- List<Token> newTokens = new List<Token>(oldTokens.length); |
- for (int index = 0; index < newTokens.length; index++) { |
- newTokens[index] = map(oldTokens[index]); |
- } |
- return newTokens; |
- } |
-} |
-/** |
- * Traverse the AST from initial child node to successive parents, building a collection of local |
- * variable and parameter names visible to the initial child node. In case of name shadowing, the |
- * first name seen is the most specific one so names are not redefined. |
- * |
- * Completion test code coverage is 95%. The two basic blocks that are not executed cannot be |
- * executed. They are included for future reference. |
- * |
- * @coverage com.google.dart.engine.services.completion |
- */ |
-class ScopedNameFinder extends GeneralizingASTVisitor<Object> { |
- Declaration declaration; |
- ASTNode _immediateChild; |
- final Map<String, SimpleIdentifier> locals = new Map<String, SimpleIdentifier>(); |
- int _position = 0; |
- bool _referenceIsWithinLocalFunction = false; |
- ScopedNameFinder(int position) { |
- this._position = position; |
- } |
- Object visitBlock(Block node) { |
- checkStatements(node.statements); |
- return super.visitBlock(node); |
- } |
- Object visitCatchClause(CatchClause node) { |
- addToScope(node.exceptionParameter); |
- addToScope(node.stackTraceParameter); |
- return super.visitCatchClause(node); |
- } |
- Object visitConstructorDeclaration(ConstructorDeclaration node) { |
- if (_immediateChild != node.parameters) { |
- addParameters(node.parameters.parameters); |
- } |
- declaration = node; |
- return null; |
- } |
- Object visitFieldDeclaration(FieldDeclaration node) { |
- declaration = node; |
- return null; |
- } |
- Object visitForEachStatement(ForEachStatement node) { |
- DeclaredIdentifier loopVariable = node.loopVariable; |
- if (loopVariable != null) { |
- addToScope(loopVariable.identifier); |
- } |
- return super.visitForEachStatement(node); |
- } |
- Object visitForStatement(ForStatement node) { |
- if (_immediateChild != node.variables && node.variables != null) { |
- addVariables(node.variables.variables); |
- } |
- return super.visitForStatement(node); |
- } |
- Object visitFunctionDeclaration(FunctionDeclaration node) { |
- if (node.parent is! FunctionDeclarationStatement) { |
- declaration = node; |
- return null; |
- } |
- return super.visitFunctionDeclaration(node); |
- } |
- Object visitFunctionDeclarationStatement(FunctionDeclarationStatement node) { |
- _referenceIsWithinLocalFunction = true; |
- return super.visitFunctionDeclarationStatement(node); |
- } |
- Object visitFunctionExpression(FunctionExpression node) { |
- if (node.parameters != null && _immediateChild != node.parameters) { |
- addParameters(node.parameters.parameters); |
- } |
- return super.visitFunctionExpression(node); |
- } |
- Object visitMethodDeclaration(MethodDeclaration node) { |
- declaration = node; |
- if (node.parameters == null) { |
- return null; |
- } |
- if (_immediateChild != node.parameters) { |
- addParameters(node.parameters.parameters); |
- } |
- return null; |
- } |
- Object visitNode(ASTNode node) { |
- _immediateChild = node; |
- ASTNode parent = node.parent; |
- if (parent != null) { |
- parent.accept(this); |
- } |
- return null; |
- } |
- Object visitSwitchMember(SwitchMember node) { |
- checkStatements(node.statements); |
- return super.visitSwitchMember(node); |
- } |
- Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) { |
- declaration = node; |
- return null; |
- } |
- Object visitTypeAlias(TypeAlias node) { |
- declaration = node; |
- return null; |
- } |
- void addParameters(NodeList<FormalParameter> vars) { |
- for (FormalParameter var2 in vars) { |
- addToScope(var2.identifier); |
- } |
- } |
- void addToScope(SimpleIdentifier identifier) { |
- if (identifier != null && isInRange(identifier)) { |
- String name = identifier.name; |
- if (!locals.containsKey(name)) { |
- locals[name] = identifier; |
- } |
- } |
- } |
- void addVariables(NodeList<VariableDeclaration> vars) { |
- for (VariableDeclaration var2 in vars) { |
- addToScope(var2.name); |
- } |
- } |
- |
- /** |
- * Some statements define names that are visible downstream. There aren't many of these. |
- * |
- * @param statements the list of statements to check for name definitions |
- */ |
- void checkStatements(List<Statement> statements) { |
- for (Statement stmt in statements) { |
- if (identical(stmt, _immediateChild)) { |
- return; |
- } |
- if (stmt is VariableDeclarationStatement) { |
- addVariables(((stmt as VariableDeclarationStatement)).variables.variables); |
- } else if (stmt is FunctionDeclarationStatement && !_referenceIsWithinLocalFunction) { |
- addToScope(((stmt as FunctionDeclarationStatement)).functionDeclaration.name); |
- } |
- } |
- } |
- bool isInRange(ASTNode node) { |
- if (_position < 0) { |
- return true; |
- } |
- return node.end < _position; |
- } |
-} |
-/** |
- * Instances of the class {@code NodeList} represent a list of AST nodes that have a common parent. |
- */ |
-class NodeList<E extends ASTNode> extends Object with ListMixin<E> { |
- /** |
- * Create an empty list with the given owner. This is a convenience method that allows the |
- * compiler to determine the correct value of the type argument [E] without needing to |
- * explicitly specify it. |
- * |
- * @param owner the node that is the parent of each of the elements in the list |
- * @return the list that was created |
- */ |
- static NodeList create(ASTNode owner) => new NodeList(owner); |
- |
- /** |
- * The node that is the parent of each of the elements in the list. |
- */ |
- ASTNode owner; |
- |
- /** |
- * The elements contained in the list. |
- */ |
- List<E> _elements = <E> []; |
- |
- /** |
- * Initialize a newly created list of nodes to be empty. |
- * |
- * @param owner the node that is the parent of each of the elements in the list |
- */ |
- NodeList(this.owner); |
- |
- /** |
- * Use the given visitor to visit each of the nodes in this list. |
- * |
- * @param visitor the visitor to be used to visit the elements of this list |
- */ |
- accept(ASTVisitor visitor) { |
- for (E element in _elements) { |
- element.accept(visitor); |
- } |
- } |
- void add(E node) { |
- insert(length, node); |
- } |
- void insert(int index, E node) { |
- int length = _elements.length; |
- if (index < 0 || index > length) { |
- throw new RangeError("Index: ${index}, Size: ${_elements.length}"); |
- } |
- owner.becomeParentOf(node); |
- if (length == 0) { |
- _elements = <E> [node]; |
- } else { |
- List<E> newElements = new List<E>(length + 1); |
- JavaSystem.arraycopy(_elements, 0, newElements, 0, index); |
- newElements[index] = node; |
- JavaSystem.arraycopy(_elements, index, newElements, index + 1, length - index); |
- _elements = newElements; |
- } |
- } |
- bool addAll(Iterable<E> nodes) { |
- if (nodes != null && !nodes.isEmpty) { |
- int oldCount = _elements.length; |
- int newCount = nodes.length; |
- List<E> newElements = new List<E>(oldCount + newCount); |
- JavaSystem.arraycopy(_elements, 0, newElements, 0, oldCount); |
- int index = oldCount; |
- for (E node in nodes) { |
- owner.becomeParentOf(node); |
- newElements[index++] = node; |
- } |
- _elements = newElements; |
- return true; |
- } |
- return false; |
- } |
- E operator[](int index) { |
- if (index < 0 || index >= _elements.length) { |
- throw new RangeError("Index: ${index}, Size: ${_elements.length}"); |
- } |
- return _elements[index] as E; |
- } |
- |
- /** |
- * Return the first token included in this node's source range. |
- * |
- * @return the first token included in this node's source range |
- */ |
- Token get beginToken { |
- if (_elements.length == 0) { |
- return null; |
- } |
- return _elements[0].beginToken; |
- } |
- |
- /** |
- * Return the last token included in this node list's source range. |
- * |
- * @return the last token included in this node list's source range |
- */ |
- Token get endToken { |
- if (_elements.length == 0) { |
- return null; |
- } |
- return _elements[_elements.length - 1].endToken; |
- } |
- E removeAt(int index) { |
- if (index < 0 || index >= _elements.length) { |
- throw new RangeError("Index: ${index}, Size: ${_elements.length}"); |
- } |
- E removedNode = _elements[index] as E; |
- int length = _elements.length; |
- if (length == 1) { |
- _elements = ASTNode.EMPTY_ARRAY; |
- return removedNode; |
- } |
- List<E> newElements = new List<E>(length - 1); |
- JavaSystem.arraycopy(_elements, 0, newElements, 0, index); |
- JavaSystem.arraycopy(_elements, index + 1, newElements, index, length - index - 1); |
- _elements = newElements; |
- return removedNode; |
- } |
- void operator[]=(int index, E node) { |
- if (index < 0 || index >= _elements.length) { |
- throw new RangeError("Index: ${index}, Size: ${_elements.length}"); |
- } |
- _elements[index] as E; |
- owner.becomeParentOf(node); |
- _elements[index] = node; |
- } |
- int get length => _elements.length; |
-} |