Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bug symfony#12393 [DependencyInjection] inlined factory not reference…
…d (boekkooi) This PR was submitted for the master branch but it was merged into the 2.3 branch instead (closes symfony#12393). Discussion ---------- [DependencyInjection] inlined factory not referenced | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - While working with the DI I encountered a `You have requested a non-existent service "xxxxx"` exception. Research it seems that a private reference was inlined but the private factory that was also referencing to the service was ignored. A example of the problem: ```XML <service id="manager" class="\stdClass" factory-method="getX" factory-service="factory" public="false"> <argument>X</argument> </service> <service id="repository" class="\stdClass" factory-method="getRepository" factory-service="manager" public="false"> <argument>X</argument> </service> <service id="storage" class="\stdClass" public="false"> <argument type="service" id="manager"/> <argument type="service" id="repository"/> </service> ``` What happens before the patch: 1. repository get's inlined 2. manager get's inlined for the first argument 3. manager get's removed since there was no reference. After the first commit the following will happen: 1. repository get's inlined 2. manager get's inlined for the first argument 3. manager will not be removed since the inlined repository still references manager This introduced a smell since InlineServiceDefinitionsPass was still inlining the manager for the first argument. To fix this I have chosen that not inline factories if they are used more then once by the same definition. So after the second commit the following will happen: 1. repository get's inlined Personally I feel that the InlineServiceDefinitionsPass patch isn't the best possible one but that a different fix would probably mean breaking BC so it's probably a good idea to look at this for Symfony 3.0. Commits ------- 7816a98 [DependencyInjection] inlined factory not referenced
- Loading branch information