/**
  * @param string $class
  * @param Definition $definition
  * @param string[] $classes
  * @param string $id
  * @param ContainerBuilder $container
  */
 private function autowireConstructor($class, Definition $definition, array $classes, $id, ContainerBuilder $container)
 {
     $reflection = new ReflectionClass($class);
     $constructor = $reflection->getConstructor();
     // service not created by factory with public constructor with not fully configured arguments
     if ($constructor !== NULL && $constructor->isPublic() && $definition->getFactoryMethod() === NULL) {
         $autowiredArgs = $this->autowireMethod($constructor, $definition->getArguments(), $classes, $id, $container);
         if ($definition instanceof DefinitionDecorator && $definition->getParent() !== NULL) {
             $parentDef = $container->getDefinition($definition->getParent());
             $parentDefArgsCount = count($parentDef->getArguments());
             $argsToReplace = array();
             foreach ($autowiredArgs as $i => $arg) {
                 if ($i < $parentDefArgsCount) {
                     $argsToReplace[$i] = $arg;
                     unset($autowiredArgs[$i]);
                 }
             }
             $definition->setArguments($autowiredArgs);
             foreach ($argsToReplace as $i => $arg) {
                 $definition->replaceArgument($i, $arg);
             }
         } else {
             $definition->setArguments($autowiredArgs);
         }
     }
 }
Example #2
0
 /**
  * Gets class of the given definition.
  *
  * @param ContainerBuilder $container
  * @param Definition       $definition
  *
  * @return string|null
  */
 private function getClass(ContainerBuilder $container, Definition $definition)
 {
     if ($class = $definition->getClass()) {
         return $class;
     }
     if ($definition instanceof DefinitionDecorator) {
         return $container->getDefinition($definition->getParent())->getClass();
     }
 }
 private function assertUrlPackage(ContainerBuilder $container, Definition $package, $baseUrls, $version, $format)
 {
     $this->assertEquals('assets.url_package', $package->getParent());
     $this->assertEquals($baseUrls, $package->getArgument(0));
     $this->assertVersionStrategy($container, $package->getArgument(1), $version, $format);
 }
 /**
  * Try to hydrate definition array method calls with definition entity.
  *
  * @param Definition $definition       the definition to convert
  * @param array      $definitionArray the definition array (passed by reference)
  */
 private function hydrateDefinitionParent(Definition $definition, array &$definitionArray)
 {
     if ($definition instanceof DefinitionDecorator) {
         $definitionArray['parent'] = $definition->getParent();
     }
 }