/** * Returns constructor with defined arguments * * @param DefinitionsCollection $definitionsCollection * @param ConfigInterface $config * @return array|mixed * @throws \ReflectionException */ private function getConfigForScope(DefinitionsCollection $definitionsCollection, ConfigInterface $config) { $constructors = []; $argumentsResolver = $this->argumentsResolverFactory->create($config); foreach ($definitionsCollection->getInstancesNamesList() as $instanceType) { if (!$this->typeReader->isConcrete($instanceType)) { continue; } $constructor = $definitionsCollection->getInstanceArguments($instanceType); $constructors[$instanceType] = $argumentsResolver->getResolvedConstructorArguments($instanceType, $constructor); } foreach (array_keys($config->getVirtualTypes()) as $instanceType) { $originalType = $config->getInstanceType($instanceType); if (!$definitionsCollection->hasInstance($originalType)) { if (!$this->typeReader->isConcrete($originalType)) { continue; } $constructor = $this->classReaderDecorator->getConstructor($originalType); } else { $constructor = $definitionsCollection->getInstanceArguments($originalType); } $constructors[$instanceType] = $argumentsResolver->getResolvedConstructorArguments($instanceType, $constructor); } return $constructors; }
/** * Filters plugin inheritance list for instances without plugins, and abstract/interface * * @param array $pluginInheritance * @return array */ private function filterNullInheritance($pluginInheritance) { $filteredData = []; foreach ($pluginInheritance as $instance => $plugins) { if (is_null($plugins) || !$this->typeReader->isConcrete($instance)) { continue; } $pluginInstances = []; foreach ($plugins as $plugin) { if (in_array($plugin['instance'], $pluginInstances)) { continue; } $pluginInstances[] = $plugin['instance']; } $filteredData[$instance] = $pluginInstances; } return $filteredData; }