Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
DeepDependenciesCollection
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 2
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 getDependenciesRecursive
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2/**
3 * Extension of DirectDependencies which represents all Composer Packages in the dependency tree.
4 */
5
6namespace BrianHenryIE\Strauss\Composer;
7
8class DeepDependenciesCollection extends DependenciesCollection
9{
10
11    /**
12     * @param array<ComposerPackage> $dependencies
13     */
14    public function __construct(
15        array $dependencies
16    ) {
17        $flatDependencies = [];
18        foreach ($dependencies as $dependency) {
19            $flatDependencies[$dependency->getPackageName()] = $dependency;
20            $flatDependencies = self::getDependenciesRecursive($dependency, $flatDependencies);
21        }
22        parent::__construct($flatDependencies);
23    }
24
25    /**
26     * @param ComposerPackage $composerPackage
27     * @param ComposerPackage[] $flatDependenciesArray
28     *
29     * @return ComposerPackage[]
30     */
31    protected static function getDependenciesRecursive(ComposerPackage $composerPackage, array $flatDependenciesArray): array
32    {
33        foreach ($composerPackage->getDependencies() as $dependency) {
34            if (isset($flatDependenciesArray[$dependency->getPackageName()])) {
35                continue;
36            }
37            $flatDependenciesArray[$dependency->getPackageName()] = $dependency;
38            foreach ($dependency->getDependencies() as $childDependency) {
39                $flatDependenciesArray = array_merge($flatDependenciesArray, self::getDependenciesRecursive($childDependency, $flatDependenciesArray));
40            }
41        }
42        return $flatDependenciesArray;
43    }
44}