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 {
466466
467467 private static _createHostInjectorBindingData ( bindings : List < ResolvedBinding > ,
468468 bd : List < BindingData > ) {
469+ var visitedIds : Map < number , boolean > = MapWrapper . create ( ) ;
469470 ListWrapper . forEach ( bindings , b => {
470471 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 ) ;
471477 ListWrapper . push ( bd , new BindingData ( ProtoElementInjector . _createBinding ( b ) , LIGHT_DOM ) ) ;
472478 } ) ;
473479 } ) ;
Original file line number Diff line number Diff line change @@ -106,7 +106,7 @@ class NeedsDirectiveFromParent {
106106@Injectable ( )
107107class NeedsDirectiveFromParentOrSelf {
108108 dependency : SimpleDirective ;
109- constructor ( @Parent ( { self :true } ) dependency : SimpleDirective ) { this . dependency = dependency ; }
109+ constructor ( @Parent ( { self : true } ) dependency : SimpleDirective ) { this . dependency = dependency ; }
110110}
111111
112112@Injectable ( )
@@ -478,8 +478,21 @@ export function main() {
478478 expect ( pei . getBindingAtIndex ( i ) . key . token ) . toBe ( i ) ;
479479 }
480480 } ) ;
481- } ) ;
482481
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+ } ) ;
483496 } ) ;
484497
485498 describe ( "ElementInjector" , ( ) => {
You can’t perform that action at this time.
0 commit comments