Skip to content
This repository was archived by the owner on Apr 8, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,45 @@
# Changelog

## 1.0.0-alpha+3

- BREAKING CHANGE: Added generics support to `TypeBuilder`:

`importFrom` becomes a _named_, not positional argument, and the named
argument `genericTypes` is added (`Iterable<TypeBuilder>`).

```dart
// List<String>
new TypeBuilder('List', genericTypes: [reference('String')])
```

- Added generic support to `ReferenceBuilder`:

```dart
// List<String>
reference('List').toTyped([reference('String')])
```

- Fixed a bug where `ReferenceBuilder.buildAst` was not implemented
- Added `and` and `or` methods to `ExpressionBuilder`:

```dart
// true || false
literal(true).or(literal(false));

// true && false
literal(true).and(literal(false));
```

- Added support for creating closures - `MethodBuilder.closure`:

```dart
// () => true
new MethodBuilder.closure(
returns: literal(true),
returnType: lib$core.bool,
)
```

## 1.0.0-alpha+2

- Added `returnVoid` to well, `return;`
Expand Down
8 changes: 7 additions & 1 deletion lib/code_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,11 @@ export 'src/builders/reference.dart'
show explicitThis, reference, ReferenceBuilder;
export 'src/builders/shared.dart' show AstBuilder, Scope;
export 'src/builders/statement.dart'
show ifThen, elseIf, elseThen, returnVoid, IfStatementBuilder, StatementBuilder;
show
ifThen,
elseIf,
elseThen,
returnVoid,
IfStatementBuilder,
StatementBuilder;
export 'src/builders/type.dart' show NewInstanceBuilder, TypeBuilder;
44 changes: 37 additions & 7 deletions lib/src/builders/expression.dart
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ Literal _literal(value) {
}

/// Implements much of [ExpressionBuilder].
abstract class AbstractExpressionMixin extends TopLevelMixin implements ExpressionBuilder {
abstract class AbstractExpressionMixin implements ExpressionBuilder {
@override
ExpressionBuilder operator *(ExpressionBuilder other) {
return new _AsBinaryExpression(
Expand Down Expand Up @@ -118,6 +118,15 @@ abstract class AbstractExpressionMixin extends TopLevelMixin implements Expressi
);
}

@override
ExpressionBuilder and(ExpressionBuilder other) {
return new _AsBinaryExpression(
this,
other,
$and,
);
}

@override
StatementBuilder asAssert() => new _AsAssert(this);

Expand Down Expand Up @@ -221,6 +230,15 @@ abstract class AbstractExpressionMixin extends TopLevelMixin implements Expressi
);
}

@override
ExpressionBuilder or(ExpressionBuilder other) {
return new _AsBinaryExpression(
this,
other,
$or,
);
}

@override
ExpressionBuilder parentheses() => new _ParenthesesExpression(this);

Expand All @@ -243,13 +261,17 @@ abstract class ExpressionBuilder
/// Returns as an [ExpressionBuilder] dividing by [other].
ExpressionBuilder operator /(ExpressionBuilder other);

/// Returns as an [ExpressionBuilder] `&&` [other].
ExpressionBuilder and(ExpressionBuilder other);

/// Return as a [StatementBuilder] that `assert`s this expression.
StatementBuilder asAssert();

/// Returns as a [StatementBuilder] that assigns to an existing [variable].
///
/// If [target] is specified, determined to be `{target}.{variable}`.
StatementBuilder asAssign(String variable, {ExpressionBuilder target, bool nullAware});
StatementBuilder asAssign(String variable,
{ExpressionBuilder target, bool nullAware});

/// Returns as a [StatementBuilder] that assigns to a new `const` [variable].
StatementBuilder asConst(String variable, [TypeBuilder type]);
Expand Down Expand Up @@ -311,6 +333,9 @@ abstract class ExpressionBuilder
/// Returns as an [ExpressionBuilder] comparing using `!=` against [other].
ExpressionBuilder notEquals(ExpressionBuilder other);

/// Returns as an [ExpressionBuilder] `||` [other].
ExpressionBuilder or(ExpressionBuilder other);

/// Returns as an [ExpressionBuilder] wrapped in parentheses.
ExpressionBuilder parentheses();

Expand Down Expand Up @@ -363,7 +388,8 @@ class _AsStatement extends TopLevelMixin implements StatementBuilder {
}
}

class _MemberExpression extends Object with AbstractExpressionMixin, TopLevelMixin {
class _MemberExpression extends Object
with AbstractExpressionMixin, TopLevelMixin {
final String _name;
final ExpressionBuilder _target;

Expand All @@ -382,7 +408,8 @@ class _MemberExpression extends Object with AbstractExpressionMixin, TopLevelMix
}
}

