- /**
- * Create ObjectManager
- *
- * @param array $arguments
- * @return \Magento\Framework\ObjectManagerInterface
- *
- * @SuppressWarnings(PHPMD.NPathComplexity)
- */
- public function create(array $arguments)
- {
- $writeFactory = new \Magento\Framework\Filesystem\Directory\WriteFactory($this->driverPool);
- $generatedFiles = new GeneratedFiles($this->directoryList, $writeFactory);
- $generatedFiles->cleanGeneratedFiles();
-
- $deploymentConfig = $this->createDeploymentConfig($this->directoryList, $this->configFilePool, $arguments);
- $arguments = array_merge($deploymentConfig->get(), $arguments);
- $definitionFactory = new \Magento\Framework\ObjectManager\DefinitionFactory(
- $this->driverPool->getDriver(DriverPool::FILE),
- $this->directoryList->getPath(DirectoryList::DI),
- $this->directoryList->getPath(DirectoryList::GENERATION),
- $deploymentConfig->get(self::CONFIG_PATH_DEFINITION_FORMAT, Serialized::MODE_NAME)
- );
-
- $definitions = $definitionFactory->createClassDefinition($deploymentConfig->get('definitions'));
- $relations = $definitionFactory->createRelations();
-
- /** @var EnvironmentFactory $envFactory */
- $envFactory = new $this->envFactoryClassName($relations, $definitions);
- /** @var EnvironmentInterface $env */
- $env = $envFactory->createEnvironment();
-
- /** @var ConfigInterface $diConfig */
- $diConfig = $env->getDiConfig();
-
- $appMode = isset($arguments[State::PARAM_MODE]) ? $arguments[State::PARAM_MODE] : State::MODE_DEFAULT;
- $booleanUtils = new \Magento\Framework\Stdlib\BooleanUtils();
- $argInterpreter = $this->createArgumentInterpreter($booleanUtils);
- $argumentMapper = new \Magento\Framework\ObjectManager\Config\Mapper\Dom($argInterpreter);
-
- if ($env->getMode() != Environment\Compiled::MODE) {
- $configData = $this->_loadPrimaryConfig($this->directoryList, $this->driverPool, $argumentMapper, $appMode);
- if ($configData) {
- $diConfig->extend($configData);
- }
- }
-
- // set cache profiler decorator if enabled
- if (\Magento\Framework\Profiler::isEnabled()) {
- $cacheFactoryArguments = $diConfig->getArguments('Magento\Framework\App\Cache\Frontend\Factory');
- $cacheFactoryArguments['decorators'][] = [
- 'class' => 'Magento\Framework\Cache\Frontend\Decorator\Profiler',
- 'parameters' => ['backendPrefixes' => ['Zend_Cache_Backend_', 'Cm_Cache_Backend_']],
- ];
- $cacheFactoryConfig = [
- 'Magento\Framework\App\Cache\Frontend\Factory' => ['arguments' => $cacheFactoryArguments]
- ];
- $diConfig->extend($cacheFactoryConfig);
- }
-
- $sharedInstances = [
- 'Magento\Framework\App\DeploymentConfig' => $deploymentConfig,
- 'Magento\Framework\App\Filesystem\DirectoryList' => $this->directoryList,
- 'Magento\Framework\Filesystem\DirectoryList' => $this->directoryList,
- 'Magento\Framework\Filesystem\DriverPool' => $this->driverPool,
- 'Magento\Framework\ObjectManager\RelationsInterface' => $relations,
- 'Magento\Framework\Interception\DefinitionInterface' => $definitionFactory->createPluginDefinition(),
- 'Magento\Framework\ObjectManager\ConfigInterface' => $diConfig,
- 'Magento\Framework\Interception\ObjectManager\ConfigInterface' => $diConfig,
- 'Magento\Framework\ObjectManager\DefinitionInterface' => $definitions,
- 'Magento\Framework\Stdlib\BooleanUtils' => $booleanUtils,
- 'Magento\Framework\ObjectManager\Config\Mapper\Dom' => $argumentMapper,
- 'Magento\Framework\ObjectManager\ConfigLoaderInterface' => $env->getObjectManagerConfigLoader(),
- $this->_configClassName => $diConfig,
- ];
- $arguments['shared_instances'] = &$sharedInstances;
- $this->factory = $env->getObjectManagerFactory($arguments);
-
- /** @var \Magento\Framework\ObjectManagerInterface $objectManager */
- $objectManager = new $this->_locatorClassName($this->factory, $diConfig, $sharedInstances);
-
- $this->factory->setObjectManager($objectManager);
- ObjectManager::setInstance($objectManager);