setAbstract() public method

Whether this definition is abstract, that means it merely serves as a template for other definitions.
public setAbstract ( boolean $boolean ) : Definition
$boolean boolean
return Definition the current instance
 public function testProcess()
 {
     $container = new ContainerBuilder();
     $simpleFactory = new Definition();
     $simpleProcessor = new Definition('Test\\SimpleProcessor');
     $simpleProcessor->addTag('processor');
     $abstractProcessor = new Definition();
     $abstractProcessor->setAbstract(true);
     $abstractProcessor->addTag('processor');
     $lazyProcessor = new Definition('Test\\LazyProcessor');
     $lazyProcessor->setLazy(true);
     $lazyProcessor->addTag('processor');
     $withArgumentsProcessor = new Definition('Test\\WithArgumentsProcessor', ['test']);
     $withArgumentsProcessor->addTag('processor');
     $container->addDefinitions(['simple_factory' => $simpleFactory, 'simple_processor' => $simpleProcessor, 'abstract_processor' => $abstractProcessor, 'lazy_processor' => $lazyProcessor, 'with_arguments_processor' => $withArgumentsProcessor]);
     $compilerPass = new CleanUpProcessorsCompilerPass('simple_factory', 'processor');
     $compilerPass->process($container);
     $this->assertFalse($container->hasDefinition('simple_processor'));
     $this->assertTrue($container->hasDefinition('abstract_processor'));
     $this->assertTrue($container->hasDefinition('lazy_processor'));
     $this->assertTrue($container->hasDefinition('with_arguments_processor'));
     $methodCalls = $simpleFactory->getMethodCalls();
     $this->assertCount(1, $methodCalls);
     $this->assertEquals(['addProcessor', ['simple_processor', 'Test\\SimpleProcessor']], $methodCalls[0]);
 }
 /**
  * Makes sure abstract service for data cache exists
  *
  * @param ContainerBuilder $container
  */
 protected function ensureAbstractDataCacheExists(ContainerBuilder $container)
 {
     if (!$container->hasDefinition(self::DATA_CACHE_SERVICE)) {
         $definition = new Definition('Oro\\Bundle\\CacheBundle\\Provider\\FilesystemCache', ['%kernel.cache_dir%/oro_data']);
         $definition->setAbstract(true);
         $container->setDefinition(self::DATA_CACHE_SERVICE, $definition);
     }
 }
 /**
  * @test
  */
 public function ifDefinitionIsAbstractDefinitionSkipsValidation()
 {
     $definition = new Definition();
     $definition->setAbstract(true);
     $argumentValidator = $this->createMockArgumentsValidator();
     $argumentValidator->expects($this->never())->method('validate');
     $validator = new DefinitionArgumentsValidator($this->createMockConstructorResolver(), $argumentValidator);
     $validator->validate($definition);
 }
 /**
  * @expectedException \InvalidArgumentException
  */
 public function testExceptionOnAbstractTaggedListener()
 {
     $container = $this->createBuilder();
     $abstractDefinition = new Definition('stdClass');
     $abstractDefinition->setAbstract(true);
     $abstractDefinition->addTag('doctrine.event_listener', array('event' => 'test'));
     $container->setDefinition('a', $abstractDefinition);
     $this->process($container);
 }
 private function registerPayloadResolver(ContainerBuilder $container)
 {
     $definition = new Definition(PayloadResolver::class);
     $definition->setAbstract(true);
     $container->setDefinition('request_object.payload_resolver', $definition);
     $implDefinition = new DefinitionDecorator('request_object.payload_resolver');
     $implDefinition->setClass(HttpPayloadResolver::class);
     $container->setDefinition('request_object.payload_resolver.http', $implDefinition);
 }
 /**
  * @expectedException \InvalidArgumentException
  * @expectedExceptionMessage The service "my-command" tagged "console.command" must not be abstract.
  */
 public function testProcessThrowAnExceptionIfTheServiceIsAbstract()
 {
     $container = new ContainerBuilder();
     $container->addCompilerPass(new AddConsoleCommandPass());
     $definition = new Definition('Symfony\\Bundle\\FrameworkBundle\\Tests\\DependencyInjection\\Compiler\\MyCommand');
     $definition->addTag('console.command');
     $definition->setAbstract(true);
     $container->setDefinition('my-command', $definition);
     $container->compile();
 }
 public function testAbstractDefinitionCanHaveNoClass()
 {
     $definition = new Definition();
     $definition->setAbstract(true);
     $containerBuilder = new ContainerBuilder();
     $validator = new ServiceDefinitionValidator($containerBuilder, $this->createMockDefinitionArgumentsValidator(), $this->createMockMethodCallsValidator());
     try {
         $validator->validate($definition);
     } catch (DefinitionHasNoClassException $e) {
         $this->fail('Abstract definitions should be allowed to have no class');
     }
 }
