Skip to content

Commit 6e8175a

Browse files
committed
feat(Reflection): extract reflection capabilities into a separate module
1 parent 044625a commit 6e8175a

Some content is hidden

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

46 files changed

+637
-416
lines changed

karma-dart.conf.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ module.exports = function(config) {
4444
// Local dependencies, transpiled from the source.
4545
'/packages/core': 'http://localhost:9877/base/modules/core/src',
4646
'/packages/change_detection': 'http://localhost:9877/base/modules/change_detection/src',
47+
'/packages/reflection': 'http://localhost:9877/base/modules/reflection/src',
4748
'/packages/di': 'http://localhost:9877/base/modules/di/src',
4849
'/packages/facade': 'http://localhost:9877/base/modules/facade/src',
4950
'/packages/test_lib': 'http://localhost:9877/base/modules/test_lib/src',

modules/benchmarks/src/compiler/compiler_benchmark.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ import {MapWrapper} from 'facade/collection';
66
import {AnnotatedType} from 'core/compiler/annotated_type';
77

88
import {Parser} from 'change_detection/parser/parser';
9-
import {ClosureMap} from 'change_detection/parser/closure_map';
109
import {Lexer} from 'change_detection/parser/lexer';
1110

1211
import {Compiler} from 'core/compiler/compiler';
13-
import {Reflector} from 'core/compiler/reflector';
12+
import {DirectiveMetadataReader} from 'core/compiler/directive_metadata_reader';
1413

1514
import {Component} from 'core/annotations/annotations';
1615
import {Decorator} from 'core/annotations/annotations';
@@ -22,10 +21,9 @@ var compiler;
2221
var annotatedComponent;
2322

2423
function setup() {
25-
var closureMap = new ClosureMap();
26-
var reflector = new CachingReflector();
27-
compiler = new Compiler(null, reflector, new Parser(new Lexer(), closureMap), closureMap);
28-
annotatedComponent = reflector.annotatedType(BenchmarkComponent);
24+
var reader = new CachingDirectiveMetadataReader();
25+
compiler = new Compiler(null, reader, new Parser(new Lexer()));
26+
annotatedComponent = reader.annotatedType(BenchmarkComponent);
2927
}
3028

3129
export function main() {
@@ -63,7 +61,7 @@ function loadTemplate(templateId, repeatCount) {
6361
}
6462

6563
// Caching reflector as reflection in Dart using Mirrors
66-
class CachingReflector extends Reflector {
64+
class CachingDirectiveMetadataReader extends DirectiveMetadataReader {
6765
_cache: Map;
6866
constructor() {
6967
this._cache = MapWrapper.create();

modules/change_detection/src/parser/ast.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {FIELD, autoConvertAdd, isBlank, isPresent, FunctionWrapper, BaseException} from "facade/lang";
22
import {List, Map, ListWrapper, MapWrapper} from "facade/collection";
3-
import {ClosureMap} from "./closure_map";
43

54
export class AST {
65
eval(context) {
@@ -316,11 +315,9 @@ export class MethodCall extends AST {
316315

317316
export class FunctionCall extends AST {
318317
target:AST;
319-
closureMap:ClosureMap;
320318
args:List;
321-
constructor(target:AST, closureMap:ClosureMap, args:List) {
319+
constructor(target:AST, args:List) {
322320
this.target = target;
323-
this.closureMap = closureMap;
324321
this.args = args;
325322
}
326323

modules/change_detection/src/parser/closure_map.dart

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

modules/change_detection/src/parser/closure_map.es6

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

modules/change_detection/src/parser/parser.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import {FIELD, int, isBlank, BaseException, StringWrapper} from 'facade/lang';
1+
import {FIELD, int, isBlank, isPresent, BaseException, StringWrapper} from 'facade/lang';
22
import {ListWrapper, List} from 'facade/collection';
33
import {Lexer, EOF, Token, $PERIOD, $COLON, $SEMICOLON, $LBRACKET, $RBRACKET,
44
$COMMA, $LBRACE, $RBRACE, $LPAREN, $RPAREN} from './lexer';
5-
import {ClosureMap} from './closure_map';
5+
import {reflector, Reflector} from 'reflection/reflection';
66
import {
77
AST,
88
ImplicitReceiver,
@@ -29,41 +29,41 @@ var _implicitReceiver = new ImplicitReceiver();
2929

3030
export class Parser {
3131
_lexer:Lexer;
32-
_closureMap:ClosureMap;
33-
constructor(lexer:Lexer, closureMap:ClosureMap){
32+
_reflector:Reflector;
33+
constructor(lexer:Lexer, providedReflector:Reflector = null){
3434
this._lexer = lexer;
35-
this._closureMap = closureMap;
35+
this._reflector = isPresent(providedReflector) ? providedReflector : reflector;
3636
}
3737

3838
parseAction(input:string):ASTWithSource {
3939
var tokens = this._lexer.tokenize(input);
40-
var ast = new _ParseAST(input, tokens, this._closureMap, true).parseChain();
40+
var ast = new _ParseAST(input, tokens, this._reflector, true).parseChain();
4141
return new ASTWithSource(ast, input);
4242
}
4343

4444
parseBinding(input:string):ASTWithSource {
4545
var tokens = this._lexer.tokenize(input);
46-
var ast = new _ParseAST(input, tokens, this._closureMap, false).parseChain();
46+
var ast = new _ParseAST(input, tokens, this._reflector, false).parseChain();
4747
return new ASTWithSource(ast, input);
4848
}
4949

5050
parseTemplateBindings(input:string):List<TemplateBinding> {
5151
var tokens = this._lexer.tokenize(input);
52-
return new _ParseAST(input, tokens, this._closureMap, false).parseTemplateBindings();
52+
return new _ParseAST(input, tokens, this._reflector, false).parseTemplateBindings();
5353
}
5454
}
5555

5656
class _ParseAST {
5757
input:string;
5858
tokens:List<Token>;
59-
closureMap:ClosureMap;
59+
reflector:Reflector;
6060
parseAction:boolean;
6161
index:int;
62-
constructor(input:string, tokens:List, closureMap:ClosureMap, parseAction:boolean) {
62+
constructor(input:string, tokens:List, reflector:Reflector, parseAction:boolean) {
6363
this.input = input;
6464
this.tokens = tokens;
6565
this.index = 0;
66-
this.closureMap = closureMap;
66+
this.reflector = reflector;
6767
this.parseAction = parseAction;
6868
}
6969

@@ -311,7 +311,7 @@ class _ParseAST {
311311
} else if (this.optionalCharacter($LPAREN)) {
312312
var args = this.parseCallArguments();
313313
this.expectCharacter($RPAREN);
314-
result = new FunctionCall(result, this.closureMap, args);
314+
result = new FunctionCall(result, args);
315315

316316
} else {
317317
return result;
@@ -398,12 +398,12 @@ class _ParseAST {
398398
if (this.optionalCharacter($LPAREN)) {
399399
var args = this.parseCallArguments();
400400
this.expectCharacter($RPAREN);
401-
var fn = this.closureMap.fn(id);
401+
var fn = this.reflector.method(id);
402402
return new MethodCall(receiver, fn, args);
403403

404404
} else {
405-
var getter = this.closureMap.getter(id);
406-
var setter = this.closureMap.setter(id);
405+
var getter = this.reflector.getter(id);
406+
var setter = this.reflector.setter(id);
407407
return new AccessMember(receiver, id, getter, setter);
408408
}
409409
}

modules/change_detection/src/record.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {ProtoRecordRange, RecordRange} from './record_range';
22
import {FIELD, isPresent, isBlank, int, StringWrapper, FunctionWrapper, BaseException} from 'facade/lang';
33
import {List, Map, ListWrapper, MapWrapper} from 'facade/collection';
4-
import {ClosureMap} from 'change_detection/parser/closure_map';
54

65
var _fresh = new Object();
76

modules/change_detection/test/change_detector_spec.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {isPresent} from 'facade/lang';
44
import {List, ListWrapper, MapWrapper} from 'facade/collection';
55
import {Parser} from 'change_detection/parser/parser';
66
import {Lexer} from 'change_detection/parser/lexer';
7-
import {ClosureMap} from 'change_detection/parser/closure_map';
87

98
import {
109
ChangeDetector,
@@ -18,7 +17,7 @@ import {Record} from 'change_detection/record';
1817

1918
export function main() {
2019
function ast(exp:string) {
21-
var parser = new Parser(new Lexer(), new ClosureMap());
20+
var parser = new Parser(new Lexer());
2221
return parser.parseBinding(exp).ast;
2322
}
2423

modules/change_detection/test/parser/parser_spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import {ddescribe, describe, it, xit, iit, expect, beforeEach} from 'test_lib/test_lib';
22
import {BaseException, isBlank, isPresent} from 'facade/lang';
3+
import {reflector} from 'reflection/reflection';
34
import {MapWrapper, ListWrapper} from 'facade/collection';
45
import {Parser} from 'change_detection/parser/parser';
56
import {Lexer} from 'change_detection/parser/lexer';
67
import {Formatter, LiteralPrimitive} from 'change_detection/parser/ast';
7-
import {ClosureMap} from 'change_detection/parser/closure_map';
88

99
class TestData {
1010
a;
@@ -31,7 +31,7 @@ export function main() {
3131
}
3232

3333
function createParser() {
34-
return new Parser(new Lexer(), new ClosureMap());
34+
return new Parser(new Lexer(), reflector);
3535
}
3636

3737
function parseAction(text) {

modules/change_detection/test/record_range_spec.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {List, ListWrapper, MapWrapper} from 'facade/collection';
44
import {isPresent} from 'facade/lang';
55
import {Parser} from 'change_detection/parser/parser';
66
import {Lexer} from 'change_detection/parser/lexer';
7-
import {ClosureMap} from 'change_detection/parser/closure_map';
87

98
import {
109
ChangeDetector,

0 commit comments

Comments
 (0)