/** * Converts class hierarchy metadata to definition instances. * * @param ClassHierarchyMetadata $metadata * @return array an array of Definition instances */ public function convert(ClassHierarchyMetadata $metadata) { static $count = 0; $definitions = array(); $previous = null; foreach ($metadata->classMetadata as $classMetadata) { if (null === $previous && null === $classMetadata->parent) { $definition = new Definition(); } else { $definition = new DefinitionDecorator($classMetadata->parent ?: $previous->id); } $definition->setClass($classMetadata->name); if (null !== $classMetadata->scope) { $definition->setScope($classMetadata->scope); } if (null !== $classMetadata->public) { $definition->setPublic($classMetadata->public); } if (null !== $classMetadata->abstract) { $definition->setAbstract($classMetadata->abstract); } if (null !== $classMetadata->lazy) { $definition->setLazy($classMetadata->lazy); } if (null !== $classMetadata->arguments) { $definition->setArguments($classMetadata->arguments); } $definition->setMethodCalls($classMetadata->methodCalls); $definition->setTags($classMetadata->tags); $definition->setProperties($classMetadata->properties); if (null !== $classMetadata->decorates) { if (!method_exists($definition, 'setDecoratedService')) { throw new InvalidAnnotationException(sprintf("decorations require symfony >=2.8 on class %s", $classMetadata->name)); } $definition->setDecoratedService($classMetadata->decorates, $classMetadata->decoration_inner_name); } if (null !== $classMetadata->deprecated && method_exists($definition, 'setDeprecated')) { $definition->setDeprecated(true, $classMetadata->deprecated); } if (null === $classMetadata->id) { $classMetadata->id = '_jms_di_extra.unnamed.service_' . $count++; } if (0 !== count($classMetadata->initMethods)) { foreach ($classMetadata->initMethods as $initMethod) { $definition->addMethodCall($initMethod); } } elseif (null !== $classMetadata->initMethod) { @trigger_error('ClassMetadata::$initMethod is deprecated since version 1.7 and will be removed in 2.0. Use ClassMetadata::$initMethods instead.', E_USER_DEPRECATED); $definition->addMethodCall($classMetadata->initMethod); } $definitions[$classMetadata->id] = $definition; $previous = $classMetadata; } return $definitions; }
/** * Converts class hierarchy metadata to definition instances. * * @param ClassHierarchyMetadata $metadata * @return array an array of Definition instances */ public function convert(ClassHierarchyMetadata $metadata) { static $count = 0; $definitions = array(); $previous = null; foreach ($metadata->classMetadata as $classMetadata) { if (null === $previous && null === $classMetadata->parent) { $definition = new Definition(); } else { $definition = new DefinitionDecorator($classMetadata->parent ?: $previous->id); } $definition->setClass($classMetadata->name); if (null !== $classMetadata->scope) { $definition->setScope($classMetadata->scope); } if (null !== $classMetadata->public) { $definition->setPublic($classMetadata->public); } if (null !== $classMetadata->abstract) { $definition->setAbstract($classMetadata->abstract); } if (null !== $classMetadata->arguments) { $definition->setArguments($classMetadata->arguments); } $definition->setMethodCalls($classMetadata->methodCalls); $definition->setTags($classMetadata->tags); $definition->setProperties($classMetadata->properties); if (null === $classMetadata->id) { $classMetadata->id = '_jms_di_extra.unnamed.service_' . $count++; } if ($classMetadata->initMethod) { if (!method_exists($definition, 'setInitMethod')) { throw new \RuntimeException(sprintf('@AfterSetup is not available on your Symfony version.')); } $definition->setInitMethod($classMetadata->initMethod); } $definitions[$classMetadata->id] = $definition; $previous = $classMetadata; } return $definitions; }