14
14
use Symfony \Component \DependencyInjection \ChildDefinition ;
15
15
use Symfony \Component \DependencyInjection \ContainerBuilder ;
16
16
use Symfony \Component \DependencyInjection \Definition ;
17
+ use Symfony \Component \DependencyInjection \Exception \RuntimeException ;
17
18
18
19
/**
19
20
* Applies instanceof conditionals to definitions.
@@ -40,7 +41,6 @@ private function processDefinition(ContainerBuilder $container, $id, Definition
40
41
{
41
42
$ instanceofConditionals = $ definition ->getInstanceofConditionals ();
42
43
$ automaticInstanceofConditionals = $ definition ->isAutoconfigured () ? $ container ->getAutomaticInstanceofDefinitions () : array ();
43
-
44
44
if (!$ instanceofConditionals && !$ automaticInstanceofConditionals ) {
45
45
return $ definition ;
46
46
}
@@ -49,14 +49,14 @@ private function processDefinition(ContainerBuilder $container, $id, Definition
49
49
return $ definition ;
50
50
}
51
51
52
- $ conditionals = $ this ->mergeConditionals ($ automaticInstanceofConditionals , $ instanceofConditionals );
52
+ $ conditionals = $ this ->mergeConditionals ($ automaticInstanceofConditionals , $ instanceofConditionals, $ container );
53
53
54
54
$ definition ->setInstanceofConditionals (array ());
55
55
$ parent = $ shared = null ;
56
56
$ instanceofTags = array ();
57
57
58
58
foreach ($ conditionals as $ interface => $ instanceofDefs ) {
59
- if ($ interface !== $ class && (!$ container ->getReflectionClass ($ interface ) || ! $ container -> getReflectionClass ( $ class ))) {
59
+ if ($ interface !== $ class && (!$ container ->getReflectionClass ($ class ))) {
60
60
continue ;
61
61
}
62
62
@@ -113,12 +113,17 @@ private function processDefinition(ContainerBuilder $container, $id, Definition
113
113
return $ definition ;
114
114
}
115
115
116
- private function mergeConditionals (array $ automaticInstanceofConditionals , array $ instanceofConditionals )
116
+ private function mergeConditionals (array $ automaticInstanceofConditionals , array $ instanceofConditionals, ContainerBuilder $ container )
117
117
{
118
118
// make each value an array of ChildDefinition
119
- $ conditionals = array_map (function ($ childDef ) { return array ($ childDef ); }, $ automaticInstanceofConditionals );
119
+ $ conditionals = array_map (function ($ childDef ) { return array ($ childDef ); }, $ automaticInstanceofConditionals );
120
120
121
121
foreach ($ instanceofConditionals as $ interface => $ instanceofDef ) {
122
+ // make sure the interface/class exists (but don't validate automaticInstanceofConditionals)
123
+ if (!$ container ->getReflectionClass ($ interface )) {
124
+ throw new RuntimeException (sprintf ('"%s" is set as an "instanceof" conditional, but it does not exist. ' , $ interface ));
125
+ }
126
+
122
127
if (!isset ($ automaticInstanceofConditionals [$ interface ])) {
123
128
$ conditionals [$ interface ] = array ();
124
129
}
0 commit comments