File tree Expand file tree Collapse file tree 2 files changed +21
-2
lines changed Expand file tree Collapse file tree 2 files changed +21
-2
lines changed Original file line number Diff line number Diff line change @@ -466,8 +466,14 @@ export class ProtoElementInjector {
466
466
467
467
private static _createHostInjectorBindingData ( bindings : List < ResolvedBinding > ,
468
468
bd : List < BindingData > ) {
469
+ var visitedIds : Map < number , boolean > = MapWrapper . create ( ) ;
469
470
ListWrapper . forEach ( bindings , b => {
470
471
ListWrapper . forEach ( b . resolvedHostInjectables , b => {
472
+ if ( MapWrapper . contains ( visitedIds , b . key . id ) ) {
473
+ throw new BaseException (
474
+ `Multiple directives defined the same host injectable: "${ stringify ( b . key . token ) } "` ) ;
475
+ }
476
+ MapWrapper . set ( visitedIds , b . key . id , true ) ;
471
477
ListWrapper . push ( bd , new BindingData ( ProtoElementInjector . _createBinding ( b ) , LIGHT_DOM ) ) ;
472
478
} ) ;
473
479
} ) ;
Original file line number Diff line number Diff line change @@ -106,7 +106,7 @@ class NeedsDirectiveFromParent {
106
106
@Injectable ( )
107
107
class NeedsDirectiveFromParentOrSelf {
108
108
dependency : SimpleDirective ;
109
- constructor ( @Parent ( { self :true } ) dependency : SimpleDirective ) { this . dependency = dependency ; }
109
+ constructor ( @Parent ( { self : true } ) dependency : SimpleDirective ) { this . dependency = dependency ; }
110
110
}
111
111
112
112
@Injectable ( )
@@ -478,8 +478,21 @@ export function main() {
478
478
expect ( pei . getBindingAtIndex ( i ) . key . token ) . toBe ( i ) ;
479
479
}
480
480
} ) ;
481
- } ) ;
482
481
482
+ it ( 'should throw whenever multiple directives declare the same host injectable' , ( ) => {
483
+ expect ( ( ) => {
484
+ createPei ( null , 0 , [
485
+ DirectiveBinding . createFromType ( SimpleDirective , new dirAnn . Component ( {
486
+ hostInjector : [ bind ( 'injectable1' ) . toValue ( 'injectable1' ) ]
487
+ } ) ) ,
488
+ DirectiveBinding . createFromType ( SomeOtherDirective , new dirAnn . Component ( {
489
+ hostInjector : [ bind ( 'injectable1' ) . toValue ( 'injectable2' ) ]
490
+ } ) )
491
+ ] ) ;
492
+ } ) . toThrowError ( 'Multiple directives defined the same host injectable: "injectable1"' ) ;
493
+ } ) ;
494
+
495
+ } ) ;
483
496
} ) ;
484
497
485
498
describe ( "ElementInjector" , ( ) => {
You can’t perform that action at this time.
0 commit comments