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

Unified Diff: pkg/analyzer/lib/src/generated/ast.dart

Issue 1406253004: Lexical support for configurable imports (DEP 40) (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/lib/src/generated/ast.dart
diff --git a/pkg/analyzer/lib/src/generated/ast.dart b/pkg/analyzer/lib/src/generated/ast.dart
index 03cb8f167b6db4b03fff9567fed946525d78dc9d..813ed9a92765f5297b55df62eeea7f503bf5cdc6 100644
--- a/pkg/analyzer/lib/src/generated/ast.dart
+++ b/pkg/analyzer/lib/src/generated/ast.dart
@@ -1163,6 +1163,16 @@ class AstCloner implements AstVisitor<AstNode> {
cloneNode(node.elseExpression));
@override
+ Configuration visitConfiguration(Configuration node) => new Configuration(
+ cloneToken(node.ifKeyword),
+ cloneToken(node.leftParenthesis),
+ cloneNode(node.name),
+ cloneToken(node.equalToken),
+ cloneNode(node.value),
+ cloneToken(node.rightParenthesis),
+ cloneNode(node.libraryUri));
+
+ @override
ConstructorDeclaration visitConstructorDeclaration(
ConstructorDeclaration node) =>
new ConstructorDeclaration(
@@ -1226,6 +1236,10 @@ class AstCloner implements AstVisitor<AstNode> {
cloneToken(node.semicolon));
@override
+ DottedName visitDottedName(DottedName node) =>
+ new DottedName(cloneNodeList(node.components));
+
+ @override
DoubleLiteral visitDoubleLiteral(DoubleLiteral node) =>
new DoubleLiteral(cloneToken(node.literal), node.value);
@@ -1260,6 +1274,7 @@ class AstCloner implements AstVisitor<AstNode> {
cloneNodeList(node.metadata),
cloneToken(node.keyword),
cloneNode(node.uri),
+ cloneNodeList(node.configurations),
cloneNodeList(node.combinators),
cloneToken(node.semicolon));
directive.source = node.source;
@@ -1430,6 +1445,7 @@ class AstCloner implements AstVisitor<AstNode> {
cloneNodeList(node.metadata),
cloneToken(node.keyword),
cloneNode(node.uri),
+ cloneNodeList(node.configurations),
cloneToken(node.deferredKeyword),
cloneToken(node.asKeyword),
cloneNode(node.prefix),
@@ -2039,6 +2055,18 @@ class AstComparator implements AstVisitor<bool> {
}
@override
+ bool visitConfiguration(Configuration node) {
+ Configuration other = _other as Configuration;
+ return isEqualTokens(node.ifKeyword, other.ifKeyword) &&
+ isEqualTokens(node.leftParenthesis, other.leftParenthesis) &&
+ isEqualNodes(node.name, other.name) &&
+ isEqualTokens(node.equalToken, other.equalToken) &&
+ isEqualNodes(node.value, other.value) &&
+ isEqualTokens(node.rightParenthesis, other.rightParenthesis) &&
+ isEqualNodes(node.libraryUri, other.libraryUri);
+ }
+
+ @override
bool visitConstructorDeclaration(ConstructorDeclaration node) {
ConstructorDeclaration other = _other as ConstructorDeclaration;
return isEqualNodes(
@@ -2116,6 +2144,12 @@ class AstComparator implements AstVisitor<bool> {
}
@override
+ bool visitDottedName(DottedName node) {
+ DottedName other = _other as DottedName;
+ return _isEqualNodeLists(node.components, other.components);
+ }
+
+ @override
bool visitDoubleLiteral(DoubleLiteral node) {
DoubleLiteral other = _other as DoubleLiteral;
return isEqualTokens(node.literal, other.literal) &&
@@ -3141,6 +3175,8 @@ abstract class AstVisitor<R> {
R visitConditionalExpression(ConditionalExpression node);
+ R visitConfiguration(Configuration node);
+
R visitConstructorDeclaration(ConstructorDeclaration node);
R visitConstructorFieldInitializer(ConstructorFieldInitializer node);
@@ -3155,6 +3191,8 @@ abstract class AstVisitor<R> {
R visitDoStatement(DoStatement node);
+ R visitDottedName(DottedName node);
+
R visitDoubleLiteral(DoubleLiteral node);
R visitEmptyFunctionBody(EmptyFunctionBody node);
@@ -5115,6 +5153,85 @@ class ConditionalExpression extends Expression {
}
}
+/**
+ * A configuration in either an import or export directive.
+ *
+ * configuration ::=
+ * 'if' '(' test ')' uri
+ *
+ * test ::=
+ * dottedName ('==' stringLiteral)?
+ *
+ * dottedName ::=
+ * identifier ('.' identifier)*
+ */
+class Configuration extends AstNode {
+ Token ifKeyword;
+ Token leftParenthesis;
+ DottedName _name;
+ Token equalToken;
+ StringLiteral _value;
+ Token rightParenthesis;
+ StringLiteral _libraryUri;
+
+ Configuration(
+ this.ifKeyword,
+ this.leftParenthesis,
+ DottedName name,
+ this.equalToken,
+ StringLiteral value,
+ this.rightParenthesis,
+ StringLiteral libraryUri) {
+ _name = _becomeParentOf(name);
+ _value = _becomeParentOf(value);
+ _libraryUri = _becomeParentOf(libraryUri);
+ }
+
+ @override
+ Token get beginToken => ifKeyword;
+
+ @override
+ Iterable get childEntities => new ChildEntities()
+ ..add(ifKeyword)
+ ..add(leftParenthesis)
+ ..add(_name)
+ ..add(equalToken)
+ ..add(_value)
+ ..add(rightParenthesis)
+ ..add(_libraryUri);
+
+ @override
+ Token get endToken => _libraryUri.endToken;
+
+ StringLiteral get libraryUri => _libraryUri;
+
+ void set libraryUri(StringLiteral libraryUri) {
+ _libraryUri = _becomeParentOf(libraryUri);
+ }
+
+ DottedName get name => _name;
+
+ void set name(DottedName name) {
+ _name = _becomeParentOf(name);
+ }
+
+ StringLiteral get value => _value;
+
+ void set value(StringLiteral value) {
+ _value = _becomeParentOf(value);
+ }
+
+ @override
+ accept(AstVisitor visitor) => visitor.visitConfiguration(this);
+
+ @override
+ void visitChildren(AstVisitor visitor) {
+ _safelyVisitChild(_name, visitor);
+ _safelyVisitChild(_value, visitor);
+ _safelyVisitChild(_libraryUri, visitor);
+ }
+}
+
/// Instances of the class [ConstantEvaluator] evaluate constant expressions to
/// produce their compile-time value.
///
@@ -6449,6 +6566,49 @@ class DoStatement extends Statement {
}
/**
+ * A dotted name, usedd in a configuration within an import or export directive.
+ *
+ * > dottedName ::=
+ * > [SimpleIdentifier] ('.' [SimpleIdentifier])*
+ */
+class DottedName extends AstNode {
Paul Berry 2015/10/21 17:10:47 This looks almost identical to the definition of L
Brian Wilkerson 2015/10/21 20:05:23 I like the idea of removing LibraryIdentifier. I'l
+ /**
+ * The components of the identifier.
+ */
+ NodeList<SimpleIdentifier> _components;
+
+ /**
+ * Initialize a newly created prefixed identifier.
Paul Berry 2015/10/21 17:10:47 s/prefixed identifier/dotted name/
Brian Wilkerson 2015/10/21 20:05:23 Done
+ */
+ DottedName(List<SimpleIdentifier> components) {
+ _components = new NodeList<SimpleIdentifier>(this, components);
+ }
+
+ @override
+ Token get beginToken => _components.beginToken;
+
+ @override
+ // TODO(paulberry): add "." tokens.
+ Iterable get childEntities => new ChildEntities()..addAll(_components);
+
+ /**
+ * Return the components of the identifier.
+ */
+ NodeList<SimpleIdentifier> get components => _components;
+
+ @override
+ Token get endToken => _components.endToken;
+
+ @override
+ accept(AstVisitor visitor) => visitor.visitDottedName(this);
+
+ @override
+ void visitChildren(AstVisitor visitor) {
+ _components.accept(visitor);
+ }
+}
+
+/**
* A floating point literal expression.
*
* > doubleLiteral ::=
@@ -6867,9 +7027,16 @@ class ExportDirective extends NamespaceDirective {
* corresponding attribute. The list of [combinators] can be `null` if there
* are no combinators.
*/
- ExportDirective(Comment comment, List<Annotation> metadata, Token keyword,
- StringLiteral libraryUri, List<Combinator> combinators, Token semicolon)
- : super(comment, metadata, keyword, libraryUri, combinators, semicolon);
+ ExportDirective(
+ Comment comment,
+ List<Annotation> metadata,
+ Token keyword,
+ StringLiteral libraryUri,
+ List<Configuration> configurations,
+ List<Combinator> combinators,
+ Token semicolon)
+ : super(comment, metadata, keyword, libraryUri, configurations,
+ combinators, semicolon);
@override
Iterable get childEntities => super._childEntities
@@ -8878,6 +9045,9 @@ class GeneralizingAstVisitor<R> implements AstVisitor<R> {
visitExpression(node);
@override
+ R visitConfiguration(Configuration node) => visitNode(node);
+
+ @override
R visitConstructorDeclaration(ConstructorDeclaration node) =>
visitClassMember(node);
@@ -8908,6 +9078,9 @@ class GeneralizingAstVisitor<R> implements AstVisitor<R> {
R visitDoStatement(DoStatement node) => visitStatement(node);
@override
+ R visitDottedName(DottedName node) => visitNode(node);
+
+ @override
R visitDoubleLiteral(DoubleLiteral node) => visitLiteral(node);
@override
@@ -9646,12 +9819,14 @@ class ImportDirective extends NamespaceDirective {
List<Annotation> metadata,
Token keyword,
StringLiteral libraryUri,
+ List<Configuration> configurations,
this.deferredKeyword,
this.asKeyword,
SimpleIdentifier prefix,
List<Combinator> combinators,
Token semicolon)
- : super(comment, metadata, keyword, libraryUri, combinators, semicolon) {
+ : super(comment, metadata, keyword, libraryUri, configurations,
+ combinators, semicolon) {
_prefix = _becomeParentOf(prefix);
}
@@ -9948,6 +10123,16 @@ class IncrementalAstCloner implements AstVisitor<AstNode> {
}
@override
+ Configuration visitConfiguration(Configuration node) => new Configuration(
+ _mapToken(node.ifKeyword),
+ _mapToken(node.leftParenthesis),
+ _cloneNode(node.name),
+ _mapToken(node.equalToken),
+ _cloneNode(node.value),
+ _mapToken(node.rightParenthesis),
+ _cloneNode(node.libraryUri));
+
+ @override
ConstructorDeclaration visitConstructorDeclaration(
ConstructorDeclaration node) {
ConstructorDeclaration copy = new ConstructorDeclaration(
@@ -10017,6 +10202,10 @@ class IncrementalAstCloner implements AstVisitor<AstNode> {
_mapToken(node.semicolon));
@override
+ DottedName visitDottedName(DottedName node) =>
+ new DottedName(_cloneNodeList(node.components));
+
+ @override
DoubleLiteral visitDoubleLiteral(DoubleLiteral node) {
DoubleLiteral copy = new DoubleLiteral(_mapToken(node.literal), node.value);
copy.propagatedType = node.propagatedType;
@@ -10054,6 +10243,7 @@ class IncrementalAstCloner implements AstVisitor<AstNode> {
_cloneNodeList(node.metadata),
_mapToken(node.keyword),
_cloneNode(node.uri),
+ _cloneNodeList(node.configurations),
_cloneNodeList(node.combinators),
_mapToken(node.semicolon));
copy.element = node.element;
@@ -10238,6 +10428,7 @@ class IncrementalAstCloner implements AstVisitor<AstNode> {
_cloneNodeList(node.metadata),
_mapToken(node.keyword),
_cloneNode(node.uri),
+ _cloneNodeList(node.configurations),
_mapToken(node.deferredKeyword),
_mapToken(node.asKeyword),
_cloneNode(node.prefix),
@@ -12511,6 +12702,12 @@ abstract class NamespaceDirective extends UriBasedDirective {
Token keyword;
/**
+ * The configurations used to control which library will actually be loaded at
+ * run-time.
+ */
+ NodeList<Configuration> _configurations;
+
+ /**
* The combinators used to control which names are imported or exported.
*/
NodeList<Combinator> _combinators;
@@ -12526,9 +12723,16 @@ abstract class NamespaceDirective extends UriBasedDirective {
* corresponding attribute. The list of [combinators] can be `null` if there
* are no combinators.
*/
- NamespaceDirective(Comment comment, List<Annotation> metadata, this.keyword,
- StringLiteral libraryUri, List<Combinator> combinators, this.semicolon)
+ NamespaceDirective(
+ Comment comment,
+ List<Annotation> metadata,
+ this.keyword,
+ StringLiteral libraryUri,
+ List<Configuration> configurations,
+ List<Combinator> combinators,
+ this.semicolon)
: super(comment, metadata, libraryUri) {
+ _configurations = new NodeList<Configuration>(this, configurations);
_combinators = new NodeList<Combinator>(this, combinators);
}
@@ -12537,6 +12741,12 @@ abstract class NamespaceDirective extends UriBasedDirective {
*/
NodeList<Combinator> get combinators => _combinators;
+ /**
+ * Return the configurations used to control which library will actually be
+ * loaded at run-time.
+ */
+ NodeList<Configuration> get configurations => _configurations;
+
@override
Token get endToken => semicolon;
@@ -13214,6 +13424,21 @@ class NodeReplacer implements AstVisitor<bool> {
}
@override
+ bool visitConfiguration(Configuration node) {
+ if (identical(node.name, _oldNode)) {
+ node.name = _newNode as DottedName;
+ return true;
+ } else if (identical(node.value, _oldNode)) {
+ node.value = _newNode as StringLiteral;
+ return true;
+ } else if (identical(node.libraryUri, _oldNode)) {
+ node.libraryUri = _newNode as StringLiteral;
+ return true;
+ }
+ return visitNode(node);
+ }
+
+ @override
bool visitConstructorDeclaration(ConstructorDeclaration node) {
if (identical(node.returnType, _oldNode)) {
node.returnType = _newNode as Identifier;
@@ -13306,6 +13531,14 @@ class NodeReplacer implements AstVisitor<bool> {
}
@override
+ bool visitDottedName(DottedName node) {
+ if (_replaceInList(node.components)) {
+ return true;
+ }
+ return visitNode(node);
+ }
+
+ @override
bool visitDoubleLiteral(DoubleLiteral node) => visitNode(node);
@override
@@ -15189,6 +15422,12 @@ class RecursiveAstVisitor<R> implements AstVisitor<R> {
}
@override
+ R visitConfiguration(Configuration node) {
+ node.visitChildren(this);
+ return null;
+ }
+
+ @override
R visitConstructorDeclaration(ConstructorDeclaration node) {
node.visitChildren(this);
return null;
@@ -15231,6 +15470,12 @@ class RecursiveAstVisitor<R> implements AstVisitor<R> {
}
@override
+ R visitDottedName(DottedName node) {
+ node.visitChildren(this);
+ return null;
+ }
+
+ @override
R visitDoubleLiteral(DoubleLiteral node) {
node.visitChildren(this);
return null;
@@ -16280,6 +16525,9 @@ class SimpleAstVisitor<R> implements AstVisitor<R> {
R visitConditionalExpression(ConditionalExpression node) => null;
@override
+ R visitConfiguration(Configuration node) => null;
+
+ @override
R visitConstructorDeclaration(ConstructorDeclaration node) => null;
@override
@@ -16301,6 +16549,9 @@ class SimpleAstVisitor<R> implements AstVisitor<R> {
R visitDoStatement(DoStatement node) => null;
@override
+ R visitDottedName(DottedName node) => null;
+
+ @override
R visitDoubleLiteral(DoubleLiteral node) => null;
@override
@@ -18191,6 +18442,16 @@ class ToSourceVisitor implements AstVisitor<Object> {
}
@override
+ Object visitConfiguration(Configuration node) {
+ _writer.print('if (');
+ _visitNode(node.name);
+ _visitNodeWithPrefix(" == ", node.value);
+ _writer.print(') ');
+ _visitNode(node.libraryUri);
+ return null;
+ }
+
+ @override
Object visitConstructorDeclaration(ConstructorDeclaration node) {
_visitNodeListWithSeparatorAndSuffix(node.metadata, " ", " ");
_visitTokenWithSuffix(node.externalKeyword, " ");
@@ -18260,6 +18521,12 @@ class ToSourceVisitor implements AstVisitor<Object> {
}
@override
+ Object visitDottedName(DottedName node) {
+ _visitNodeListWithSeparator(node.components, ".");
+ return null;
+ }
+
+ @override
Object visitDoubleLiteral(DoubleLiteral node) {
_writer.print(node.literal.lexeme);
return null;
@@ -19718,6 +19985,9 @@ class UnifyingAstVisitor<R> implements AstVisitor<R> {
R visitConditionalExpression(ConditionalExpression node) => visitNode(node);
@override
+ R visitConfiguration(Configuration node) => visitNode(node);
+
+ @override
R visitConstructorDeclaration(ConstructorDeclaration node) => visitNode(node);
@override
@@ -19740,6 +20010,9 @@ class UnifyingAstVisitor<R> implements AstVisitor<R> {
R visitDoStatement(DoStatement node) => visitNode(node);
@override
+ R visitDottedName(DottedName node) => visitNode(node);
+
+ @override
R visitDoubleLiteral(DoubleLiteral node) => visitNode(node);
@override
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/engine.dart » ('j') | pkg/analyzer/lib/src/generated/parser.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698