Skip to content
This repository was archived by the owner on Apr 8, 2025. It is now read-only.

Commit c6e69c6

Browse files
authored
Add async/await/sync/yield and toImport/ExportBuilder (#46)
* Various changes. * Update presubmit. * Add async, await, yield * . * . * Update CHANGELOG.md * Update pubspec.yaml
1 parent 165e9a7 commit c6e69c6

File tree

15 files changed

+309
-26
lines changed

15 files changed

+309
-26
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 1.0.0-alpha+9
2+
3+
- Add support for `async`, `sync`, `sync*` functions
4+
- Add support for expression `asAwait`, `asYield`, `asYieldStar`
5+
- Add `toExportBuilder` and `toImportBuilder` to types and references
6+
17
## 1.0.0-alpha+8
28

39
- Fix an import scoping bug in `return` statements and named constructor invocations.

lib/code_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export 'src/builders/method.dart'
2323
named,
2424
ConstructorBuilder,
2525
MethodBuilder,
26+
MethodModifier,
2627
ValidMethodMember;
2728
export 'src/builders/parameter.dart' show parameter, ParameterBuilder;
2829
export 'src/pretty_printer.dart' show prettyToSource;

lib/src/builders/class.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:analyzer/dart/ast/standard_ast_factory.dart';
77
import 'package:code_builder/dart/core.dart';
88
import 'package:code_builder/src/builders/annotation.dart';
99
import 'package:code_builder/src/builders/field.dart';
10+
import 'package:code_builder/src/builders/file.dart';
1011
import 'package:code_builder/src/builders/method.dart';
1112
import 'package:code_builder/src/builders/shared.dart';
1213
import 'package:code_builder/src/builders/type.dart';
@@ -254,6 +255,16 @@ class _ClassBuilderImpl extends Object
254255
void setExtends(TypeBuilder extend) {
255256
_extends = extend;
256257
}
258+
259+
@override
260+
ExportBuilder toExportBuilder() {
261+
throw new UnsupportedError('Not supported for ClassBuilder');
262+
}
263+
264+
@override
265+
ImportBuilder toImportBuilder({bool deferred: false, String prefix}) {
266+
throw new UnsupportedError('Not supported for ClassBuilder');
267+
}
257268
}
258269

259270
class _TypeNameWrapper implements ValidClassMember {

lib/src/builders/expression.dart

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ import 'package:code_builder/src/tokens.dart';
1919

2020
part 'expression/assert.dart';
2121
part 'expression/assign.dart';
22+
part 'expression/await.dart';
2223
part 'expression/cascade.dart';
2324
part 'expression/invocation.dart';
2425
part 'expression/negate.dart';
2526
part 'expression/operators.dart';
2627
part 'expression/return.dart';
28+
part 'expression/yield.dart';
2729

2830
final _false =
2931
astFactory.booleanLiteral(new KeywordToken(Keyword.FALSE, 0), true);
@@ -141,6 +143,9 @@ abstract class AbstractExpressionMixin implements ExpressionBuilder {
141143
}) =>
142144
new _AsAssign(this, variable, nullAware, target);
143145

146+
@override
147+
ExpressionBuilder asAwait() => new _AsAwait(this);
148+
144149
@override
145150
StatementBuilder asConst(String variable, [TypeBuilder type]) {
146151
return new _AsAssignNew(this, variable, type, $const);
@@ -165,6 +170,12 @@ abstract class AbstractExpressionMixin implements ExpressionBuilder {
165170
return new _AsAssignNew(this, variable, type, $var);
166171
}
167172

173+
@override
174+
StatementBuilder asYield() => new _AsYield(this, false);
175+
176+
@override
177+
StatementBuilder asYieldStar() => new _AsYield(this, true);
178+
168179
@override
169180
Statement buildStatement([Scope scope]) {
170181
return asStatement().buildStatement(scope);
@@ -273,8 +284,14 @@ abstract class ExpressionBuilder
273284
/// Returns as a [StatementBuilder] that assigns to an existing [variable].
274285
///
275286
/// If [target] is specified, determined to be `{target}.{variable}`.
276-
StatementBuilder asAssign(String variable,
277-
{ExpressionBuilder target, bool nullAware});
287+
StatementBuilder asAssign(
288+
String variable, {
289+
ExpressionBuilder target,
290+
bool nullAware,
291+
});
292+
293+
/// Returns as an expression `await`-ing this one.
294+
ExpressionBuilder asAwait() => new _AsAwait(this);
278295

279296
/// Returns as a [StatementBuilder] that assigns to a new `const` [variable].
280297
StatementBuilder asConst(String variable, [TypeBuilder type]);
@@ -300,6 +317,12 @@ abstract class ExpressionBuilder
300317
/// If [type] is supplied, the resulting statement is `{type} {variable} =`.
301318
StatementBuilder asVar(String variable, [TypeBuilder type]);
302319

320+
/// Returns as a [StatementBuilder] yielding this one.
321+
StatementBuilder asYield();
322+
323+
/// Returns as a [StatementBuilder] yielding this one.
324+
StatementBuilder asYieldStar();
325+
303326
/// Returns an [Expression] AST representing the builder.
304327
Expression buildExpression([Scope scope]);
305328

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
part of code_builder.src.builders.expression;
6+
7+
class _AsAwait extends AbstractExpressionMixin with TopLevelMixin {
8+
final ExpressionBuilder _expression;
9+
10+
_AsAwait(this._expression);
11+
12+
@override
13+
AstNode buildAst([Scope scope]) => buildExpression(scope);
14+
15+
@override
16+
Expression buildExpression([Scope scope]) {
17+
return new AwaitExpression(
18+
$await,
19+
_expression.buildExpression(scope),
20+
);
21+
}
22+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
part of code_builder.src.builders.expression;
6+
7+
class _AsYield extends TopLevelMixin implements StatementBuilder {
8+
final ExpressionBuilder _expression;
9+
final bool _isStar;
10+
11+
_AsYield(this._expression, this._isStar);
12+
13+
@override
14+
Statement buildAst([Scope scope]) => buildStatement(scope);
15+
16+
@override
17+
Statement buildStatement([Scope scope]) {
18+
return new YieldStatement(
19+
$yield,
20+
_isStar ? $star : null,
21+
_expression.buildExpression(scope),
22+
$semicolon,
23+
);
24+
}
25+
}

0 commit comments

Comments
 (0)