@@ -22,7 +22,12 @@ import {
2222 PrefixNot
2323} from './parser/ast' ;
2424
25- import { ChangeDispatcher , ChangeDetector , ProtoChangeDetector } from './interfaces' ;
25+ import {
26+ ChangeDispatcher ,
27+ ChangeDetector ,
28+ ProtoChangeDetector ,
29+ ChangeDetectorDefinition
30+ } from './interfaces' ;
2631import { ChangeDetectionUtil } from './change_detection_util' ;
2732import { DynamicChangeDetector } from './dynamic_change_detector' ;
2833import { ChangeDetectorJITGenerator } from './change_detection_jit_generator' ;
@@ -56,56 +61,45 @@ export var __esModule = true;
5661export class DynamicProtoChangeDetector extends ProtoChangeDetector {
5762 _records : List < ProtoRecord > ;
5863
59- constructor ( private _pipeRegistry : PipeRegistry , private _bindingRecords : List < any > ,
60- private _variableBindings : List < any > , private _directiveRecords : List < any > ,
61- private _changeControlStrategy : string ) {
64+ constructor ( private _pipeRegistry : PipeRegistry , private definition : ChangeDetectorDefinition ) {
6265 super ( ) ;
66+ this . _records = this . _createRecords ( definition ) ;
6367 }
6468
6569 instantiate ( dispatcher : any ) {
66- this . _createRecordsIfNecessary ( ) ;
67- return new DynamicChangeDetector ( this . _changeControlStrategy , dispatcher , this . _pipeRegistry ,
68- this . _records , this . _directiveRecords ) ;
70+ return new DynamicChangeDetector ( this . definition . strategy , dispatcher , this . _pipeRegistry ,
71+ this . _records , this . definition . directiveRecords ) ;
6972 }
7073
71- _createRecordsIfNecessary ( ) {
72- if ( isBlank ( this . _records ) ) {
73- var recordBuilder = new ProtoRecordBuilder ( ) ;
74- ListWrapper . forEach ( this . _bindingRecords ,
75- ( b ) => { recordBuilder . addAst ( b , this . _variableBindings ) ; } ) ;
76- this . _records = coalesce ( recordBuilder . records ) ;
77- }
74+ _createRecords ( definition : ChangeDetectorDefinition ) {
75+ var recordBuilder = new ProtoRecordBuilder ( ) ;
76+ ListWrapper . forEach ( definition . bindingRecords ,
77+ ( b ) => { recordBuilder . addAst ( b , definition . variableNames ) ; } ) ;
78+ return coalesce ( recordBuilder . records ) ;
7879 }
7980}
8081
8182var _jitProtoChangeDetectorClassCounter : number = 0 ;
8283export class JitProtoChangeDetector extends ProtoChangeDetector {
8384 _factory : Function ;
8485
85- constructor ( private _pipeRegistry , private _bindingRecords : List < any > ,
86- private _variableBindings : List < any > , private _directiveRecords : List < any > ,
87- private _changeControlStrategy : string ) {
86+ constructor ( private _pipeRegistry , private definition : ChangeDetectorDefinition ) {
8887 super ( ) ;
89- this . _factory = null ;
90- }
91-
92- instantiate ( dispatcher : any ) {
93- this . _createFactoryIfNecessary ( ) ;
94- return this . _factory ( dispatcher , this . _pipeRegistry ) ;
88+ this . _factory = this . _createFactory ( definition ) ;
9589 }
9690
97- _createFactoryIfNecessary ( ) {
98- if ( isBlank ( this . _factory ) ) {
99- var recordBuilder = new ProtoRecordBuilder ( ) ;
100- ListWrapper . forEach ( this . _bindingRecords ,
101- ( b ) => { recordBuilder . addAst ( b , this . _variableBindings ) ; } ) ;
102- var c = _jitProtoChangeDetectorClassCounter ++ ;
103- var records = coalesce ( recordBuilder . records ) ;
104- var typeName = `ChangeDetector ${ c } ` ;
105- this . _factory = new ChangeDetectorJITGenerator ( typeName , this . _changeControlStrategy , records ,
106- this . _directiveRecords )
107- . generate ( ) ;
108- }
91+ instantiate ( dispatcher : any ) { return this . _factory ( dispatcher , this . _pipeRegistry ) ; }
92+
93+ _createFactory ( definition : ChangeDetectorDefinition ) {
94+ var recordBuilder = new ProtoRecordBuilder ( ) ;
95+ ListWrapper . forEach ( definition . bindingRecords ,
96+ ( b ) => { recordBuilder . addAst ( b , definition . variableNames ) ; } ) ;
97+ var c = _jitProtoChangeDetectorClassCounter ++ ;
98+ var records = coalesce ( recordBuilder . records ) ;
99+ var typeName = `ChangeDetector ${ c } ` ;
100+ return new ChangeDetectorJITGenerator ( typeName , definition . strategy , records ,
101+ this . definition . directiveRecords )
102+ . generate ( ) ;
109103 }
110104}
111105
@@ -114,13 +108,13 @@ class ProtoRecordBuilder {
114108
115109 constructor ( ) { this . records = [ ] ; }
116110
117- addAst ( b : BindingRecord , variableBindings : List < any > = null ) {
111+ addAst ( b : BindingRecord , variableNames : List < string > = null ) {
118112 var last = ListWrapper . last ( this . records ) ;
119113 if ( isPresent ( last ) && last . bindingRecord . directiveRecord == b . directiveRecord ) {
120114 last . lastInDirective = false ;
121115 }
122116
123- var pr = _ConvertAstIntoProtoRecords . convert ( b , this . records . length , variableBindings ) ;
117+ var pr = _ConvertAstIntoProtoRecords . convert ( b , this . records . length , variableNames ) ;
124118 if ( ! ListWrapper . isEmpty ( pr ) ) {
125119 var last = ListWrapper . last ( pr ) ;
126120 last . lastInBinding = true ;
@@ -135,12 +129,12 @@ class _ConvertAstIntoProtoRecords {
135129 protoRecords : List < any > ;
136130
137131 constructor ( private bindingRecord : BindingRecord , private contextIndex : number ,
138- private expressionAsString : string , private variableBindings : List < any > ) {
132+ private expressionAsString : string , private variableNames : List < any > ) {
139133 this . protoRecords = [ ] ;
140134 }
141135
142- static convert ( b : BindingRecord , contextIndex : number , variableBindings : List < any > ) {
143- var c = new _ConvertAstIntoProtoRecords ( b , contextIndex , b . ast . toString ( ) , variableBindings ) ;
136+ static convert ( b : BindingRecord , contextIndex : number , variableNames : List < any > ) {
137+ var c = new _ConvertAstIntoProtoRecords ( b , contextIndex , b . ast . toString ( ) , variableNames ) ;
144138 b . ast . visit ( c ) ;
145139 return c . protoRecords ;
146140 }
@@ -159,7 +153,7 @@ class _ConvertAstIntoProtoRecords {
159153
160154 visitAccessMember ( ast : AccessMember ) {
161155 var receiver = ast . receiver . visit ( this ) ;
162- if ( isPresent ( this . variableBindings ) && ListWrapper . contains ( this . variableBindings , ast . name ) &&
156+ if ( isPresent ( this . variableNames ) && ListWrapper . contains ( this . variableNames , ast . name ) &&
163157 ast . receiver instanceof
164158 ImplicitReceiver ) {
165159 return this . _addRecord ( RECORD_TYPE_LOCAL , ast . name , ast . name , [ ] , null , receiver ) ;
@@ -172,7 +166,7 @@ class _ConvertAstIntoProtoRecords {
172166 ;
173167 var receiver = ast . receiver . visit ( this ) ;
174168 var args = this . _visitAll ( ast . args ) ;
175- if ( isPresent ( this . variableBindings ) && ListWrapper . contains ( this . variableBindings , ast . name ) ) {
169+ if ( isPresent ( this . variableNames ) && ListWrapper . contains ( this . variableNames , ast . name ) ) {
176170 var target = this . _addRecord ( RECORD_TYPE_LOCAL , ast . name , ast . name , [ ] , null , receiver ) ;
177171 return this . _addRecord ( RECORD_TYPE_INVOKE_CLOSURE , "closure" , null , args , null , target ) ;
178172 } else {
0 commit comments