Skip to content

Commit 35f0ee5

Browse files
committed
refactor(transformer): updates in properties syntax
1 parent d7df853 commit 35f0ee5

File tree

13 files changed

+42
-27
lines changed

13 files changed

+42
-27
lines changed

modules/angular2/src/transform/bind_generator/generator.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,16 @@ Map<String, String> _createBindMap(NgDeps ngDeps) {
4848
var visitor = new ExtractSettersVisitor();
4949
var bindMap = {};
5050
ngDeps.registeredTypes.forEach((RegisteredType t) {
51-
visitor.bindMappings.clear();
51+
visitor.bindConfig.clear();
5252
t.annotations.accept(visitor);
53-
visitor.bindMappings.forEach((String prop, _) {
53+
visitor.bindConfig.forEach((String config) {
54+
var prop;
55+
var idx = config.indexOf(':');
56+
if (idx > 0) {
57+
prop = config.substring(0, idx).trim();
58+
} else {
59+
prop = config;
60+
}
5461
if (bindMap.containsKey(prop)) {
5562
bindMap[prop] = '';
5663
} else {

modules/angular2/src/transform/bind_generator/visitor.dart

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,17 @@ import 'package:angular2/src/transform/common/logging.dart';
77
/// `registerType` call and pulling out the properties of any "bind"
88
/// values found.
99
class ExtractSettersVisitor extends Object with RecursiveAstVisitor<Object> {
10-
final Map<String, String> bindMappings = {};
1110
final ConstantEvaluator _evaluator = new ConstantEvaluator();
11+
final List<String> bindConfig = [];
1212

1313
@override
1414
Object visitNamedExpression(NamedExpression node) {
1515
if ('${node.name.label}' == 'properties') {
1616
var evaluated = node.expression.accept(_evaluator);
17-
if (evaluated is Map) {
18-
evaluated.forEach((key, value) {
19-
if (value != null) {
20-
bindMappings[key] = '$value';
21-
}
22-
});
17+
if (evaluated is List) {
18+
bindConfig.addAll(evaluated);
2319
} else {
24-
logger.error('`properties` currently only supports Map values');
20+
logger.error('`properties` currently only supports List values');
2521
}
2622
return null;
2723
}

modules/angular2/src/transform/common/directive_metadata_reader.dart

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,23 @@ class _DirectiveMetadataVisitor extends Object
179179
});
180180
}
181181

182+
/// Evaluates the [List] represented by `expression` and adds all values,
183+
/// to `list`. If `expression` does not evaluate to a [List], throws a
184+
/// descriptive [FormatException].
185+
void _populateList(Expression expression, List list, String propertyName) {
186+
var evaluated = expression.accept(_evaluator);
187+
if (evaluated is! List) {
188+
throw new FormatException(
189+
'Angular 2 expects a List but could not understand the value for '
190+
'$propertyName.', '$expression' /* source */);
191+
}
192+
list.addAll(evaluated);
193+
194+
}
195+
182196
void _populateProperties(Expression propertiesValue) {
183197
_checkMeta();
184-
_populateMap(propertiesValue, meta.properties, 'Directive#properties');
198+
_populateList(propertiesValue, meta.properties, 'Directive#properties');
185199
}
186200

187201
void _populateHostListeners(Expression hostListenersValue) {

modules/angular2/test/transform/directive_metadata_extractor/all_tests.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,8 @@ void allTests() {
6363
'directive_metadata_files/properties.ng_deps.dart');
6464
expect(metadata.properties).toBeNotNull();
6565
expect(metadata.properties.length).toBe(2);
66-
expect(metadata.properties).toContain('key1');
67-
expect(metadata.properties['key1']).toEqual('val1');
68-
expect(metadata.properties).toContain('key2');
69-
expect(metadata.properties['key2']).toEqual('val2');
66+
expect(metadata.properties).toContain('key1: val1');
67+
expect(metadata.properties).toContain('key2: val2');
7068
});
7169

7270
it('should parse host listeners.', () async {

modules/angular2/test/transform/integration/simple_annotation_files/expected/bar.ng_meta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"hostProperties": {},
88
"hostAttributes": {},
99
"hostActions": null,
10-
"properties": {},
10+
"properties": [],
1111
"readAttributes": [],
1212
"type": 1,
1313
"version": 1

modules/angular2/test/transform/template_compiler/duplicate_files/hello.ng_meta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"compileChildren":true,
77
"hostListeners":{},
88
"hostProperties":{},
9-
"properties":{},
9+
"properties":[],
1010
"readAttributes":[],
1111
"type":1,
1212
"version":1

modules/angular2/test/transform/template_compiler/inline_expression_files/hello.ng_meta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"compileChildren":true,
77
"hostListeners":{},
88
"hostProperties":{},
9-
"properties":{},
9+
"properties":[],
1010
"readAttributes":[],
1111
"type":1,
1212
"version":1

modules/angular2/test/transform/template_compiler/inline_method_files/hello.ng_meta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"compileChildren":true,
77
"hostListeners":{},
88
"hostProperties":{},
9-
"properties":{},
9+
"properties":[],
1010
"readAttributes":[],
1111
"type":1,
1212
"version":1

modules/angular2/test/transform/template_compiler/one_directive_files/hello.ng_meta.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
"selector":"hello-app",
66
"compileChildren":true,
77
"hostListeners":{},
8-
"hostProperties":{},
9-
"properties":{},
8+
"hostProperties":[],
9+
"properties":[],
1010
"readAttributes":[],
1111
"type":1,
1212
"version":1
@@ -17,7 +17,7 @@
1717
"compileChildren":true,
1818
"hostListeners":{},
1919
"hostProperties":{},
20-
"properties":{},
20+
"properties":[],
2121
"readAttributes":[],
2222
"type":1,
2323
"version":1

modules/angular2/test/transform/template_compiler/url_expression_files/hello.ng_meta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"compileChildren":true,
77
"hostListeners":{},
88
"hostProperties":{},
9-
"properties":{},
9+
"properties":[],
1010
"readAttributes":[],
1111
"type":1,
1212
"version":1

0 commit comments

Comments
 (0)