Example #8
0
 /**
  * @expectedException \InvalidArgumentException
  * @expectedExceptionMessage Invalid "cache.pool" tag for service "app.cache_pool": accepted attributes are
  */
 public function testThrowsExceptionWhenCachePoolTagHasUnknownAttributes()
 {
     $container = new ContainerBuilder();
     $adapter = new Definition();
     $adapter->setAbstract(true);
     $adapter->addTag('cache.pool');
     $container->setDefinition('app.cache_adapter', $adapter);
     $cachePool = new DefinitionDecorator('app.cache_adapter');
     $cachePool->addTag('cache.pool', array('foobar' => 123));
     $container->setDefinition('app.cache_pool', $cachePool);
     $this->cachePoolPass->process($container);
 }
 public function testCacheDefinitions()
 {
     $container = new ContainerBuilder();
     $compiler = new CacheConfigurationPass();
     $compiler->process($container);
     $fileCacheDef = new Definition('Oro\\Bundle\\CacheBundle\\Provider\\FilesystemCache', ['%kernel.cache_dir%/oro']);
     $fileCacheDef->setAbstract(true);
     $this->assertEquals($fileCacheDef, $container->getDefinition(CacheConfigurationPass::FILE_CACHE_SERVICE));
     $dataCacheDef = new Definition('Oro\\Bundle\\CacheBundle\\Provider\\FilesystemCache', ['%kernel.cache_dir%/oro_data']);
     $dataCacheDef->setAbstract(true);
     $this->assertEquals($dataCacheDef, $container->getDefinition(CacheConfigurationPass::DATA_CACHE_SERVICE));
 }
 /**
  * @expectedException \InvalidArgumentException
  * @expectedExceptionMessage Invalid "cache.pool" tag for service "app.cache_pool": accepted attributes are
  */
 public function testThrowsExceptionWhenCachePoolTagHasUnknownAttributes()
 {
     $container = new ContainerBuilder();
     $container->setParameter('kernel.debug', false);
     $container->setParameter('kernel.name', 'app');
     $container->setParameter('kernel.environment', 'prod');
     $container->setParameter('kernel.root_dir', 'foo');
     $adapter = new Definition();
     $adapter->setAbstract(true);
     $adapter->addTag('cache.pool');
     $container->setDefinition('app.cache_adapter', $adapter);
     $cachePool = new DefinitionDecorator('app.cache_adapter');
     $cachePool->addTag('cache.pool', array('foobar' => 123));
     $container->setDefinition('app.cache_pool', $cachePool);
     $this->cachePoolPass->process($container);
 }
 public function testProcess()
 {
     $inlineClass = 'Foo';
     $this->container->setParameter('ezpublish.decorated_fragment_renderer.inline.class', $inlineClass);
     $inlineRendererDef = new Definition($inlineClass);
     $inlineRendererDef->addTag('kernel.fragment_renderer');
     $esiRendererDef = new Definition();
     $esiRendererDef->addTag('kernel.fragment_renderer');
     $hincludeRendererDef = new Definition();
     $hincludeRendererDef->addTag('kernel.fragment_renderer');
     $decoratedFragmentRendererDef = new Definition();
     $decoratedFragmentRendererDef->setAbstract(true);
     $this->setDefinition('fragment.listener', new Definition());
     $this->setDefinition('fragment.renderer.inline', $inlineRendererDef);
     $this->setDefinition('fragment.renderer.esi', $esiRendererDef);
     $this->setDefinition('fragment.renderer.hinclude', $hincludeRendererDef);
     $this->setDefinition('ezpublish.decorated_fragment_renderer', $decoratedFragmentRendererDef);
     $this->compile();
     $this->assertTrue($this->container->hasDefinition('fragment.listener'));
     $fragmentListenerDef = $this->container->getDefinition('fragment.listener');
     $factoryArray = $fragmentListenerDef->getFactory();
     $this->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Reference', $factoryArray[0]);
     $this->assertEquals('buildFragmentListener', $factoryArray[1]);
     $this->assertEquals('ezpublish.fragment_listener.factory', $factoryArray[0]);
     $this->assertTrue($this->container->hasDefinition('fragment.renderer.inline.inner'));
     $this->assertSame($inlineRendererDef, $this->container->getDefinition('fragment.renderer.inline.inner'));
     $this->assertFalse($inlineRendererDef->isPublic());
     $this->assertTrue($this->container->hasDefinition('fragment.renderer.esi.inner'));
     $this->assertSame($esiRendererDef, $this->container->getDefinition('fragment.renderer.esi.inner'));
     $this->assertFalse($esiRendererDef->isPublic());
     $this->assertTrue($this->container->hasDefinition('fragment.renderer.hinclude.inner'));
     $this->assertSame($hincludeRendererDef, $this->container->getDefinition('fragment.renderer.hinclude.inner'));
     $this->assertFalse($hincludeRendererDef->isPublic());
     $this->assertContainerBuilderHasServiceDefinitionWithParent('fragment.renderer.inline', 'ezpublish.decorated_fragment_renderer');
     $decoratedInlineDef = $this->container->getDefinition('fragment.renderer.inline');
     $this->assertSame(array('kernel.fragment_renderer' => array(array())), $decoratedInlineDef->getTags());
     $this->assertEquals(array(new Reference('fragment.renderer.inline.inner')), $decoratedInlineDef->getArguments());
     $this->assertSame($inlineClass, $decoratedInlineDef->getClass());
     $this->assertContainerBuilderHasServiceDefinitionWithParent('fragment.renderer.esi', 'ezpublish.decorated_fragment_renderer');
     $decoratedEsiDef = $this->container->getDefinition('fragment.renderer.esi');
     $this->assertSame(array('kernel.fragment_renderer' => array(array())), $decoratedEsiDef->getTags());
     $this->assertEquals(array(new Reference('fragment.renderer.esi.inner')), $decoratedEsiDef->getArguments());
     $this->assertContainerBuilderHasServiceDefinitionWithParent('fragment.renderer.hinclude', 'ezpublish.decorated_fragment_renderer');
     $decoratedHincludeDef = $this->container->getDefinition('fragment.renderer.hinclude');
     $this->assertSame(array('kernel.fragment_renderer' => array(array())), $decoratedHincludeDef->getTags());
     $this->assertEquals(array(new Reference('fragment.renderer.hinclude.inner')), $decoratedHincludeDef->getArguments());
 }
 private function getAllParameters()
 {
     $service = new Definition();
     $service->setClass('stdClass');
     $service->setAbstract(true);
     $service->setFactoryClass('stdClass');
     $service->setFactoryMethod('get');
     $service->setFactoryService('service.fact');
     $service->setFile('/file.php');
     $service->setLazy(true);
     $service->addMethodCall('methodCall1');
     $service->addMethodCall('methodCall2', array('arg1', 'arg2'));
     $service->addMethodCall('methodCall3', array(new Reference('arg.one')));
     $service->setProperty('prop1', 'val1');
     $service->setProperty('prop2', new Reference('prop.one'));
     $service->setPublic(false);
     $service->setScope('request');
     $service->setSynchronized(true);
     $service->setSynthetic(true);
     return new ServiceElement('service.two', $service);
 }
