diff --git a/lib/internal/Magento/Framework/Module/DependencyChecker.php b/lib/internal/Magento/Framework/Module/DependencyChecker.php index 44f771fb6ca2083bb7363542cb11d2e2488d318a..b4e5d043e4721eaa902661796c1a45a6bff35730 100644 --- a/lib/internal/Magento/Framework/Module/DependencyChecker.php +++ b/lib/internal/Magento/Framework/Module/DependencyChecker.php @@ -33,6 +33,9 @@ class DependencyChecker */ private $graph; + /** @var PackageInfo */ + private $packageInfo; + /** * Constructor * @@ -44,8 +47,8 @@ class DependencyChecker { $this->enabledModuleList = $list->getNames(); $this->fullModuleList = $loader->load(); - $packageInfo = $packageInfoFactory->create(); - $this->graph = $this->createGraph($packageInfo); + $this->packageInfo = $packageInfoFactory->create(); + $this->graph = $this->createGraph(); } /** @@ -93,7 +96,10 @@ class DependencyChecker foreach ($moduleNames as $moduleName) { $dependenciesMissing = []; $paths = $this->graph->findPathsToReachableNodes($moduleName, $graphMode); - foreach (array_keys($this->fullModuleList) as $module) { + $modules = array_merge( + array_keys($this->fullModuleList), $this->packageInfo->getNonExistingDependencies() + ); + foreach ($modules as $module) { if (isset($paths[$module])) { if ($isEnable && !in_array($module, $enabledModules)) { $dependenciesMissing[$module] = $paths[$module]; @@ -110,10 +116,9 @@ class DependencyChecker /** * Create the dependency graph * - * @param PackageInfo $packageInfo * @return Graph */ - private function createGraph(PackageInfo $packageInfo) + private function createGraph() { $nodes = []; $dependencies = []; @@ -121,13 +126,15 @@ class DependencyChecker // build the graph data foreach (array_keys($this->fullModuleList) as $moduleName) { $nodes[] = $moduleName; - foreach ($packageInfo->getRequire($moduleName) as $dependModuleName) { + foreach ($this->packageInfo->getRequire($moduleName) as $dependModuleName) { if ($dependModuleName) { $dependencies[] = [$moduleName, $dependModuleName]; } } } - $nodes = array_unique($nodes); + $nodes = array_unique( + array_merge($nodes, $this->packageInfo->getNonExistingDependencies()) + ); return new Graph($nodes, $dependencies); } diff --git a/lib/internal/Magento/Framework/Module/PackageInfo.php b/lib/internal/Magento/Framework/Module/PackageInfo.php index 97fd828c36d6c3f0540ff8d37808fa172c5f5213..938d357b0a27f92ca2c1228df20433c0bb55c5d3 100644 --- a/lib/internal/Magento/Framework/Module/PackageInfo.php +++ b/lib/internal/Magento/Framework/Module/PackageInfo.php @@ -53,6 +53,9 @@ class PackageInfo */ private $componentRegistrar; + /** @var array */ + protected $nonExistingDependencies = []; + /** * Constructor * @@ -104,7 +107,65 @@ class PackageInfo public function getModuleName($packageName) { $this->load(); - return isset($this->packageModuleMap[$packageName]) ? $this->packageModuleMap[$packageName] : ''; + + $moduleName = null; + if (isset($this->packageModuleMap[$packageName])) { + $moduleName = $this->packageModuleMap[$packageName]; + } else if ($this->isInternalPackage($packageName)) { + $moduleName = $this->convertPackageNameToModuleName($packageName); + $this->addNonExistingDependency($moduleName); + } + + return $moduleName; + } + + /** + * Add non existing dependency + * + * @param $dependency + */ + protected function addNonExistingDependency($dependency) + { + if (!isset($this->nonExistingDependencies[$dependency])) { + $this->nonExistingDependencies[$dependency] = $dependency; + } + } + + /** + * Return list of non existing dependencies + * + * @return array + */ + public function getNonExistingDependencies() + { + return $this->nonExistingDependencies; + } + + /** + * Build module name based on internal package name + * + * @param string $packageName + * @return string|null + */ + protected function convertPackageNameToModuleName($packageName) + { + $moduleName = str_replace('magento/module-', '', $packageName); + $moduleName = str_replace('-', ' ', $moduleName); + $moduleName = ucwords($moduleName); + $moduleName = str_replace(' ', '', $moduleName); + + return 'Magento_' . $moduleName; + } + + /** + * Check if package is internal magento module + * + * @param string $packageName + * @return bool + */ + protected function isInternalPackage($packageName) + { + return strpos($packageName, 'magento/module-') === 0; } /**