refactor(dart/transform): Use a protobufs representation during transform

To simplify processing and testing in the future, use protobufs to
represent of `.ng_deps.dart` files rather than always dealing
directly in Dart code.

This update does not actually use the protobuf representation, but this
is a step towards moving all phases to parse and use protobufs rather than
Dart code.
This commit is contained in:
Tim Blasi
2015-09-14 17:16:34 -07:00
parent cb4ff7491a
commit e889ec8335
41 changed files with 1152 additions and 711 deletions

View File

@ -13,9 +13,15 @@ main() {
it("directiveMetadataToMap", () {
var someComponent = new RenderDirectiveMetadata(
compileChildren: false,
hostListeners: MapWrapper.createFromPairs([["LKey", "LVal"]]),
hostProperties: MapWrapper.createFromPairs([["PKey", "PVal"]]),
hostAttributes: MapWrapper.createFromPairs([["AtKey", "AtVal"]]),
hostListeners: MapWrapper.createFromPairs([
["LKey", "LVal"]
]),
hostProperties: MapWrapper.createFromPairs([
["PKey", "PVal"]
]),
hostAttributes: MapWrapper.createFromPairs([
["AtKey", "AtVal"]
]),
id: "someComponent",
properties: ["propKey: propVal"],
readAttributes: ["read1", "read2"],
@ -34,12 +40,15 @@ main() {
changeDetection: ChangeDetectionStrategy.CheckOnce);
var map = directiveMetadataToMap(someComponent);
expect(map["compileChildren"]).toEqual(false);
expect(map["hostListeners"])
.toEqual(MapWrapper.createFromPairs([["LKey", "LVal"]]));
expect(map["hostProperties"])
.toEqual(MapWrapper.createFromPairs([["PKey", "PVal"]]));
expect(map["hostAttributes"])
.toEqual(MapWrapper.createFromPairs([["AtKey", "AtVal"]]));
expect(map["hostListeners"]).toEqual(MapWrapper.createFromPairs([
["LKey", "LVal"]
]));
expect(map["hostProperties"]).toEqual(MapWrapper.createFromPairs([
["PKey", "PVal"]
]));
expect(map["hostAttributes"]).toEqual(MapWrapper.createFromPairs([
["AtKey", "AtVal"]
]));
expect(map["id"]).toEqual("someComponent");
expect(map["properties"]).toEqual(["propKey: propVal"]);
expect(map["readAttributes"]).toEqual(["read1", "read2"]);
@ -55,17 +64,39 @@ main() {
expect(map["callAfterViewChecked"]).toEqual(true);
expect(map["exportAs"]).toEqual("aaa");
expect(map["events"]).toEqual(["onFoo", "onBar"]);
expect(map["changeDetection"]).toEqual(ChangeDetectionStrategy.CheckOnce.index);
expect(map["changeDetection"])
.toEqual(ChangeDetectionStrategy.CheckOnce.index);
});
it("mapToDirectiveMetadata", () {
var map = MapWrapper.createFromPairs([
["compileChildren", false],
["hostProperties", MapWrapper.createFromPairs([["PKey", "testVal"]])],
["hostListeners", MapWrapper.createFromPairs([["LKey", "testVal"]])],
["hostAttributes", MapWrapper.createFromPairs([["AtKey", "testVal"]])],
[
"hostProperties",
MapWrapper.createFromPairs([
["PKey", "testVal"]
])
],
[
"hostListeners",
MapWrapper.createFromPairs([
["LKey", "testVal"]
])
],
[
"hostAttributes",
MapWrapper.createFromPairs([
["AtKey", "testVal"]
])
],
["id", "testId"],
["properties", ["propKey: propVal"]],
["readAttributes", ["readTest1", "readTest2"]],
[
"properties",
["propKey: propVal"]
],
[
"readAttributes",
["readTest1", "readTest2"]
],
["selector", "testSelector"],
["type", RenderDirectiveMetadata.DIRECTIVE_TYPE],
["exportAs", "aaa"],
@ -77,17 +108,23 @@ main() {
["callAfterContentChecked", true],
["callAfterViewInit", true],
["callAfterViewChecked", true],
["events", ["onFoo", "onBar"]],
[
"events",
["onFoo", "onBar"]
],
["changeDetection", ChangeDetectionStrategy.CheckOnce.index]
]);
var meta = directiveMetadataFromMap(map);
expect(meta.compileChildren).toEqual(false);
expect(meta.hostProperties)
.toEqual(MapWrapper.createFromPairs([["PKey", "testVal"]]));
expect(meta.hostListeners)
.toEqual(MapWrapper.createFromPairs([["LKey", "testVal"]]));
expect(meta.hostAttributes)
.toEqual(MapWrapper.createFromPairs([["AtKey", "testVal"]]));
expect(meta.hostProperties).toEqual(MapWrapper.createFromPairs([
["PKey", "testVal"]
]));
expect(meta.hostListeners).toEqual(MapWrapper.createFromPairs([
["LKey", "testVal"]
]));
expect(meta.hostAttributes).toEqual(MapWrapper.createFromPairs([
["AtKey", "testVal"]
]));
expect(meta.id).toEqual("testId");
expect(meta.properties).toEqual(["propKey: propVal"]);
expect(meta.readAttributes).toEqual(["readTest1", "readTest2"]);

View File

@ -121,7 +121,8 @@ void allTests() {
it('should parse changeDetection.', () async {
var metadata = await readMetadata('directive_metadata_extractor/'
'directive_metadata_files/changeDetection.ng_deps.dart');
expect(metadata.changeDetection).toEqual(ChangeDetectionStrategy.CheckOnce);
expect(metadata.changeDetection)
.toEqual(ChangeDetectionStrategy.CheckOnce);
});
it('should fail when a class is annotated with multiple Directives.',

View File

@ -1,10 +1,10 @@
library examples.src.hello_world.absolute_url_expression_files.ng_deps.dart;
import 'hello.dart';
export 'hello.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/angular2.dart'
show Component, Directive, View, NgElement;
export 'hello.dart';
var _visited = false;
void initReflector() {
@ -16,9 +16,9 @@ void initReflector() {
new _ngRef.ReflectionInfo(const [
const Component(selector: 'hello-app'),
const View(
styles: const [r'''.greeting { .color: blue; }''',],
template: r'''{{greeting}}''',
templateUrl: r'package:other_package/template.html',
styles: const [r'''.greeting { .color: blue; }''',])
templateUrl: 'package:other_package/template.html')
], const [], () => new HelloCmp()))
..registerFunction(
hello, new _ngRef.ReflectionInfo(const [const Injectable()], const []));

View File

@ -1,9 +1,9 @@
library dinner.package_soup.ng_deps.dart;
import 'package_soup.dart';
export 'package_soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:soup/soup.dart';
export 'package_soup.dart';
var _visited = false;
void initReflector() {

View File

@ -1,9 +1,9 @@
library dinner.relative_soup.ng_deps.dart;
import 'relative_soup.dart';
export 'relative_soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'annotations/soup.dart';
export 'relative_soup.dart';
var _visited = false;
void initReflector() {

View File

@ -1,12 +1,12 @@
library examples.src.hello_world.absolute_url_expression_files.ng_deps.dart;
import 'hello.dart';
export 'hello.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/angular2.dart'
show bootstrap, Component, Directive, View, NgElement;
export 'a.dart' show alias3;
import 'b.dart' as b;
export 'hello.dart';
export 'a.dart' show alias3;
var _visited = false;
void initReflector() {
@ -18,8 +18,8 @@ void initReflector() {
new _ngRef.ReflectionInfo(const [
const Component(selector: 'hello-app'),
const View(
styles: const [r'''.greeting { .color: blue; }''',],
template: r'''{{greeting}}''',
templateUrl: r'template.html',
styles: const [r'''.greeting { .color: blue; }''',])
templateUrl: 'template.html')
], const [], () => new HelloCmp()));
}

View File

@ -1,10 +1,10 @@
library examples.src.hello_world.index_common_dart.ng_deps.dart;
import 'hello.dart';
export 'hello.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/angular2.dart'
show Component, Directive, View, NgElement;
export 'hello.dart';
var _visited = false;
void initReflector() {

View File

@ -1,9 +1,9 @@
library dinner.soup.ng_deps.dart;
import 'soup.dart';
export 'soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
export 'soup.dart';
var _visited = false;
void initReflector() {

View File

@ -0,0 +1,99 @@
library dinner.soup.ng_deps.dart;
import 'soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/metadata.dart';
export 'soup.dart';
var _visited = false;
void initReflector() {
if (_visited) return;
_visited = true;
_ngRef.reflector
..registerType(
OnChangeSoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(
selector: '[soup]',
lifecycle: const [LifecycleEvent.OnChanges])
],
const [],
() => new OnChangeSoupComponent(),
const [OnChanges]))
..registerType(
OnDestroySoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(
selector: '[soup]',
lifecycle: const [LifecycleEvent.OnDestroy])
],
const [],
() => new OnDestroySoupComponent(),
const [OnDestroy]))
..registerType(
OnCheckSoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(
selector: '[soup]', lifecycle: const [LifecycleEvent.DoCheck])
],
const [],
() => new OnCheckSoupComponent(),
const [DoCheck]))
..registerType(
OnInitSoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(
selector: '[soup]', lifecycle: const [LifecycleEvent.OnInit])
],
const [],
() => new OnInitSoupComponent(),
const [OnInit]))
..registerType(
AfterContentInitSoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(
selector: '[soup]',
lifecycle: const [LifecycleEvent.AfterContentInit])
],
const [],
() => new AfterContentInitSoupComponent(),
const [AfterContentInit]))
..registerType(
AfterContentCheckedSoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(
selector: '[soup]',
lifecycle: const [LifecycleEvent.AfterContentChecked])
],
const [],
() => new AfterContentCheckedSoupComponent(),
const [AfterContentChecked]))
..registerType(
AfterViewInitSoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(
selector: '[soup]',
lifecycle: const [LifecycleEvent.AfterViewInit])
],
const [],
() => new AfterViewInitSoupComponent(),
const [AfterViewInit]))
..registerType(
AfterViewCheckedSoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(
selector: '[soup]',
lifecycle: const [LifecycleEvent.AfterViewChecked])
],
const [],
() => new AfterViewCheckedSoupComponent(),
const [AfterViewChecked]));
}