Example #13
0
    /**
     * Parses a definition.
     *
     * @param string $id
     * @param array  $service
     * @param string $file
     *
     * @throws InvalidArgumentException When tags are invalid
     */
    private function parseDefinition($id, $service, $file)
    {
        if (is_string($service) && 0 === strpos($service, '@')) {
            $this->container->setAlias($id, substr($service, 1));

            return;
        } elseif (isset($service['alias'])) {
            $public = !array_key_exists('public', $service) || (Boolean) $service['public'];
            $this->container->setAlias($id, new Alias($service['alias'], $public));

            return;
        }

        if (isset($service['parent'])) {
            $definition = new DefinitionDecorator($service['parent']);
        } else {
            $definition = new Definition();
        }

        if (isset($service['class'])) {
            $definition->setClass($service['class']);
        }

        if (isset($service['scope'])) {
            $definition->setScope($service['scope']);
        }

        if (isset($service['synthetic'])) {
            $definition->setSynthetic($service['synthetic']);
        }

        if (isset($service['public'])) {
            $definition->setPublic($service['public']);
        }

        if (isset($service['abstract'])) {
            $definition->setAbstract($service['abstract']);
        }

        if (isset($service['factory_class'])) {
            $definition->setFactoryClass($service['factory_class']);
        }

        if (isset($service['factory_method'])) {
            $definition->setFactoryMethod($service['factory_method']);
        }

        if (isset($service['factory_service'])) {
            $definition->setFactoryService($service['factory_service']);
        }

        if (isset($service['file'])) {
            $definition->setFile($service['file']);
        }

        if (isset($service['arguments'])) {
            $definition->setArguments($this->resolveServices($service['arguments']));
        }

        if (isset($service['properties'])) {
            $definition->setProperties($this->resolveServices($service['properties']));
        }

        if (isset($service['configurator'])) {
            if (is_string($service['configurator'])) {
                $definition->setConfigurator($service['configurator']);
            } else {
                $definition->setConfigurator(array($this->resolveServices($service['configurator'][0]), $service['configurator'][1]));
            }
        }

        if (isset($service['calls'])) {
            foreach ($service['calls'] as $call) {
                $args = isset($call[1]) ? $this->resolveServices($call[1]) : array();
                $definition->addMethodCall($call[0], $args);
            }
        }

        if (isset($service['tags'])) {
            if (!is_array($service['tags'])) {
                throw new InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in %s.', $id, $file));
            }

            foreach ($service['tags'] as $tag) {
                if (!isset($tag['name'])) {
                    throw new InvalidArgumentException(sprintf('A "tags" entry is missing a "name" key for service "%s" in %s.', $id, $file));
                }

                $name = $tag['name'];
                unset($tag['name']);

                foreach ($tag as $attribute => $value) {
                    if (!is_scalar($value)) {
                        throw new InvalidArgumentException(sprintf('A "tags" attribute must be of a scalar-type for service "%s", tag "%s" in %s.', $id, $name, $file));
                    }
                }

                $definition->addTag($name, $tag);
            }
        }

        $this->container->setDefinition($id, $definition);
    }
 /**
  * Resolves the definition
  *
  * @param string              $id         The definition identifier
  * @param DefinitionDecorator $definition
  *
  * @return Definition
  */
 private function resolveDefinition($id, DefinitionDecorator $definition)
 {
     if (!$this->container->hasDefinition($parent = $definition->getParent())) {
         throw new RuntimeException(sprintf('The parent definition "%s" defined for definition "%s" does not exist.', $parent, $id));
     }
     $parentDef = $this->container->getDefinition($parent);
     if ($parentDef instanceof DefinitionDecorator) {
         $parentDef = $this->resolveDefinition($parent, $parentDef);
     }
     $this->compiler->addLogMessage($this->formatter->formatResolveInheritance($this, $id, $parent));
     $def = new Definition();
     // merge in parent definition
     // purposely ignored attributes: scope, abstract, tags
     $def->setClass($parentDef->getClass());
     $def->setArguments($parentDef->getArguments());
     $def->setMethodCalls($parentDef->getMethodCalls());
     $def->setProperties($parentDef->getProperties());
     $def->setFactoryClass($parentDef->getFactoryClass());
     $def->setFactoryMethod($parentDef->getFactoryMethod());
     $def->setFactoryService($parentDef->getFactoryService());
     $def->setConfigurator($parentDef->getConfigurator());
     $def->setFile($parentDef->getFile());
     $def->setPublic($parentDef->isPublic());
     // overwrite with values specified in the decorator
     $changes = $definition->getChanges();
     if (isset($changes['class'])) {
         $def->setClass($definition->getClass());
     }
     if (isset($changes['factory_class'])) {
         $def->setFactoryClass($definition->getFactoryClass());
     }
     if (isset($changes['factory_method'])) {
         $def->setFactoryMethod($definition->getFactoryMethod());
     }
     if (isset($changes['factory_service'])) {
         $def->setFactoryService($definition->getFactoryService());
     }
     if (isset($changes['configurator'])) {
         $def->setConfigurator($definition->getConfigurator());
     }
     if (isset($changes['file'])) {
         $def->setFile($definition->getFile());
     }
     if (isset($changes['public'])) {
         $def->setPublic($definition->isPublic());
     }
     // merge arguments
     foreach ($definition->getArguments() as $k => $v) {
         if (is_numeric($k)) {
             $def->addArgument($v);
             continue;
         }
         if (0 !== strpos($k, 'index_')) {
             throw new RuntimeException(sprintf('Invalid argument key "%s" found.', $k));
         }
         $index = (int) substr($k, strlen('index_'));
         $def->replaceArgument($index, $v);
     }
     // merge properties
     foreach ($definition->getProperties() as $k => $v) {
         $def->setProperty($k, $v);
     }
     // append method calls
     if (count($calls = $definition->getMethodCalls()) > 0) {
         $def->setMethodCalls(array_merge($def->getMethodCalls(), $calls));
     }
     // these attributes are always taken from the child
     $def->setAbstract($definition->isAbstract());
     $def->setScope($definition->getScope());
     $def->setTags($definition->getTags());
     // set new definition on container
     $this->container->setDefinition($id, $def);
     return $def;
 }
 protected function parseDefinition($id, $service, $file)
 {
     if (is_string($service) && 0 === strpos($service, '@')) {
         $this->container->setAlias($id, substr($service, 1));
         return;
     } else {
         if (isset($service['alias'])) {
             $public = !array_key_exists('public', $service) || (bool) $service['public'];
             $this->container->setAlias($id, new Alias($service['alias'], $public));
             return;
         }
     }
     if (isset($service['parent'])) {
         $definition = new DefinitionDecorator($service['parent']);
     } else {
         $definition = new Definition();
     }
     if (isset($service['class'])) {
         $definition->setClass($service['class']);
     }
     if (isset($service['scope'])) {
         $definition->setScope($service['scope']);
     }
     if (isset($service['synthetic'])) {
         $definition->setSynthetic($service['synthetic']);
     }
     if (isset($service['public'])) {
         $definition->setPublic($service['public']);
     }
     if (isset($service['abstract'])) {
         $definition->setAbstract($service['abstract']);
     }
     if (isset($service['factory_method'])) {
         $definition->setFactoryMethod($service['factory_method']);
     }
     if (isset($service['factory_service'])) {
         $definition->setFactoryService($service['factory_service']);
     }
     if (isset($service['file'])) {
         $definition->setFile($service['file']);
     }
     if (isset($service['arguments'])) {
         $definition->setArguments($this->resolveServices($service['arguments']));
     }
     if (isset($service['configurator'])) {
         if (is_string($service['configurator'])) {
             $definition->setConfigurator($service['configurator']);
         } else {
             $definition->setConfigurator(array($this->resolveServices($service['configurator'][0]), $service['configurator'][1]));
         }
     }
     if (isset($service['calls'])) {
         foreach ($service['calls'] as $call) {
             $definition->addMethodCall($call[0], $this->resolveServices($call[1]));
         }
     }
     if (isset($service['tags'])) {
         foreach ($service['tags'] as $tag) {
             $name = $tag['name'];
             unset($tag['name']);
             $definition->addTag($name, $tag);
         }
     }
     $this->container->setDefinition($id, $definition);
 }
 /**
  * Set the definition property (public/abstract/scope/file) into definition object if it exists.
  *
  * @param Definition $definition definition object to hydrate
  * @param array      $array      raw definition datas
  */
 private function setDefinitionProperties(Definition $definition, array $array)
 {
     if (isset($array['public'])) {
         $definition->setPublic($array['public']);
     }
     if (isset($array['abstract'])) {
         $definition->setAbstract($array['abstract']);
     }
     if (isset($array['scope'])) {
         $definition->setScope($array['scope']);
     }
     if (isset($array['file'])) {
         $definition->setFile($array['file']);
     }
 }
