fix(DirectiveMetadata): add support for events, changeDetection
This commit is contained in:
@ -24,6 +24,8 @@ export function directiveMetadataToMap(meta: DirectiveMetadata): Map<string, any
|
|||||||
['callOnInit', meta.callOnInit],
|
['callOnInit', meta.callOnInit],
|
||||||
['callOnChange', meta.callOnChange],
|
['callOnChange', meta.callOnChange],
|
||||||
['callOnAllChangesDone', meta.callOnAllChangesDone],
|
['callOnAllChangesDone', meta.callOnAllChangesDone],
|
||||||
|
['events', meta.events],
|
||||||
|
['changeDetection', meta.changeDetection],
|
||||||
['version', 1],
|
['version', 1],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -50,7 +52,9 @@ export function directiveMetadataFromMap(map: Map<string, any>): DirectiveMetada
|
|||||||
callOnCheck:<boolean>MapWrapper.get(map, 'callOnCheck'),
|
callOnCheck:<boolean>MapWrapper.get(map, 'callOnCheck'),
|
||||||
callOnChange:<boolean>MapWrapper.get(map, 'callOnChange'),
|
callOnChange:<boolean>MapWrapper.get(map, 'callOnChange'),
|
||||||
callOnInit:<boolean>MapWrapper.get(map, 'callOnInit'),
|
callOnInit:<boolean>MapWrapper.get(map, 'callOnInit'),
|
||||||
callOnAllChangesDone:<boolean>MapWrapper.get(map, 'callOnAllChangesDone')
|
callOnAllChangesDone:<boolean>MapWrapper.get(map, 'callOnAllChangesDone'),
|
||||||
|
events:<List<string>>_cloneIfPresent(MapWrapper.get(map, 'events')),
|
||||||
|
changeDetection:<string>MapWrapper.get(map, 'changeDetection'),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,8 +63,8 @@ class _DirectiveMetadataVisitor extends Object
|
|||||||
bool _callOnCheck;
|
bool _callOnCheck;
|
||||||
bool _callOnInit;
|
bool _callOnInit;
|
||||||
bool _callOnAllChangesDone;
|
bool _callOnAllChangesDone;
|
||||||
String changeDetection;
|
String _changeDetection;
|
||||||
List<String> events;
|
List<String> _events;
|
||||||
|
|
||||||
final ConstantEvaluator _evaluator = new ConstantEvaluator();
|
final ConstantEvaluator _evaluator = new ConstantEvaluator();
|
||||||
|
|
||||||
@ -83,8 +83,8 @@ class _DirectiveMetadataVisitor extends Object
|
|||||||
_callOnCheck = false;
|
_callOnCheck = false;
|
||||||
_callOnInit = false;
|
_callOnInit = false;
|
||||||
_callOnAllChangesDone = false;
|
_callOnAllChangesDone = false;
|
||||||
changeDetection = null;
|
_changeDetection = null;
|
||||||
events = [];
|
_events = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
DirectiveMetadata get meta => DirectiveMetadata.create(
|
DirectiveMetadata get meta => DirectiveMetadata.create(
|
||||||
@ -100,8 +100,8 @@ class _DirectiveMetadataVisitor extends Object
|
|||||||
callOnCheck: _callOnCheck,
|
callOnCheck: _callOnCheck,
|
||||||
callOnInit: _callOnInit,
|
callOnInit: _callOnInit,
|
||||||
callOnAllChangesDone: _callOnAllChangesDone,
|
callOnAllChangesDone: _callOnAllChangesDone,
|
||||||
changeDetection: changeDetection,
|
changeDetection: _changeDetection,
|
||||||
events: events);
|
events: _events);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Object visitAnnotation(Annotation node) {
|
Object visitAnnotation(Annotation node) {
|
||||||
@ -145,7 +145,6 @@ class _DirectiveMetadataVisitor extends Object
|
|||||||
'$node' /* source */);
|
'$node' /* source */);
|
||||||
}
|
}
|
||||||
var keyString = '${node.name.label}';
|
var keyString = '${node.name.label}';
|
||||||
// TODO(kegluneq): Populate the other values in [DirectiveMetadata]
|
|
||||||
switch (keyString) {
|
switch (keyString) {
|
||||||
case 'selector':
|
case 'selector':
|
||||||
_populateSelector(node.expression);
|
_populateSelector(node.expression);
|
||||||
@ -165,6 +164,12 @@ class _DirectiveMetadataVisitor extends Object
|
|||||||
case 'exportAs':
|
case 'exportAs':
|
||||||
_populateExportAs(node.expression);
|
_populateExportAs(node.expression);
|
||||||
break;
|
break;
|
||||||
|
case 'changeDetection':
|
||||||
|
_populateChangeDetection(node.expression);
|
||||||
|
break;
|
||||||
|
case 'events':
|
||||||
|
_populateEvents(node.expression);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -263,4 +268,14 @@ class _DirectiveMetadataVisitor extends Object
|
|||||||
_callOnInit = lifecycleEvents.contains("onInit");
|
_callOnInit = lifecycleEvents.contains("onInit");
|
||||||
_callOnAllChangesDone = lifecycleEvents.contains("onAllChangesDone");
|
_callOnAllChangesDone = lifecycleEvents.contains("onAllChangesDone");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _populateEvents(Expression eventsValue) {
|
||||||
|
_checkMeta();
|
||||||
|
_populateList(eventsValue, _events, 'Directive#events');
|
||||||
|
}
|
||||||
|
|
||||||
|
void _populateChangeDetection(Expression value) {
|
||||||
|
_checkMeta();
|
||||||
|
_changeDetection = _expressionToString(value, 'Directive#changeDetection');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,9 @@ export function main() {
|
|||||||
callOnChange: true,
|
callOnChange: true,
|
||||||
callOnCheck: true,
|
callOnCheck: true,
|
||||||
callOnInit: true,
|
callOnInit: true,
|
||||||
callOnAllChangesDone: true
|
callOnAllChangesDone: true,
|
||||||
|
events: ['onFoo', 'onBar'],
|
||||||
|
changeDetection: 'CHECK_ONCE'
|
||||||
});
|
});
|
||||||
var map = directiveMetadataToMap(someComponent);
|
var map = directiveMetadataToMap(someComponent);
|
||||||
expect(MapWrapper.get(map, 'compileChildren')).toEqual(false);
|
expect(MapWrapper.get(map, 'compileChildren')).toEqual(false);
|
||||||
@ -45,6 +47,8 @@ export function main() {
|
|||||||
expect(MapWrapper.get(map, 'callOnInit')).toEqual(true);
|
expect(MapWrapper.get(map, 'callOnInit')).toEqual(true);
|
||||||
expect(MapWrapper.get(map, 'callOnAllChangesDone')).toEqual(true);
|
expect(MapWrapper.get(map, 'callOnAllChangesDone')).toEqual(true);
|
||||||
expect(MapWrapper.get(map, 'exportAs')).toEqual('aaa');
|
expect(MapWrapper.get(map, 'exportAs')).toEqual('aaa');
|
||||||
|
expect(MapWrapper.get(map, 'events')).toEqual(['onFoo', 'onBar']);
|
||||||
|
expect(MapWrapper.get(map, 'changeDetection')).toEqual('CHECK_ONCE');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('mapToDirectiveMetadata', () => {
|
it('mapToDirectiveMetadata', () => {
|
||||||
@ -64,7 +68,9 @@ export function main() {
|
|||||||
['callOnCheck', true],
|
['callOnCheck', true],
|
||||||
['callOnInit', true],
|
['callOnInit', true],
|
||||||
['callOnChange', true],
|
['callOnChange', true],
|
||||||
['callOnAllChangesDone', true]
|
['callOnAllChangesDone', true],
|
||||||
|
['events', ['onFoo', 'onBar']],
|
||||||
|
['changeDetection', 'CHECK_ONCE']
|
||||||
]);
|
]);
|
||||||
var meta = directiveMetadataFromMap(map);
|
var meta = directiveMetadataFromMap(map);
|
||||||
expect(meta.compileChildren).toEqual(false);
|
expect(meta.compileChildren).toEqual(false);
|
||||||
@ -83,6 +89,8 @@ export function main() {
|
|||||||
expect(meta.callOnInit).toEqual(true);
|
expect(meta.callOnInit).toEqual(true);
|
||||||
expect(meta.callOnChange).toEqual(true);
|
expect(meta.callOnChange).toEqual(true);
|
||||||
expect(meta.callOnAllChangesDone).toEqual(true);
|
expect(meta.callOnAllChangesDone).toEqual(true);
|
||||||
|
expect(meta.events).toEqual(['onFoo', 'onBar']);
|
||||||
|
expect(meta.changeDetection).toEqual('CHECK_ONCE');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -109,6 +109,18 @@ void allTests() {
|
|||||||
expect(metadata.callOnAllChangesDone).toBe(true);
|
expect(metadata.callOnAllChangesDone).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should parse events.', () async {
|
||||||
|
var metadata = await readMetadata('directive_metadata_extractor/'
|
||||||
|
'directive_metadata_files/events.ng_deps.dart');
|
||||||
|
expect(metadata.events).toEqual(['onFoo', 'onBar']);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should parse changeDetection.', () async {
|
||||||
|
var metadata = await readMetadata('directive_metadata_extractor/'
|
||||||
|
'directive_metadata_files/changeDetection.ng_deps.dart');
|
||||||
|
expect(metadata.changeDetection).toEqual('CHECK_ONCE');
|
||||||
|
});
|
||||||
|
|
||||||
it('should fail when a class is annotated with multiple Directives.',
|
it('should fail when a class is annotated with multiple Directives.',
|
||||||
() async {
|
() async {
|
||||||
var ngDeps = await NgDeps.parse(reader, new AssetId('a',
|
var ngDeps = await NgDeps.parse(reader, new AssetId('a',
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
library examples.hello_world.index_common_dart.ng_deps.dart;
|
||||||
|
|
||||||
|
import 'hello.dart';
|
||||||
|
import 'package:angular2/angular2.dart'
|
||||||
|
show
|
||||||
|
bootstrap,
|
||||||
|
Component,
|
||||||
|
Directive,
|
||||||
|
View,
|
||||||
|
NgElement,
|
||||||
|
onChange,
|
||||||
|
onDestroy,
|
||||||
|
onInit,
|
||||||
|
onCheck,
|
||||||
|
onAllChangesDone;
|
||||||
|
|
||||||
|
var _visited = false;
|
||||||
|
void initReflector(reflector) {
|
||||||
|
if (_visited) return;
|
||||||
|
_visited = true;
|
||||||
|
reflector
|
||||||
|
..registerType(HelloCmp, {
|
||||||
|
'factory': () => new HelloCmp(),
|
||||||
|
'parameters': const [const []],
|
||||||
|
'annotations': const [
|
||||||
|
const Component(changeDetection: 'CHECK_ONCE')
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
library examples.hello_world.index_common_dart.ng_deps.dart;
|
||||||
|
|
||||||
|
import 'hello.dart';
|
||||||
|
import 'package:angular2/angular2.dart'
|
||||||
|
show
|
||||||
|
bootstrap,
|
||||||
|
Component,
|
||||||
|
Directive,
|
||||||
|
View,
|
||||||
|
NgElement,
|
||||||
|
onChange,
|
||||||
|
onDestroy,
|
||||||
|
onInit,
|
||||||
|
onCheck,
|
||||||
|
onAllChangesDone;
|
||||||
|
|
||||||
|
var _visited = false;
|
||||||
|
void initReflector(reflector) {
|
||||||
|
if (_visited) return;
|
||||||
|
_visited = true;
|
||||||
|
reflector
|
||||||
|
..registerType(HelloCmp, {
|
||||||
|
'factory': () => new HelloCmp(),
|
||||||
|
'parameters': const [const []],
|
||||||
|
'annotations': const [
|
||||||
|
const Component(events: ['onFoo', 'onBar'])
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}
|
@ -16,6 +16,8 @@
|
|||||||
"callOnInit": false,
|
"callOnInit": false,
|
||||||
"callOnChange": false,
|
"callOnChange": false,
|
||||||
"callOnAllChangesDone": false,
|
"callOnAllChangesDone": false,
|
||||||
|
"events": [],
|
||||||
|
"changeDetection": null,
|
||||||
"version": 1
|
"version": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user