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

Commit f2c4575

Browse files
committed
fix(parser): ensure only one instance of dynamic parser
1 parent 754a9fd commit f2c4575

File tree

6 files changed

+20
-9
lines changed

6 files changed

+20
-9
lines changed

bin/parser_generator_for_spec.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import 'package:angular/core/parser/parser.dart';
66
import 'package:angular/tools/parser_getter_setter/generator.dart';
77

88
main(arguments) {
9-
Module module = new Module()..bind(Parser, toImplementation: DynamicParser);
10-
module.bind(ParserBackend, toImplementation: DartGetterSetterGen);
9+
Module module = new Module()..bind(Parser, toFactory: (i) => i.get(DynamicParser));
10+
module.bind(ParserBackend, toFactory: (i) => i.get(DartGetterSetterGen));
1111
Injector injector = new DynamicInjector(modules: [module],
1212
allowImplicitInjection: true);
1313

lib/core/module_internal.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ class CoreModule extends Module {
4848
bind(Object, toValue: {}); // RootScope context
4949
bind(VmTurnZone);
5050

51-
bind(Parser, toImplementation: DynamicParser);
52-
bind(ParserBackend, toImplementation: DynamicParserBackend);
51+
bind(Parser, toFactory: (i) => i.get(DynamicParser));
52+
bind(ParserBackend, toFactory: (i) => i.get(DynamicParserBackend));
5353
bind(DynamicParser);
5454
bind(DynamicParserBackend);
5555
bind(Lexer);

lib/tools/expression_extractor.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ main(args) {
5252

5353
printer.write('// Found ${expressions.length} expressions\n');
5454
Module module = new Module()
55-
..bind(Parser, toImplementation: DynamicParser)
56-
..bind(ParserBackend, toImplementation: DartGetterSetterGen);
55+
..bind(Parser, toFactory: (i) => i.get(DynamicParser))
56+
..bind(ParserBackend, toFactory: (i) => i.get(DartGetterSetterGen));
5757
Injector injector =
5858
new DynamicInjector(modules: [module], allowImplicitInjection: true);
5959

lib/tools/transformer/expression_generator.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ class ExpressionGenerator extends Transformer with ResolverTransformer {
4646
.forEach(htmlExtractor.parseHtml)
4747
.then((_) {
4848
var module = new Module()
49-
..bind(Parser, toImplementation: DynamicParser)
50-
..bind(ParserBackend, toImplementation: DartGetterSetterGen);
49+
..bind(Parser, toFactory: (i) => i.get(DynamicParser))
50+
..bind(ParserBackend, toFactory: (i) => i.get(DartGetterSetterGen));
5151
var injector =
5252
new DynamicInjector(modules: [module], allowImplicitInjection: true);
5353

test/core/parser/generated_getter_setter_spec.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'generated_getter_setter.dart' as gen;
77
main() {
88
describe('hybrid getter-setter', () {
99
beforeEachModule((Module module) {
10-
module..bind(Parser, toImplementation: DynamicParser)
10+
module..bind(Parser, toFactory: (i) => i.get(DynamicParser))
1111
..bind(ClosureMap, toValue: gen.closureMap);
1212
});
1313
parser_spec.main();

test/core/parser/parser_spec.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,17 @@ main() {
5656
module.bind(SubstringFormatter);
5757
});
5858

59+
describe('DynamicParser', () {
60+
// This is important because the DynamicParser expects to be a singleton
61+
// to share its cache. It therefore registers with the CacheRegister and
62+
// having more than one instance will result in a duplicate registration.
63+
it('should be identical to Parser in dynamic mode', (Parser p, DynamicParser dp) {
64+
if (p is DynamicParser) {
65+
expect(identical(p, dp)).toBeTruthy();;
66+
}
67+
});
68+
});
69+
5970
beforeEach((Parser injectedParser, FormatterMap injectedFormatters) {
6071
parser = injectedParser;
6172
formatters = injectedFormatters;

0 commit comments

Comments
 (0)