From 18c52f1a711b82e0ab07d4636c9d289cc849bc9e Mon Sep 17 00:00:00 2001 From: odain Date: Fri, 19 Sep 2025 16:57:58 +0200 Subject: [PATCH] enhance/fix recursive deps computation --- .../modulesdependencyvalidationservice.php | 4 ++-- setup/moduledependency/validation/xmlmodule.php | 15 +++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/setup/moduledependency/validation/modulesdependencyvalidationservice.php b/setup/moduledependency/validation/modulesdependencyvalidationservice.php index 9b239a9a4..21d461030 100644 --- a/setup/moduledependency/validation/modulesdependencyvalidationservice.php +++ b/setup/moduledependency/validation/modulesdependencyvalidationservice.php @@ -383,7 +383,7 @@ TXT; $aModuleDepsCount = []; /** @var XmlModule $oXmlModule */ foreach ($this->aModules as $oXmlModule) { - $aModuleDepsCount[$oXmlModule->sModuleName] = count($oXmlModule->GetExpandedModuleNames()); + $aModuleDepsCount[$oXmlModule->sModuleName] = count($oXmlModule->GetExpandedModuleNames($this->aModules)); } $aOrderModules=[]; @@ -410,7 +410,7 @@ TXT; foreach ($aModuleDepsCount as $sStillToProcessModuleName => $c){ /** @var XmlModule $oXmlStillToProcessModule */ $oXmlStillToProcessModule = $this->aModules[$sStillToProcessModuleName]; - if (in_array($sModuleName, $oXmlStillToProcessModule->GetExpandedModuleNames())){ + if (in_array($sModuleName, $oXmlStillToProcessModule->GetExpandedModuleNames($this->aModules))){ $aModuleDepsCount[$sStillToProcessModuleName] = $c - 1 ; } } diff --git a/setup/moduledependency/validation/xmlmodule.php b/setup/moduledependency/validation/xmlmodule.php index 0068fc284..4663455b4 100644 --- a/setup/moduledependency/validation/xmlmodule.php +++ b/setup/moduledependency/validation/xmlmodule.php @@ -85,15 +85,22 @@ class XmlModule { } } - public function GetExpandedModuleNames() : array { - if (count($this->aExpandedDependencyModulesNames) ==0){ + private bool $bExpandedModuleNamesComputed=false; + public function GetExpandedModuleNames(array $aModules) : array { + if ($this->bExpandedModuleNamesComputed){ return $this->aExpandedDependencyModulesNames; } + $this->bExpandedModuleNamesComputed = true; + $aRes= []; - foreach ($this->aDependencyModulesNames as $sDependency){ + foreach ($this->aDependencyModulesNames as $sDependency => $oXmlModules){ $oiTopCoreModuleDependency = new ModuleDependency($sDependency); - $aRes = array_merge($aRes, $oiTopCoreModuleDependency->GetPotentialPrerequisiteModuleNames()); + foreach ($oiTopCoreModuleDependency->GetPotentialPrerequisiteModuleNames() as $sName){ + $oDependencyModule = $aModules[$sName] ?? null; + $aRes[]=$sName; + $aRes = array_merge($aRes, $oDependencyModule->GetExpandedModuleNames($aModules)); + } } $this->aExpandedDependencyModulesNames = array_unique($aRes);