addClassResource() public method

Adds the given class hierarchy as resources.
public addClassResource ( ReflectionClass $class ) : ContainerBuilder
$class ReflectionClass
return ContainerBuilder The current instance
 public function process(ContainerBuilder $container)
 {
     $this->parameterBag = $parameterBag = $container->getParameterBag();
     try {
         $preferredServices = (array) $parameterBag->resolveValue("%autowiring.preferred_services%");
     } catch (ParameterNotFoundException $exception) {
         $preferredServices = [];
     }
     try {
         $fastAnnotationChecksRegex = "/" . implode("|", array_map(function ($s) {
             return preg_quote($s);
         }, (array) $parameterBag->resolveValue("%autowiring.fast_annotation_checks%"))) . "/";
     } catch (ParameterNotFoundException $exception) {
         $fastAnnotationChecksRegex = null;
     }
     foreach ($container->getDefinitions() as $serviceId => $definition) {
         if ($this->canDefinitionBeAutowired($serviceId, $definition) === false) {
             continue;
         }
         try {
             $className = $parameterBag->resolveValue($definition->getClass());
             $reflectionClass = new ReflectionClass($className);
             $this->autowireClass($className, $reflectionClass, $definition, $fastAnnotationChecksRegex, $preferredServices, $parameterBag);
             // add files to cache
             $container->addClassResource($reflectionClass);
         } catch (AutowiringException $exception) {
             throw new AutowiringException(sprintf("%s (service: %s)", $exception->getMessage(), $serviceId), $exception->getCode(), $exception);
         }
     }
 }
 /**
  * @covers Symfony\Component\DependencyInjection\ContainerBuilder::addClassResource
  */
 public function testAddClassResource()
 {
     if (!class_exists('Symfony\\Component\\Config\\Resource\\FileResource')) {
         $this->markTestSkipped('The "Config" component is not available');
     }
     $container = new ContainerBuilder();
     $container->setResourceTracking(false);
     $container->addClassResource(new \ReflectionClass('BarClass'));
     $this->assertEmpty($container->getResources(), 'No resources get registered without resource tracking');
     $container->setResourceTracking(true);
     $container->addClassResource(new \ReflectionClass('BarClass'));
     $resources = $container->getResources();
     $this->assertCount(1, $resources, '1 resource was registered');
     /* @var $resource \Symfony\Component\Config\Resource\FileResource */
     $resource = end($resources);
     $this->assertInstanceOf('Symfony\\Component\\Config\\Resource\\FileResource', $resource);
     $this->assertSame(realpath(__DIR__ . '/Fixtures/includes/classes.php'), realpath($resource->getResource()));
 }
 /**
  * @param ContainerBuilder $container
  * @param BundlePlugin $plugin
  * @param array $processedConfiguration The fully processed configuration values for this bundle
  */
 private function loadPlugin(ContainerBuilder $container, BundlePlugin $plugin, array $processedConfiguration)
 {
     $container->addClassResource(new \ReflectionClass(get_class($plugin)));
     $pluginConfiguration = $this->pluginConfiguration($plugin, $processedConfiguration);
     $plugin->load($pluginConfiguration, $container);
 }
 /**
  * @throws \LogicException
  */
 public function generate()
 {
     $pageflowAnnotation = $this->reader->getClassAnnotation($this->controllerClass, 'PHPMentors\\PageflowerBundle\\Annotation\\Pageflow');
     if ($pageflowAnnotation === null) {
         throw new \LogicException(sprintf('Annotation "%s" is not found in class "%s".', 'PHPMentors\\PageflowerBundle\\Annotation\\Pageflow', $this->controllerClass->getName()));
     }
     $pageflowBuilderDefinition = new DefinitionDecorator('phpmentors_pageflower.pageflow_builder');
     $pageflowBuilderDefinition->setArguments(array($this->controllerServiceId));
     $statesFound = false;
     $transitionsFound = false;
     foreach ($pageflowAnnotation->value as $annotation) {
         if ($annotation instanceof States) {
             if ($statesFound) {
                 throw new \LogicException(sprintf('Annotation "%s" must be specified only once.', get_class($annotation)));
             }
             $statesFound = true;
             foreach ($annotation->value as $state) {
                 if ($state instanceof AnnotationInterface) {
                     if ($state->value === null || strlen($state->value) == 0) {
                         throw new \LogicException(sprintf('The value for annotation "%s" cannot be empty.', get_class($state)));
                     }
                     if ($state instanceof Start) {
                         $pageflowBuilderDefinition->addMethodCall('addState', array($state->value));
                         $pageflowBuilderDefinition->addMethodCall('setStartState', array($state->value));
                         $this->states[] = $state->value;
                     } elseif ($state instanceof End) {
                         $pageflowBuilderDefinition->addMethodCall('addState', array($state->value));
                         $pageflowBuilderDefinition->addMethodCall('setEndState', array($state->value, StateInterface::STATE_FINAL));
                         $this->states[] = $state->value;
                     } else {
                         throw new \LogicException(sprintf('State "%s" must be encapsulated with one of [ %s ], "%s" is specified.', $state->value, implode(', ', array('PHPMentors\\PageflowerBundle\\Annotation\\Start', 'PHPMentors\\PageflowerBundle\\Annotation\\End')), get_class($state)));
                     }
                 } else {
                     if ($state === null || strlen($state) == 0) {
                         throw new \LogicException(sprintf('The value for annotation "%s" cannot be empty.', get_class($annotation)));
                     }
                     $pageflowBuilderDefinition->addMethodCall('addState', array($state));
                     $this->states[] = $state;
                 }
             }
         } elseif ($annotation instanceof Transitions) {
             if ($transitionsFound) {
                 throw new \LogicException(sprintf('Annotation "%s" must be specified only once.', get_class($annotation)));
             }
             $transitionsFound = true;
             foreach ($annotation->value as $transition) {
                 if (is_array($transition) && count($transition) == 2 && is_string($transition[0]) && is_string($transition[1])) {
                     foreach (array($transition[0], $transition[1]) as $state) {
                         if ($state === null || strlen($state) == 0) {
                             throw new \LogicException(sprintf('The value for annotation "%s" cannot be empty.', get_class($annotation)));
                         }
                         if (!in_array($state, $this->states)) {
                             throw new \LogicException(sprintf('The value for annotation "%s" must be one of [ %s ], "%s" is specified.', get_class($annotation), implode(', ', $this->states), $state));
                         }
                     }
                     $pageflowBuilderDefinition->addMethodCall('addTransition', array($transition[0], $transition[1], $transition[1]));
                 } else {
                     throw new \LogicException(sprintf('The value for annotation "%s" must be string array, "%s" is specified.', get_class($annotation), var_export($transition, true)));
                 }
             }
         } else {
             throw new \LogicException(sprintf('The value for annotation "%s" must be one of [ %s ], "%s" is specified.', get_class($pageflowAnnotation), implode(', ', array('"PHPMentors\\PageflowerBundle\\Annotation\\States"', '"PHPMentors\\PageflowerBundle\\Annotation\\Transitions"')), is_object($annotation) ? get_class($annotation) : $annotation));
         }
     }
     $pageflowBuilderServiceId = 'phpmentors_pageflower.pageflow_builder.' . $this->controllerServiceId;
     $this->container->setDefinition($pageflowBuilderServiceId, $pageflowBuilderDefinition);
     $pageflowDefinition = new DefinitionDecorator('phpmentors_pageflower.pageflow');
     $pageflowDefinition->setFactoryService($pageflowBuilderServiceId);
     $pageflowServiceId = 'phpmentors_pageflower.pageflow.' . $this->controllerServiceId;
     $this->container->setDefinition($pageflowServiceId, $pageflowDefinition);
     $this->container->getDefinition('phpmentors_pageflower.pageflow_repository')->addMethodCall('add', array(new Reference($pageflowServiceId)));
     $this->container->addClassResource($this->controllerClass);
 }