View File

@ -1,10 +1,10 @@
library dinner.soup.ng_deps.dart;
import 'soup.dart';
export 'soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
import 'package:angular2/src/core/compiler.dart';
export 'soup.dart';
var _visited = false;
void initReflector() {
@ -14,8 +14,7 @@ void initReflector() {
..registerType(
ChangingSoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(selector: '[soup]')],
const [const Component(selector: '[soup]')],
const [],
() => new ChangingSoupComponent(),
const [OnChanges, AnotherInterface]));

View File

@ -1,10 +1,10 @@
library test.transform.directive_processor.invalid_url_files.hello.ng_deps.dart;
import 'hello.dart';
export 'hello.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/angular2.dart'
show Component, Directive, View, NgElement;
export 'hello.dart';
var _visited = false;
void initReflector() {
@ -16,8 +16,8 @@ void initReflector() {
new _ngRef.ReflectionInfo(const [
const Component(selector: 'hello-app'),
const View(
styles: const [r'''''', r'''''',],
template: r'''''',
templateUrl: r'/bad/absolute/url.html',
styles: const [r'''''', r'''''',])
templateUrl: '/bad/absolute/url.html')
], const [], () => new HelloCmp()));
}

View File

@ -1,10 +1,10 @@
library dinner.soup.ng_deps.dart;
import 'soup.dart';
export 'soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
import 'package:angular2/src/core/compiler.dart';
export 'soup.dart';
var _visited = false;
void initReflector() {
@ -14,9 +14,7 @@ void initReflector() {
..registerType(
MultiSoupComponent,
new _ngRef.ReflectionInfo(
const [
const Component(selector: '[soup]')
],
const [const Component(selector: '[soup]')],
const [],
() => new MultiSoupComponent(),
const [OnChanges, OnDestroy, OnInit]));

View File

@ -1,9 +1,9 @@
library main.ng_deps.dart;
import 'main.dart';
export 'main.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
export 'main.dart';
var _visited = false;
void initReflector() {

View File

@ -1,10 +1,10 @@
library examples.src.hello_world.multiple_style_urls_files.ng_deps.dart;
import 'hello.dart';
export 'hello.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/angular2.dart'
show Component, Directive, View, NgElement;
export 'hello.dart';
var _visited = false;
void initReflector() {
@ -15,12 +15,9 @@ void initReflector() {
HelloCmp,
new _ngRef.ReflectionInfo(const [
const Component(selector: 'hello-app'),
const View(
template: r'''{{greeting}}''',
templateUrl: r'template.html',
styles: const [
r'''.greeting { .color: blue; }''',
r'''.hello { .color: red; }''',
])
const View(styles: const [
r'''.greeting { .color: blue; }''',
r'''.hello { .color: red; }''',
], template: r'''{{greeting}}''', templateUrl: 'template.html')
], const [], () => new HelloCmp()));
}

View File

@ -1,10 +1,10 @@
library examples.src.hello_world.multiple_style_urls_not_inlined_files.ng_deps.dart;
import 'hello.dart';
export 'hello.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/angular2.dart'
show Component, Directive, View, NgElement;
export 'hello.dart';
var _visited = false;
void initReflector() {
@ -15,11 +15,9 @@ void initReflector() {
HelloCmp,
new _ngRef.ReflectionInfo(const [
const Component(selector: 'hello-app'),
const View(
templateUrl: 'package:a/template.html',
styleUrls: const [
'package:a/template.css',
'package:a/template_other.css'
])
const View(styleUrls: const [
'package:a/template.css',
'package:a/template_other.css'
], templateUrl: 'package:a/template.html')
], const [], () => new HelloCmp()));
}

View File

@ -1,9 +1,9 @@
library dinner.soup.ng_deps.dart;
import 'soup.dart';
export 'soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
export 'soup.dart';
var _visited = false;
void initReflector() {
@ -15,7 +15,7 @@ void initReflector() {
new _ngRef.ReflectionInfo(const [
const Component(selector: '[soup]')
], const [
const [String, Tasty],
const [String,const Tasty()],
const [const Inject(Salt)]
], (String description, salt) => new SoupComponent(description, salt)));
}

View File

@ -4,5 +4,5 @@ import 'package:angular2/src/core/metadata.dart';
@Component(selector: '[soup]')
class SoupComponent {
SoupComponent(@Tasty String description, @Inject(Salt) salt);
SoupComponent(@Tasty() String description, @Inject(Salt) salt);
}

View File

@ -1,9 +1,9 @@
library main.ng_deps.dart;
import 'main.dart';
export 'main.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
export 'main.dart';
var _visited = false;
void initReflector() {

View File

@ -1,10 +1,10 @@
library dinner.soup.ng_deps.dart;
import 'soup.dart';
export 'soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/compiler.dart' as prefix;
import 'package:angular2/src/core/metadata.dart';
export 'soup.dart';
var _visited = false;
void initReflector() {

View File

@ -1,10 +1,10 @@
library examples.src.hello_world.split_url_expression_files.ng_deps.dart;
import 'hello.dart';
export 'hello.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/angular2.dart'
show Component, Directive, View, NgElement;
export 'hello.dart';
var _visited = false;
void initReflector() {
@ -16,6 +16,6 @@ void initReflector() {
new _ngRef.ReflectionInfo(const [
const Component(selector: 'hello-app'),
const View(
template: r'''{{greeting}}''', templateUrl: r'template.html')
template: r'''{{greeting}}''', templateUrl: 'templ' 'ate.html')
], const [], () => new HelloCmp()));
}

View File

@ -1,9 +1,9 @@
library static_function_files.hello.ng_deps.dart;
import 'hello.dart';
export 'hello.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/angular2.dart';
export 'hello.dart';
var _visited = false;
void initReflector() {

View File

@ -1,9 +1,9 @@
library dinner.soup.ng_deps.dart;
import 'soup.dart';
export 'soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
export 'soup.dart';
var _visited = false;
void initReflector() {

View File

@ -1,10 +1,10 @@
library dinner.soup.ng_deps.dart;
import 'soup.dart';
export 'soup.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/compiler.dart';
import 'package:angular2/src/core/metadata.dart';
export 'soup.dart';
var _visited = false;
void initReflector() {
@ -13,8 +13,6 @@ void initReflector() {
_ngRef.reflector
..registerType(
OnChangeSoupComponent,
new _ngRef.ReflectionInfo(const [
const Component(
selector: '[soup]')
], const [], () => new OnChangeSoupComponent()));
new _ngRef.ReflectionInfo(const [const Component(selector: '[soup]')],
const [], () => new OnChangeSoupComponent()));
}

View File

@ -1,10 +1,10 @@
library examples.src.hello_world.url_expression_files.ng_deps.dart;
import 'hello.dart';
export 'hello.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/angular2.dart'
show Component, Directive, View, NgElement;
export 'hello.dart';
var _visited = false;
void initReflector() {
@ -16,6 +16,6 @@ void initReflector() {
new _ngRef.ReflectionInfo(const [
const Component(selector: 'hello-app'),
const View(
template: r'''{{greeting}}''', templateUrl: r'template.html')
template: r'''{{greeting}}''', templateUrl: 'template.html')
], const [], () => new HelloCmp()));
}

View File

@ -12,9 +12,8 @@ main() {
}
var formatter = new DartFormatter();
var transform = new AngularTransformerGroup(new TransformerOptions(
['web/index.dart'],
formatCode: true));
var transform = new AngularTransformerGroup(
new TransformerOptions(['web/index.dart'], formatCode: true));
class IntegrationTestConfig {
final String name;
@ -96,7 +95,8 @@ void allTests() {
new IntegrationTestConfig('should preserve multiple annotations.', inputs: {
'a|web/index.dart': 'two_annotations_files/index.dart',
'a|web/bar.dart': 'two_annotations_files/bar.dart',
'angular2|lib/src/core/metadata.dart': '../../../lib/src/core/metadata.dart'
'angular2|lib/src/core/metadata.dart':
'../../../lib/src/core/metadata.dart'
}, outputs: {
'a|web/bar.ng_deps.dart':
'two_annotations_files/expected/bar.ng_deps.dart'

View File

@ -1,10 +1,10 @@
library bar.ng_deps.dart;
import 'bar.dart';
export 'bar.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
import 'foo.dart';
export 'bar.dart';
var _visited = false;
void initReflector() {

View File

@ -1,9 +1,9 @@
library bar.ng_deps.dart;
import 'bar.dart';
export 'bar.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
export 'bar.dart';
var _visited = false;
void initReflector() {

View File

@ -1,13 +1,13 @@
library web_foo.ng_deps.dart;
import 'index.dart';
export 'index.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/bootstrap_static.dart';
import 'index.ng_deps.dart' as ngStaticInit;
import 'package:angular2/src/core/reflection/reflection.dart';
import 'bar.dart';
import 'bar.ng_deps.dart' as i0;
export 'index.dart';
var _visited = false;
void initReflector() {

View File

@ -1,9 +1,9 @@
library bar.ng_deps.dart;
import 'bar.dart';
export 'bar.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
export 'bar.dart';
var _visited = false;
void initReflector() {

View File

@ -4,19 +4,21 @@ import 'package:angular2/src/core/change_detection/pregen_proto_change_detector.
as _gen;
import 'bar.dart';
export 'bar.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
export 'bar.dart';
var _visited = false;
void initReflector() {
if (_visited) return;
_visited = true;
_ngRef.reflector
..registerType(MyComponent, new _ngRef.ReflectionInfo(const [
const Component(selector: '[soup]'),
const View(template: 'Salad: {{myNum}} is awesome')
], const [], () => new MyComponent()))
..registerType(
MyComponent,
new _ngRef.ReflectionInfo(const [
const Component(selector: '[soup]'),
const View(template: 'Salad: {{myNum}} is awesome')
], const [], () => new MyComponent()))
..registerGetters({'myNum': (o) => o.myNum});
_gen.preGeneratedProtoDetectors['MyComponent_comp_0'] =
_MyComponent_ChangeDetector0.newProtoChangeDetector;
@ -26,18 +28,19 @@ class _MyComponent_ChangeDetector0
extends _gen.AbstractChangeDetector<MyComponent> {
var myNum0, interpolate1;
_MyComponent_ChangeDetector0(dispatcher) : super(
"MyComponent_comp_0", dispatcher, 2,
_MyComponent_ChangeDetector0.gen_propertyBindingTargets,
_MyComponent_ChangeDetector0.gen_directiveIndices,null) {
_MyComponent_ChangeDetector0(dispatcher)
: super(
"MyComponent_comp_0",
dispatcher,
2,
_MyComponent_ChangeDetector0.gen_propertyBindingTargets,
_MyComponent_ChangeDetector0.gen_directiveIndices,
null) {
dehydrateDirectives(false);
}
void detectChangesInRecordsInternal(throwOnChange) {
var l_context = this.context,
l_myNum0,
c_myNum0,
l_interpolate1;
var l_context = this.context, l_myNum0, c_myNum0, l_interpolate1;
c_myNum0 = false;
var isChanged = false;
var changes = null;
@ -88,4 +91,4 @@ class _MyComponent_ChangeDetector0
return new _gen.PregenProtoChangeDetector(
(a) => new _MyComponent_ChangeDetector0(a), def);
}
}
}

View File

@ -1,10 +1,10 @@
library bar.ng_deps.dart;
import 'bar.dart';
export 'bar.dart';
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
import 'package:angular2/src/core/metadata.dart';
import 'foo.dart' as prefix;
export 'bar.dart';
var _visited = false;
void initReflector() {