class _LiteralExpression extends Object with AbstractExpressionMixin, TopLevelMixin {
class _LiteralExpression extends Object
with AbstractExpressionMixin, TopLevelMixin {
final Literal _literal;

_LiteralExpression(this._literal);
Expand All @@ -394,7 +421,8 @@ class _LiteralExpression extends Object with AbstractExpressionMixin, TopLevelMi
Expression buildExpression([_]) => _literal;
}

class _ParenthesesExpression extends Object with AbstractExpressionMixin, TopLevelMixin {
class _ParenthesesExpression extends Object
with AbstractExpressionMixin, TopLevelMixin {
final ExpressionBuilder _expression;

_ParenthesesExpression(this._expression);
Expand Down Expand Up @@ -422,7 +450,8 @@ ExpressionBuilder _expressionify(v) {
throw new ArgumentError('Could not expressionify $v');
}

class _TypedListExpression extends Object with AbstractExpressionMixin, TopLevelMixin {
class _TypedListExpression extends Object
with AbstractExpressionMixin, TopLevelMixin {
static List<ExpressionBuilder> _toExpression(Iterable values) {
return values.map(_expressionify).toList();
}
Expand Down Expand Up @@ -457,7 +486,8 @@ class _TypedListExpression extends Object with AbstractExpressionMixin, TopLevel
}
}

class _TypedMapExpression extends Object with AbstractExpressionMixin, TopLevelMixin {
class _TypedMapExpression extends Object
with AbstractExpressionMixin, TopLevelMixin {
static Map<ExpressionBuilder, ExpressionBuilder> _toExpression(Map values) {
return new Map<ExpressionBuilder, ExpressionBuilder>.fromIterable(
values.keys,
Expand Down
6 changes: 4 additions & 2 deletions lib/src/builders/expression/assign.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

part of code_builder.src.builders.expression;

class _AsAssign extends AbstractExpressionMixin {
class _AsAssign extends AbstractExpressionMixin with TopLevelMixin {
final String _name;
final bool _nullAware;
final ExpressionBuilder _value;
Expand All @@ -18,7 +18,9 @@ class _AsAssign extends AbstractExpressionMixin {
@override
Expression buildExpression([Scope scope]) {
return new AssignmentExpression(
_target != null ? _target.property(_name).buildExpression(scope) : stringIdentifier(_name),
_target != null
? _target.property(_name).buildExpression(scope)
: stringIdentifier(_name),
_nullAware ? $nullAwareEquals : $equals,
_value.buildExpression(scope),
);
Expand Down
4 changes: 2 additions & 2 deletions lib/src/builders/expression/negate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

part of code_builder.src.builders.expression;

class _NegateExpression extends AbstractExpressionMixin {
class _NegateExpression extends AbstractExpressionMixin with TopLevelMixin {
final ExpressionBuilder _expression;

_NegateExpression(this._expression);
Expand All @@ -21,7 +21,7 @@ class _NegateExpression extends AbstractExpressionMixin {
}
}

class _NegativeExpression extends AbstractExpressionMixin {
class _NegativeExpression extends AbstractExpressionMixin with TopLevelMixin {
final ExpressionBuilder _expression;

_NegativeExpression(this._expression);
Expand Down
3 changes: 2 additions & 1 deletion lib/src/builders/expression/operators.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

part of code_builder.src.builders.expression;

class _AsBinaryExpression extends Object with AbstractExpressionMixin, TopLevelMixin {
class _AsBinaryExpression extends Object
with AbstractExpressionMixin, TopLevelMixin {
final ExpressionBuilder _left;
final ExpressionBuilder _right;
final Token _operator;
Expand Down
14 changes: 6 additions & 8 deletions lib/src/builders/file.dart
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,12 @@ class LibraryBuilder extends FileBuilder {

@override
CompilationUnit buildAst([_]) {
var members = _members
.map((m) {
if (m is TopLevelMixin) {
return (m as TopLevelMixin).buildTopLevelAst(_scope);
}
return m.buildAst(_scope);
})
.toList();
var members = _members.map((m) {
if (m is TopLevelMixin) {
return (m as TopLevelMixin).buildTopLevelAst(_scope);
}
return m.buildAst(_scope);
}).toList();
var directives = <Directive>[]
..addAll(_scope.toImports().map((d) => d.buildAst()))
..addAll(_directives.map((d) => d.buildAst()));
Expand Down
Loading