public function applyDependencies(AstParserInterface $astParser, AstMap $astMap, DependencyResult $dependencyResult) { foreach ($astMap->getAstClassReferences() as $classReference) { foreach ($astMap->getClassInherits($classReference->getClassName()) as $inherit) { if ($inherit instanceof FlattenAstInherit) { continue; } $dependencyResult->addDependency(new Dependency($classReference->getClassName(), $inherit->getLine(), $inherit->getClassName())); } } }
public function flattenDependencies(AstMap $astMap, DependencyResult $dependencyResult) { foreach ($astMap->getAstClassReferences() as $classReference) { foreach ($astMap->getClassInherits($classReference->getClassName()) as $inherit) { if (!$inherit instanceof FlattenAstInherit) { continue; } foreach ($dependencyResult->getDependenciesByClass($inherit->getClassName()) as $dep) { $dependencyResult->addInheritDependency(new InheritDependency($classReference->getClassName(), $dep->getClassB(), $dep, $inherit)); } } } }
/** * @param AstMap $astMap * @param DependencyResult $dependencyResult * @param ClassNameLayerResolverInterface $classNameLayerResolver * * @return array */ private function calculateLayerDependencies(AstMap $astMap, DependencyResult $dependencyResult, ClassNameLayerResolverInterface $classNameLayerResolver) { $layersDependOnLayers = []; // all classes foreach ($astMap->getAstClassReferences() as $classReferences) { foreach ($classNameLayerResolver->getLayersByClassName($classReferences->getClassName()) as $classReferenceLayer) { $layersDependOnLayers[$classReferenceLayer] = []; } } // dependencies foreach ($dependencyResult->getDependenciesAndInheritDependencies() as $dependency) { $layersA = $classNameLayerResolver->getLayersByClassName($dependency->getClassA()); $layersB = $classNameLayerResolver->getLayersByClassName($dependency->getClassB()); if (empty($layersB)) { continue; } foreach ($layersA as $layerA) { if (!isset($layersDependOnLayers[$layerA])) { $layersDependOnLayers[$layerA] = []; } foreach ($layersB as $layerB) { if ($layerA == $layerB) { continue; } if (!isset($layersDependOnLayers[$layerA][$layerB])) { $layersDependOnLayers[$layerA][$layerB] = 1; continue; } $layersDependOnLayers[$layerA][$layerB] = $layersDependOnLayers[$layerA][$layerB] + 1; } } } return $layersDependOnLayers; }