/** * @param ServiceDescriptor $sd * @throws NonExistentClassException */ public function check(ServiceDescriptor $sd) { if ($sd->isAlias()) { return; } $class = $sd->getDefinition()->getClass(); if ($this->isParameter($class)) { $class = $sd->getContainer()->getParameter(trim($class, '%')); } $factoryClass = $sd->getDefinition()->getFactoryClass(); if ($this->isParameter($factoryClass)) { $factoryClass = $sd->getContainer()->getParameter(trim($factoryClass, '%')); } if (is_null($class) && is_null($factoryClass)) { return; } if (interface_exists($class) && is_null($factoryClass)) { return; } if (interface_exists($class) && class_exists($factoryClass)) { return; } if (!class_exists($class)) { throw new NonExistentClassException(sprintf('the class %s for the service %s does not exists', $class, $sd->getServiceName())); } }
/** * @param ServiceDescriptor $sd * @throws TooFewConstructorCountArguments * @throws TooManyConstructorCountArguments * @return void */ public function check(ServiceDescriptor $sd) { if ($sd->isAlias()) { return; } $definition = $sd->getDefinition(); $class = $definition->getClass(); if ($this->isParameter($class)) { $class = $sd->getContainer()->getParameter($this->parameterName($class)); } $reflection = new \ReflectionClass($class); if (($factoryClass = $definition->getFactoryClass()) !== null) { if ($this->isParameter($factoryClass)) { $factoryClass = $sd->getContainer()->getParameter($this->parameterName($factoryClass)); } $this->checkFactoryClass($sd, $factoryClass); return; } if (($factoryService = $definition->getFactoryService()) !== null) { $factoryService = $sd->getContainer()->get($factoryService); $this->checkFactoryService($sd, $factoryService); return; } $constructor = $reflection->getConstructor(); if (is_null($constructor) && 0 === count($definition->getArguments())) { return; } $this->compare($sd, $definition->getArguments(), $constructor->getParameters()); }