Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit 9bf04eb

Browse files
committed
feat(deploy): Move all reflection behind separate import
This is a pre-cursor to having a generated deployment without reflection for smaller deployment size.
1 parent e5baa50 commit 9bf04eb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+938
-994
lines changed

bin/parser_generator_for_spec.dart

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,17 @@ import 'package:di/di.dart';
22
import 'package:di/dynamic_injector.dart';
33
import 'package:angular/core/module.dart';
44
import 'package:angular/core/parser/parser.dart';
5-
import 'package:angular/tools/parser_generator/generator.dart';
65
import 'package:angular/tools/parser_getter_setter/generator.dart';
76

87
main(arguments) {
9-
var isGetter = !arguments.isEmpty;
10-
118
Module module = new Module()..type(Parser, implementedBy: DynamicParser);
12-
if (isGetter) {
13-
module.type(ParserBackend, implementedBy: DartGetterSetterGen);
14-
} else {
15-
module.type(ParserBackend, implementedBy: DynamicParserBackend);
16-
module.type(FilterMap, implementedBy: NullFilterMap);
17-
}
9+
module.type(ParserBackend, implementedBy: DartGetterSetterGen);
1810
Injector injector = new DynamicInjector(modules: [module],
1911
allowImplicitInjection: true);
2012

2113
// List generated using:
2214
// node node_modules/karma/bin/karma run | grep -Eo ":XNAY:.*:XNAY:" | sed -e 's/:XNAY://g' | sed -e "s/^/'/" | sed -e "s/$/',/" | sort | uniq > missing_expressions
23-
injector.get(isGetter ? ParserGetterSetter : ParserGenerator).generateParser([
15+
injector.get(ParserGetterSetter).generateParser([
2416
"foo == 'bar' ||\nbaz",
2517
"nonmap['hello']",
2618
"nonmap['hello']=3",

example/web/animation.dart

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
11
library animation;
22

33
import 'package:angular/angular.dart';
4+
import 'package:angular/angular_dynamic.dart';
45
import 'package:angular/animate/module.dart';
56

6-
// This annotation allows Dart to shake away any classes
7-
// not used from Dart code nor listed in another @MirrorsUsed.
8-
//
9-
// If you create classes that are referenced from the Angular
10-
// expressions, you must include a library target in @MirrorsUsed.
11-
@MirrorsUsed(override: '*')
12-
import 'dart:mirrors';
13-
147
part 'animation/repeat_demo.dart';
158
part 'animation/visibility_demo.dart';
169
part 'animation/stress_demo.dart';
@@ -25,11 +18,13 @@ class AnimationDemoController {
2518
}
2619

2720
main() {
28-
ngBootstrap(module: new Module()
29-
..install(new NgAnimateModule())
21+
ngDynamicApp()
22+
.addModule(new Module()
3023
..type(RepeatDemoComponent)
3124
..type(VisibilityDemoComponent)
3225
..type(StressDemoComponent)
3326
..type(CssDemoComponent)
34-
..type(AnimationDemoController));
27+
..type(AnimationDemoController))
28+
.addModule(new NgAnimateModule())
29+
.run();
3530
}

example/web/bouncing_balls.dart

Lines changed: 82 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
import 'package:perf_api/perf_api.dart';
12
import 'package:angular/angular.dart';
3+
import 'package:angular/angular_static.dart';
4+
import 'package:angular/change_detection/change_detection.dart';
25
import 'dart:html';
36
import 'dart:math';
47
import 'dart:core';
@@ -30,18 +33,17 @@ class BallModel {
3033
publishAs: 'bounce')
3134
class BounceController {
3235
var lastTime = window.performance.now();
33-
var run = true;
36+
var run = false;
3437
var fps = 0;
3538
var digestTime = 0;
3639
var currentDigestTime = 0;
3740
var balls = [];
38-
final NgZone zone;
3941
final Scope scope;
4042
var ballClassName = 'ball';
4143

42-
BounceController(this.zone, this.scope) {
44+
BounceController(this.scope) {
4345
changeCount(100);
44-
tick();
46+
if (run) tick();
4547
}
4648

4749
void toggleCSS() {
@@ -54,7 +56,7 @@ class BounceController {
5456
}
5557

5658
void requestAnimationFrame(fn) {
57-
window.requestAnimationFrame((_) => zone.run(fn));
59+
window.requestAnimationFrame((_) => fn());
5860
}
5961

6062
void changeCount(count) {
@@ -118,20 +120,84 @@ class MyModule extends Module {
118120
MyModule() {
119121
type(BounceController);
120122
type(BallPositionDirective);
121-
value(GetterCache, new GetterCache({
122-
'x': (o) => o.x,
123-
'y': (o) => o.y,
124-
'bounce': (o) => o.bounce,
125-
'fps': (o) => o.fps,
126-
'balls': (o) => o.balls,
127-
'length': (o) => o.length,
128-
'digestTime': (o) => o.digestTime,
129-
'ballClassName': (o) => o.ballClassName
130-
}));
131123
value(ScopeStats, new ScopeStats(report: true));
132124
}
133125
}
134126

135127
main() {
136-
ngBootstrap(module: new MyModule());
128+
var getters = {
129+
'x': (o) => o.x,
130+
'y': (o) => o.y,
131+
'bounce': (o) => o.bounce,
132+
'fps': (o) => o.fps,
133+
'balls': (o) => o.balls,
134+
'length': (o) => o.length,
135+
'digestTime': (o) => o.digestTime,
136+
'ballClassName': (o) => o.ballClassName,
137+
'position': (o) => o.position,
138+
'onClick': (o) => o.onClick,
139+
'ball': (o) => o.ball,
140+
'color': (o) => o.color,
141+
'changeCount': (o) => o.changeCount,
142+
'playPause': (o) => o.playPause,
143+
'toggleCSS': (o) => o.toggleCSS,
144+
'timeDigest': (o) => o.timeDigest,
145+
'expression': (o) => o.expression,
146+
};
147+
var setters = {
148+
'position': (o, v) => o.position = v,
149+
'onClick': (o, v) => o.onClick = v,
150+
'ball': (o, v) => o.ball = v,
151+
'x': (o, v) => o.x = v,
152+
'y': (o, v) => o.y = v,
153+
'balls': (o, v) => o.balls = v,
154+
'bounce': (o, v) => o.bounce = v,
155+
'expression': (o, v) => o.expression = v,
156+
'fps': (o, v) => o.fps = v,
157+
'length': (o, v) => o.length = v,
158+
'digestTime': (o, v) => o.digestTime = v,
159+
'ballClassName': (o, v) => o.ballClassName = v,
160+
};
161+
var metadata = {
162+
BounceController: [new NgController(selector: '[bounce-controller]', publishAs: 'bounce')],
163+
BallPositionDirective: [new NgDirective(selector: '[ball-position]', map: const { "ball-position": '=>position'})],
164+
NgEventDirective: [new NgDirective(selector: '[ng-click]', map: const {'ng-click': '&onClick'})],
165+
NgADirective: [new NgDirective(selector: 'a[href]')],
166+
NgRepeatDirective: [new NgDirective(children: NgAnnotation.TRANSCLUDE_CHILDREN, selector: '[ng-repeat]', map: const {'.': '@expression'})],
167+
NgTextMustacheDirective: [new NgDirective(selector: r':contains(/{{.*}}/)')],
168+
NgAttrMustacheDirective: [new NgDirective(selector: r'[*=/{{.*}}/]')],
169+
};
170+
var types = {
171+
Profiler: (t) => new Profiler(),
172+
DirectiveSelectorFactory: (t) => new DirectiveSelectorFactory(),
173+
DirectiveMap: (t) => new DirectiveMap(t(Injector), t(MetadataExtractor), t(DirectiveSelectorFactory)),
174+
Lexer: (t) => new Lexer(),
175+
ClosureMap: (t) => new StaticClosureMap(getters, setters), // TODO: types don't match
176+
DynamicParserBackend: (t) => new DynamicParserBackend(t(ClosureMap)),
177+
DynamicParser: (t) => new DynamicParser(t(Lexer), t(ParserBackend)),
178+
Compiler: (t) => new Compiler(t(Profiler), t(Parser), t(Expando)),
179+
WalkingCompiler: (t) => new WalkingCompiler(t(Profiler), t(Expando)),
180+
DirectiveSelectorFactory: (t) => new DirectiveSelectorFactory(t(ElementBinderFactory)),
181+
ElementBinderFactory: (t) => new ElementBinderFactory(t(Parser), t(Profiler), t(Expando)),
182+
EventHandler: (t) => new EventHandler(t(Node), t(Expando), t(ExceptionHandler)),
183+
AstParser: (t) => new AstParser(t(Parser)),
184+
FilterMap: (t) => new FilterMap(t(Injector), t(MetadataExtractor)),
185+
ExceptionHandler: (t) => new ExceptionHandler(),
186+
FieldGetterFactory: (t) => new StaticFieldGetterFactory(getters),
187+
ScopeDigestTTL: (t) => new ScopeDigestTTL(),
188+
ScopeStats: (t) => new ScopeStats(),
189+
RootScope: (t) => new RootScope(t(Object), t(AstParser), t(Parser), t(FieldGetterFactory), t(FilterMap), t(ExceptionHandler), t(ScopeDigestTTL), t(NgZone), t(ScopeStats)),
190+
NgAnimate: (t) => new NgAnimate(),
191+
Interpolate: (t) => new Interpolate(t(Parser)),
192+
193+
NgEventDirective: (t) => new NgEventDirective(t(Element), t(Scope)),
194+
NgADirective: (t) => new NgADirective(t(Element)),
195+
NgRepeatDirective: (t) => new NgRepeatDirective(t(ViewPort), t(BoundViewFactory), t(Scope), t(Parser), t(AstParser), t(FilterMap)),
196+
197+
BounceController: (t) => new BounceController(t(Scope)),
198+
BallPositionDirective: (t) => new BallPositionDirective(t(Element), t(Scope)),
199+
};
200+
ngStaticApp(types, metadata, getters, setters)
201+
.addModule(new MyModule())
202+
.run();
137203
}

example/web/hello_world.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:angular/angular.dart';
2+
import 'package:angular/angular_dynamic.dart';
23

34
// This annotation allows Dart to shake away any classes
45
// not used from Dart code nor listed in another @MirrorsUsed.
@@ -16,5 +17,7 @@ class HelloWorldController {
1617
}
1718

1819
main() {
19-
ngBootstrap(module: new Module()..type(HelloWorldController));
20+
ngDynamicApp()
21+
.addModule(new Module()..type(HelloWorldController))
22+
.run();
2023
}

example/web/todo.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
library todo;
22

33
import 'package:angular/angular.dart';
4+
import 'package:angular/angular_dynamic.dart';
45
import 'package:angular/playback/playback_http.dart';
56
import 'todo.dart';
67

@@ -132,5 +133,5 @@ main() {
132133
module.type(HttpBackend, implementedBy: PlaybackHttpBackend);
133134
}
134135

135-
ngBootstrap(module: module);
136+
ngDynamicApp().addModule(module).run();
136137
}

karma-parser-generator/index.js

Lines changed: 0 additions & 3 deletions
This file was deleted.

karma-parser-generator/preprocessor.js

Lines changed: 0 additions & 24 deletions
This file was deleted.

karma-perf.conf.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@ module.exports = function(config) {
2626
'karma-chrome-launcher',
2727
'karma-script-launcher',
2828
'karma-junit-reporter',
29-
'../../../karma-parser-generator',
3029
'../../../karma-parser-getter-setter'
3130
],
3231

3332
preprocessors: {
34-
'test/core/parser/generated_functions.dart': ['parser-generator'],
3533
'test/core/parser/generated_getter_setter.dart': ['parser-getter-setter']
3634
},
3735

karma.conf.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ module.exports = function(config) {
3333
'karma-chrome-launcher',
3434
'karma-script-launcher',
3535
'karma-junit-reporter',
36-
'../../../karma-parser-generator',
3736
'../../../karma-parser-getter-setter'
3837
],
3938

@@ -45,7 +44,6 @@ module.exports = function(config) {
4544
browsers: ['Dartium'],
4645

4746
preprocessors: {
48-
'test/core/parser/generated_functions.dart': ['parser-generator'],
4947
'test/core/parser/generated_getter_setter.dart': ['parser-getter-setter']
5048
},
5149

lib/angular.dart

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -13,45 +13,8 @@ library angular;
1313
import 'dart:html' as dom;
1414
import 'dart:js' as js;
1515
import 'package:di/di.dart';
16-
import 'package:di/dynamic_injector.dart';
1716
import 'package:intl/date_symbol_data_local.dart';
1817

19-
/**
20-
* If you are writing code accessed from Angular expressions, you must include
21-
* your own @MirrorsUsed annotation or ensure that everything is tagged with
22-
* the Ng annotations.
23-
*
24-
* All programs should also include a @MirrorsUsed(override: '*') which
25-
* tells the compiler that only the explicitly listed libraries will
26-
* be reflected over.
27-
*
28-
* This is a short-term fix until we implement a transformer-based solution
29-
* which does not rely on mirrors.
30-
*/
31-
@MirrorsUsed(targets: const [
32-
'angular',
33-
'angular.core',
34-
'angular.core.dom',
35-
'angular.filter',
36-
'angular.perf',
37-
'angular.directive',
38-
'angular.routing',
39-
'angular.core.parser.Parser',
40-
'angular.core.parser.dynamic_parser',
41-
'angular.core.parser.lexer',
42-
'perf_api',
43-
List,
44-
dom.NodeTreeSanitizer,
45-
],
46-
metaTargets: const [
47-
NgInjectableService,
48-
NgDirective,
49-
NgController,
50-
NgComponent,
51-
NgFilter
52-
])
53-
import 'dart:mirrors' show MirrorsUsed;
54-
5518
import 'package:angular/core/module.dart';
5619
import 'package:angular/core_dom/module.dart';
5720
import 'package:angular/directive/module.dart';
@@ -67,8 +30,6 @@ export 'package:angular/core/parser/lexer.dart';
6730
export 'package:angular/directive/module.dart';
6831
export 'package:angular/filter/module.dart';
6932
export 'package:angular/routing/module.dart';
70-
export 'package:angular/change_detection/dirty_checking_change_detector.dart'
71-
show FieldGetter, GetterCache;
7233

7334
part 'bootstrap.dart';
7435
part 'introspection.dart';

0 commit comments

Comments
 (0)