Example #17
0
 /**
  * Parses a definition.
  *
  * @param string $id
  * @param array  $service
  * @param string $file
  *
  * @throws InvalidArgumentException When tags are invalid
  */
 private function parseDefinition($id, $service, $file)
 {
     if (is_string($service) && 0 === strpos($service, '@')) {
         $this->container->setAlias($id, substr($service, 1));
         return;
     }
     if (!is_array($service)) {
         throw new InvalidArgumentException(sprintf('A service definition must be an array or a string starting with "@" but %s found for service "%s" in %s. Check your YAML syntax.', gettype($service), $id, $file));
     }
     static::checkDefinition($id, $service, $file);
     if (isset($service['alias'])) {
         $public = !array_key_exists('public', $service) || (bool) $service['public'];
         $this->container->setAlias($id, new Alias($service['alias'], $public));
         foreach ($service as $key => $value) {
             if (!in_array($key, array('alias', 'public'))) {
                 @trigger_error(sprintf('The configuration key "%s" is unsupported for alias definition "%s" in "%s". Allowed configuration keys are "alias" and "public". The YamlFileLoader will raise an exception in Symfony 4.0, instead of silently ignoring unsupported attributes.', $key, $id, $file), E_USER_DEPRECATED);
             }
         }
         return;
     }
     if (isset($service['parent'])) {
         $definition = new DefinitionDecorator($service['parent']);
     } else {
         $definition = new Definition();
     }
     if (isset($service['class'])) {
         $definition->setClass($service['class']);
     }
     if (isset($service['shared'])) {
         $definition->setShared($service['shared']);
     }
     if (isset($service['synthetic'])) {
         $definition->setSynthetic($service['synthetic']);
     }
     if (isset($service['lazy'])) {
         $definition->setLazy($service['lazy']);
     }
     if (isset($service['public'])) {
         $definition->setPublic($service['public']);
     }
     if (isset($service['abstract'])) {
         $definition->setAbstract($service['abstract']);
     }
     if (array_key_exists('deprecated', $service)) {
         $definition->setDeprecated(true, $service['deprecated']);
     }
     if (isset($service['factory'])) {
         $definition->setFactory($this->parseCallable($service['factory'], 'factory', $id, $file));
     }
     if (isset($service['file'])) {
         $definition->setFile($service['file']);
     }
     if (isset($service['arguments'])) {
         $definition->setArguments($this->resolveServices($service['arguments']));
     }
     if (isset($service['properties'])) {
         $definition->setProperties($this->resolveServices($service['properties']));
     }
     if (isset($service['configurator'])) {
         $definition->setConfigurator($this->parseCallable($service['configurator'], 'configurator', $id, $file));
     }
     if (isset($service['calls'])) {
         if (!is_array($service['calls'])) {
             throw new InvalidArgumentException(sprintf('Parameter "calls" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
         }
         foreach ($service['calls'] as $call) {
             if (isset($call['method'])) {
                 $method = $call['method'];
                 $args = isset($call['arguments']) ? $this->resolveServices($call['arguments']) : array();
             } else {
                 $method = $call[0];
                 $args = isset($call[1]) ? $this->resolveServices($call[1]) : array();
             }
             $definition->addMethodCall($method, $args);
         }
     }
     if (isset($service['tags'])) {
         if (!is_array($service['tags'])) {
             throw new InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
         }
         foreach ($service['tags'] as $tag) {
             if (!is_array($tag)) {
                 throw new InvalidArgumentException(sprintf('A "tags" entry must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
             }
             if (!isset($tag['name'])) {
                 throw new InvalidArgumentException(sprintf('A "tags" entry is missing a "name" key for service "%s" in %s.', $id, $file));
             }
             if (!is_string($tag['name']) || '' === $tag['name']) {
                 throw new InvalidArgumentException(sprintf('The tag name for service "%s" in %s must be a non-empty string.', $id, $file));
             }
             $name = $tag['name'];
             unset($tag['name']);
             foreach ($tag as $attribute => $value) {
                 if (!is_scalar($value) && null !== $value) {
                     throw new InvalidArgumentException(sprintf('A "tags" attribute must be of a scalar-type for service "%s", tag "%s", attribute "%s" in %s. Check your YAML syntax.', $id, $name, $attribute, $file));
                 }
             }
             $definition->addTag($name, $tag);
         }
     }
     if (isset($service['decorates'])) {
         if ('' !== $service['decorates'] && '@' === $service['decorates'][0]) {
             throw new InvalidArgumentException(sprintf('The value of the "decorates" option for the "%s" service must be the id of the service without the "@" prefix (replace "%s" with "%s").', $id, $service['decorates'], substr($service['decorates'], 1)));
         }
         $renameId = isset($service['decoration_inner_name']) ? $service['decoration_inner_name'] : null;
         $priority = isset($service['decoration_priority']) ? $service['decoration_priority'] : 0;
         $definition->setDecoratedService($service['decorates'], $renameId, $priority);
     }
     if (isset($service['autowire'])) {
         $definition->setAutowired($service['autowire']);
     }
     if (isset($service['autowiring_types'])) {
         if (is_string($service['autowiring_types'])) {
             $definition->addAutowiringType($service['autowiring_types']);
         } else {
             if (!is_array($service['autowiring_types'])) {
                 throw new InvalidArgumentException(sprintf('Parameter "autowiring_types" must be a string or an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
             }
             foreach ($service['autowiring_types'] as $autowiringType) {
                 if (!is_string($autowiringType)) {
                     throw new InvalidArgumentException(sprintf('A "autowiring_types" attribute must be of type string for service "%s" in %s. Check your YAML syntax.', $id, $file));
                 }
                 $definition->addAutowiringType($autowiringType);
             }
         }
     }
     $this->container->setDefinition($id, $definition);
 }
Example #18
0
    public function testAbstractAlias()
    {
        $container = new ContainerBuilder();

        $abstract = new Definition('AbstractClass');
        $abstract->setAbstract(true);

        $container->setDefinition('abstract_service', $abstract);
        $container->setAlias('abstract_alias', 'abstract_service');

        $container->compile();

        $this->assertSame('abstract_service', (string) $container->getAlias('abstract_alias'));
    }
Example #19
0
 /**
  * Parses a definition.
  *
  * @param string $id
  * @param array  $service
  * @param string $file
  *
  * @throws InvalidArgumentException When tags are invalid
  */
 private function parseDefinition($id, $service, $file)
 {
     if (is_string($service) && 0 === strpos($service, '@')) {
         $this->container->setAlias($id, substr($service, 1));
         return;
     }
     if (!is_array($service)) {
         throw new InvalidArgumentException(sprintf('A service definition must be an array or a string starting with "@" but %s found for service "%s" in %s. Check your YAML syntax.', gettype($service), $id, $file));
     }
     if (isset($service['alias'])) {
         $public = !array_key_exists('public', $service) || (bool) $service['public'];
         $this->container->setAlias($id, new Alias($service['alias'], $public));
         return;
     }
     if (isset($service['parent'])) {
         $definition = new DefinitionDecorator($service['parent']);
     } else {
         $definition = new Definition();
     }
     if (isset($service['class'])) {
         $definition->setClass($service['class']);
     }
     if (isset($service['scope'])) {
         $definition->setScope($service['scope']);
     }
     if (isset($service['synthetic'])) {
         $definition->setSynthetic($service['synthetic']);
     }
     if (isset($service['synchronized'])) {
         @trigger_error(sprintf('The "synchronized" key of service "%s" in file "%s" is deprecated since version 2.7 and will be removed in 3.0.', $id, $file), E_USER_DEPRECATED);
         $definition->setSynchronized($service['synchronized'], 'request' !== $id);
     }
     if (isset($service['lazy'])) {
         $definition->setLazy($service['lazy']);
     }
     if (isset($service['public'])) {
         $definition->setPublic($service['public']);
     }
     if (isset($service['abstract'])) {
         $definition->setAbstract($service['abstract']);
     }
     if (isset($service['factory'])) {
         if (is_string($service['factory'])) {
             if (strpos($service['factory'], ':') !== false && strpos($service['factory'], '::') === false) {
                 $parts = explode(':', $service['factory']);
                 $definition->setFactory(array($this->resolveServices('@' . $parts[0]), $parts[1]));
             } else {
                 $definition->setFactory($service['factory']);
             }
         } else {
             $definition->setFactory(array($this->resolveServices($service['factory'][0]), $service['factory'][1]));
         }
     }
     if (isset($service['factory_class'])) {
         @trigger_error(sprintf('The "factory_class" key of service "%s" in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use "factory" instead.', $id, $file), E_USER_DEPRECATED);
         $definition->setFactoryClass($service['factory_class']);
     }
     if (isset($service['factory_method'])) {
         @trigger_error(sprintf('The "factory_method" key of service "%s" in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use "factory" instead.', $id, $file), E_USER_DEPRECATED);
         $definition->setFactoryMethod($service['factory_method']);
     }
     if (isset($service['factory_service'])) {
         @trigger_error(sprintf('The "factory_service" key of service "%s" in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use "factory" instead.', $id, $file), E_USER_DEPRECATED);
         $definition->setFactoryService($service['factory_service']);
     }
     if (isset($service['file'])) {
         $definition->setFile($service['file']);
     }
     if (isset($service['arguments'])) {
         $definition->setArguments($this->resolveServices($service['arguments']));
     }
     if (isset($service['properties'])) {
         $definition->setProperties($this->resolveServices($service['properties']));
     }
     if (isset($service['configurator'])) {
         if (is_string($service['configurator'])) {
             $definition->setConfigurator($service['configurator']);
         } else {
             $definition->setConfigurator(array($this->resolveServices($service['configurator'][0]), $service['configurator'][1]));
         }
     }
     if (isset($service['calls'])) {
         if (!is_array($service['calls'])) {
             throw new InvalidArgumentException(sprintf('Parameter "calls" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
         }
         foreach ($service['calls'] as $call) {
             if (isset($call['method'])) {
                 $method = $call['method'];
                 $args = isset($call['arguments']) ? $this->resolveServices($call['arguments']) : array();
             } else {
                 $method = $call[0];
                 $args = isset($call[1]) ? $this->resolveServices($call[1]) : array();
             }
             $definition->addMethodCall($method, $args);
         }
     }
     if (isset($service['tags'])) {
         if (!is_array($service['tags'])) {
             throw new InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
         }
         foreach ($service['tags'] as $tag) {
             if (!is_array($tag)) {
                 throw new InvalidArgumentException(sprintf('A "tags" entry must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
             }
             if (!isset($tag['name'])) {
                 throw new InvalidArgumentException(sprintf('A "tags" entry is missing a "name" key for service "%s" in %s.', $id, $file));
             }
             if (!is_string($tag['name']) || '' === $tag['name']) {
                 throw new InvalidArgumentException(sprintf('The tag name for service "%s" in %s must be a non-empty string.', $id, $file));
             }
             $name = $tag['name'];
             unset($tag['name']);
             foreach ($tag as $attribute => $value) {
                 if (!is_scalar($value) && null !== $value) {
                     throw new InvalidArgumentException(sprintf('A "tags" attribute must be of a scalar-type for service "%s", tag "%s", attribute "%s" in %s. Check your YAML syntax.', $id, $name, $attribute, $file));
                 }
             }
             $definition->addTag($name, $tag);
         }
     }
     if (isset($service['decorates'])) {
         if ('' !== $service['decorates'] && '@' === $service['decorates'][0]) {
             throw new InvalidArgumentException(sprintf('The value of the "decorates" option for the "%s" service must be the id of the service without the "@" prefix (replace "%s" with "%s").', $id, $service['decorates'], substr($service['decorates'], 1)));
         }
         $renameId = isset($service['decoration_inner_name']) ? $service['decoration_inner_name'] : null;
         $definition->setDecoratedService($service['decorates'], $renameId);
     }
     $this->container->setDefinition($id, $definition);
 }
 /**
  * @param string $userType
  * @param string $userModel
  * @param ContainerBuilder $container
  */
 private function createProviders($userType, $userModel, ContainerBuilder $container)
 {
     $repositoryServiceId = sprintf('sylius.repository.%s_user', $userType);
     $abstractProviderServiceId = sprintf('sylius.%s_user.provider', $userType);
     $providerEmailBasedServiceId = sprintf('sylius.%s_user.provider.email_based', $userType);
     $providerNameBasedServiceId = sprintf('sylius.%s_user.provider.name_based', $userType);
     $providerEmailOrNameBasedServiceId = sprintf('sylius.%s_user.provider.email_or_name_based', $userType);
     $abstractProviderDefinition = new Definition(AbstractUserProvider::class);
     $abstractProviderDefinition->setAbstract(true);
     $abstractProviderDefinition->setLazy(true);
     $abstractProviderDefinition->addArgument($userModel);
     $abstractProviderDefinition->addArgument(new Reference($repositoryServiceId));
     $abstractProviderDefinition->addArgument(new Reference('sylius.user.canonicalizer'));
     $container->setDefinition($abstractProviderServiceId, $abstractProviderDefinition);
     $providerEmailBasedDefinition = new DefinitionDecorator($abstractProviderServiceId);
     $providerEmailBasedDefinition->setClass(EmailProvider::class);
     $container->setDefinition($providerEmailBasedServiceId, $providerEmailBasedDefinition);
     $providerNameBasedDefinition = new DefinitionDecorator($abstractProviderServiceId);
     $providerNameBasedDefinition->setClass(UsernameProvider::class);
     $container->setDefinition($providerNameBasedServiceId, $providerNameBasedDefinition);
     $providerEmailOrNameBasedDefinition = new DefinitionDecorator($abstractProviderServiceId);
     $providerEmailOrNameBasedDefinition->setClass(UsernameOrEmailProvider::class);
     $container->setDefinition($providerEmailOrNameBasedServiceId, $providerEmailOrNameBasedDefinition);
 }
Example #21
0
 /**
  * Parses a definition.
  *
  * @param string $id
  * @param array  $service
  * @param string $file
  *
  * @throws InvalidArgumentException When tags are invalid
  */
 private function parseDefinition($id, $service, $file)
 {
     if (is_string($service) && 0 === strpos($service, '@')) {
         $this->container->setAlias($id, substr($service, 1));
         return;
     }
     if (!is_array($service)) {
         throw new InvalidArgumentException(sprintf('A service definition must be an array or a string starting with "@" but %s found for service "%s" in %s. Check your YAML syntax.', gettype($service), $id, $file));
     }
     if (isset($service['alias'])) {
         $public = !array_key_exists('public', $service) || (bool) $service['public'];
         $this->container->setAlias($id, new Alias($service['alias'], $public));
         return;
     }
     if (isset($service['parent'])) {
         $definition = new DefinitionDecorator($service['parent']);
     } else {
         $definition = new Definition();
     }
     if (isset($service['class'])) {
         $definition->setClass($service['class']);
     }
     if (isset($service['scope'])) {
         $definition->setScope($service['scope']);
     }
     if (isset($service['synthetic'])) {
         $definition->setSynthetic($service['synthetic']);
     }
     if (isset($service['synchronized'])) {
         $definition->setSynchronized($service['synchronized']);
     }
     if (isset($service['lazy'])) {
         $definition->setLazy($service['lazy']);
     }
     if (isset($service['public'])) {
         $definition->setPublic($service['public']);
     }
     if (isset($service['abstract'])) {
         $definition->setAbstract($service['abstract']);
     }
     if (isset($service['factory'])) {
         if (is_string($service['factory'])) {
             if (strpos($service['factory'], ':') !== false && strpos($service['factory'], '::') === false) {
                 $parts = explode(':', $service['factory']);
                 $definition->setFactory(array($this->resolveServices('@' . $parts[0]), $parts[1]));
             } else {
                 $definition->setFactory($service['factory']);
             }
         } else {
             $definition->setFactory(array($this->resolveServices($service['factory'][0]), $service['factory'][1]));
         }
     }
     if (isset($service['factory_class'])) {
         $definition->setFactoryClass($service['factory_class']);
     }
     if (isset($service['factory_method'])) {
         $definition->setFactoryMethod($service['factory_method']);
     }
     if (isset($service['factory_service'])) {
         $definition->setFactoryService($service['factory_service']);
     }
     if (isset($service['file'])) {
         $definition->setFile($service['file']);
     }
     if (isset($service['arguments'])) {
         $definition->setArguments($this->resolveServices($service['arguments']));
     }
     if (isset($service['properties'])) {
         $definition->setProperties($this->resolveServices($service['properties']));
     }
     if (isset($service['configurator'])) {
         if (is_string($service['configurator'])) {
             $definition->setConfigurator($service['configurator']);
         } else {
             $definition->setConfigurator(array($this->resolveServices($service['configurator'][0]), $service['configurator'][1]));
         }
     }
     if (isset($service['calls'])) {
         if (!is_array($service['calls'])) {
             throw new InvalidArgumentException(sprintf('Parameter "calls" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
         }
         foreach ($service['calls'] as $call) {
             $args = isset($call[1]) ? $this->resolveServices($call[1]) : array();
             $definition->addMethodCall($call[0], $args);
         }
     }
     if (isset($service['tags'])) {
         if (!is_array($service['tags'])) {
             throw new InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
         }
         foreach ($service['tags'] as $tag) {
             if (!is_array($tag)) {
                 throw new InvalidArgumentException(sprintf('A "tags" entry must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
             }
             if (!isset($tag['name'])) {
                 throw new InvalidArgumentException(sprintf('A "tags" entry is missing a "name" key for service "%s" in %s.', $id, $file));
             }
             $name = $tag['name'];
             unset($tag['name']);
             foreach ($tag as $attribute => $value) {
                 if (!is_scalar($value) && null !== $value) {
                     throw new InvalidArgumentException(sprintf('A "tags" attribute must be of a scalar-type for service "%s", tag "%s", attribute "%s" in %s. Check your YAML syntax.', $id, $name, $attribute, $file));
                 }
             }
             $definition->addTag($name, $tag);
         }
     }
     if (isset($service['decorates'])) {
         $renameId = isset($service['decoration_inner_name']) ? $service['decoration_inner_name'] : null;
         $definition->setDecoratedService($service['decorates'], $renameId);
     }
     $this->container->setDefinition($id, $definition);
 }
 /**
  * Resolves the definition.
  *
  * @param ContainerBuilder    $container  The ContainerBuilder
  * @param DefinitionDecorator $definition
  *
  * @return Definition
  *
  * @throws \RuntimeException When the definition is invalid
  */
 private function resolveDefinition(ContainerBuilder $container, DefinitionDecorator $definition)
 {
     if (!$container->hasDefinition($parent = $definition->getParent())) {
         throw new RuntimeException(sprintf('The parent definition "%s" defined for definition "%s" does not exist.', $parent, $this->currentId));
     }
     $parentDef = $container->getDefinition($parent);
     if ($parentDef instanceof DefinitionDecorator) {
         $id = $this->currentId;
         $this->currentId = $parent;
         $parentDef = $this->resolveDefinition($container, $parentDef);
         $container->setDefinition($parent, $parentDef);
         $this->currentId = $id;
     }
     $this->compiler->addLogMessage($this->formatter->formatResolveInheritance($this, $this->currentId, $parent));
     $def = new Definition();
     // merge in parent definition
     // purposely ignored attributes: scope, abstract, tags
     $def->setClass($parentDef->getClass());
     $def->setArguments($parentDef->getArguments());
     $def->setMethodCalls($parentDef->getMethodCalls());
     $def->setProperties($parentDef->getProperties());
     $def->setAutowiringTypes($parentDef->getAutowiringTypes());
     if ($parentDef->getFactoryClass(false)) {
         $def->setFactoryClass($parentDef->getFactoryClass(false));
     }
     if ($parentDef->getFactoryMethod(false)) {
         $def->setFactoryMethod($parentDef->getFactoryMethod(false));
     }
     if ($parentDef->getFactoryService(false)) {
         $def->setFactoryService($parentDef->getFactoryService(false));
     }
     if ($parentDef->isDeprecated()) {
         $def->setDeprecated(true, $parentDef->getDeprecationMessage('%service_id%'));
     }
     $def->setFactory($parentDef->getFactory());
     $def->setConfigurator($parentDef->getConfigurator());
     $def->setFile($parentDef->getFile());
     $def->setPublic($parentDef->isPublic());
     $def->setLazy($parentDef->isLazy());
     // overwrite with values specified in the decorator
     $changes = $definition->getChanges();
     if (isset($changes['class'])) {
         $def->setClass($definition->getClass());
     }
     if (isset($changes['factory_class'])) {
         $def->setFactoryClass($definition->getFactoryClass(false));
     }
     if (isset($changes['factory_method'])) {
         $def->setFactoryMethod($definition->getFactoryMethod(false));
     }
     if (isset($changes['factory_service'])) {
         $def->setFactoryService($definition->getFactoryService(false));
     }
     if (isset($changes['factory'])) {
         $def->setFactory($definition->getFactory());
     }
     if (isset($changes['configurator'])) {
         $def->setConfigurator($definition->getConfigurator());
     }
     if (isset($changes['file'])) {
         $def->setFile($definition->getFile());
     }
     if (isset($changes['public'])) {
         $def->setPublic($definition->isPublic());
     }
     if (isset($changes['lazy'])) {
         $def->setLazy($definition->isLazy());
     }
     if (isset($changes['deprecated'])) {
         $def->setDeprecated($definition->isDeprecated(), $definition->getDeprecationMessage('%service_id%'));
     }
     if (isset($changes['decorated_service'])) {
         $decoratedService = $definition->getDecoratedService();
         if (null === $decoratedService) {
             $def->setDecoratedService($decoratedService);
         } else {
             $def->setDecoratedService($decoratedService[0], $decoratedService[1], $decoratedService[2]);
         }
     }
     // merge arguments
     foreach ($definition->getArguments() as $k => $v) {
         if (is_numeric($k)) {
             $def->addArgument($v);
             continue;
         }
         if (0 !== strpos($k, 'index_')) {
             throw new RuntimeException(sprintf('Invalid argument key "%s" found.', $k));
         }
         $index = (int) substr($k, strlen('index_'));
         $def->replaceArgument($index, $v);
     }
     // merge properties
     foreach ($definition->getProperties() as $k => $v) {
         $def->setProperty($k, $v);
     }
     // append method calls
     if (count($calls = $definition->getMethodCalls()) > 0) {
         $def->setMethodCalls(array_merge($def->getMethodCalls(), $calls));
     }
     // merge autowiring types
     foreach ($definition->getAutowiringTypes() as $autowiringType) {
         $def->addAutowiringType($autowiringType);
     }
     // these attributes are always taken from the child
     $def->setAbstract($definition->isAbstract());
     $def->setScope($definition->getScope(false), false);
     $def->setShared($definition->isShared());
     $def->setTags($definition->getTags());
     return $def;
 }
Example #23
0
 /**
  * Parses a definition
  *
  * @param string $id      The service ID
  * @param array  $service The service definition
  * @param string $file    The file path
  *
  * @throws InvalidArgumentException When tags are invalid
  */
 protected function parseDefinition($id, $service, $file)
 {
     if (is_string($service) && 0 === strpos($service, '@')) {
         $this->container->setAlias($id, substr($service, 1));
         return;
     }
     if (!is_array($service)) {
         $message = sprintf('A service definition must be an array or a string starting with "@" but %s found for ' . 'service "%s" in %s. Check your JSON syntax', gettype($service), $id, $file);
         throw new InvalidArgumentException($message);
     }
     static::checkDefinition($id, $service, $file);
     if (isset($service['alias'])) {
         $public = !array_key_exists('public', $service) || (bool) $service['public'];
         $this->container->setAlias($id, new Alias($service['alias'], $public));
         return;
     }
     if (isset($service['parent'])) {
         $definition = new DefinitionDecorator($service['parent']);
     } else {
         $definition = new Definition();
     }
     if (isset($service['class'])) {
         $definition->setClass($service['class']);
     }
     if (isset($service['shared'])) {
         $definition->setShared($service['shared']);
     }
     if (isset($service['synthetic'])) {
         $definition->setSynthetic($service['synthetic']);
     }
     if (isset($service['lazy'])) {
         $definition->setLazy($service['lazy']);
     }
     if (isset($service['public'])) {
         $definition->setPublic($service['public']);
     }
     if (isset($service['abstract'])) {
         $definition->setAbstract($service['abstract']);
     }
     if (array_key_exists('deprecated', $service)) {
         $definition->setDeprecated(true, $service['deprecated']);
     }
     if (isset($service['factory'])) {
         $definition->setFactory($this->parseCallable($service['factory'], 'factory', $id, $file));
     }
     if (isset($service['file'])) {
         $definition->setFile($service['file']);
     }
     if (isset($service['arguments'])) {
         $definition->setArguments($this->resolveServices($service['arguments']));
     }
     if (isset($service['properties'])) {
         $definition->setProperties($this->resolveServices($service['properties']));
     }
     if (isset($service['configurator'])) {
         $definition->setConfigurator($this->parseCallable($service['configurator'], 'configurator', $id, $file));
     }
     if (isset($service['calls'])) {
         if (!is_array($service['calls'])) {
             $message = sprintf('Parameter "calls" must be an array for service "%s" in %s. Check your JSON syntax', $id, $file);
             throw new InvalidArgumentException($message);
         }
         foreach ($service['calls'] as $call) {
             if (isset($call['method'])) {
                 $method = $call['method'];
                 $args = isset($call['arguments']) ? $this->resolveServices($call['arguments']) : array();
             } else {
                 $method = $call[0];
                 $args = isset($call[1]) ? $this->resolveServices($call[1]) : array();
             }
             $definition->addMethodCall($method, $args);
         }
     }
     if (isset($service['tags'])) {
         if (!is_array($service['tags'])) {
             $message = sprintf('Parameter "tags" must be an array for service "%s" in %s. Check your JSON syntax', $id, $file);
             throw new InvalidArgumentException($message);
         }
         foreach ($service['tags'] as $tag) {
             if (!is_array($tag)) {
                 $message = sprintf('A "tags" entry must be an array for service "%s" in %s. Check your JSON syntax', $id, $file);
                 throw new InvalidArgumentException($message);
             }
             if (!isset($tag['name'])) {
                 $message = sprintf('A "tags" entry is missing a "name" key for service "%s" in %s', $id, $file);
                 throw new InvalidArgumentException($message);
             }
             if (!is_string($tag['name']) || '' === $tag['name']) {
                 $message = sprintf('The tag name for service "%s" in %s must be a non-empty string', $id, $file);
                 throw new InvalidArgumentException($message);
             }
             $name = $tag['name'];
             unset($tag['name']);
             foreach ($tag as $attribute => $value) {
                 if (!is_scalar($value) && null !== $value) {
                     $message = sprintf('A "tags" attribute must be of a scalar-type for service "%s", tag "%s", ' . 'attribute "%s" in %s. Check your JSON syntax', $id, $name, $attribute, $file);
                     throw new InvalidArgumentException($message);
                 }
             }
             $definition->addTag($name, $tag);
         }
     }
     if (isset($service['decorates'])) {
         if ('' !== $service['decorates'] && '@' === $service['decorates'][0]) {
             $message = sprintf('The value of the "decorates" option for the "%s" service must be the id of the service without ' . 'the "@" prefix (replace "%s" with "%s")', $id, $service['decorates'], substr($service['decorates'], 1));
             throw new InvalidArgumentException($message);
         }
         $renameId = isset($service['decoration_inner_name']) ? $service['decoration_inner_name'] : null;
         $priority = isset($service['decoration_priority']) ? $service['decoration_priority'] : 0;
         $definition->setDecoratedService($service['decorates'], $renameId, $priority);
     }
     if (isset($service['autowire'])) {
         $definition->setAutowired($service['autowire']);
     }
     if (isset($service['autowiring_types'])) {
         if (is_string($service['autowiring_types'])) {
             $definition->addAutowiringType($service['autowiring_types']);
         } else {
             if (!is_array($service['autowiring_types'])) {
                 $message = sprintf('Parameter "autowiring_types" must be a string or an array for service "%s" in %s. ' . 'Check your JSON syntax', $id, $file);
                 throw new InvalidArgumentException($message);
             }
             foreach ($service['autowiring_types'] as $autowiringType) {
                 if (!is_string($autowiringType)) {
                     $message = sprintf('A "autowiring_types" attribute must be of type string for service "%s" in %s. ' . 'Check your JSON syntax', $id, $file);
                     throw new InvalidArgumentException($message);
                 }
                 $definition->addAutowiringType($autowiringType);
             }
         }
     }
     $this->container->setDefinition($id, $definition);
 }