Passed
Push — master ( 65484c...fedbc6 )
by Satoshi
02:08
created

getDependencyGraphBuilder()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace DependencyAnalyzer\DependencyDumper;
5
6
use DependencyAnalyzer\DependencyDumper;
7
use DependencyAnalyzer\DependencyGraph;
8
use DependencyAnalyzer\DependencyGraphBuilder;
9
use DependencyAnalyzer\Exceptions\ResolveDependencyException;
10
use PHPStan\Analyser\Scope;
11
12
/**
13
 * @canOnlyUsedBy \DependencyAnalyzer\DependencyDumper
14
 */
15
class CollectDependenciesVisitor
16
{
17
    /**
18
     * @var DependencyResolver
19
     */
20
    protected $dependencyResolver;
21
22
    /**
23
     * @var DependencyGraphBuilder
24
     */
25
    protected $dependencyGraphBuilder;
26
27
    /**
28
     * @var string
29
     */
30
    protected $file = null;
31
32
    public function __construct(DependencyResolver $dependencyResolver, DependencyGraphBuilder $dependencyGraphBuilder)
33
    {
34
        $this->dependencyResolver = $dependencyResolver;
35
        $this->dependencyGraphBuilder = $dependencyGraphBuilder;
36
    }
37
38
    public function setFile(string $file)
39
    {
40
        $this->file = $file;
41
    }
42
43
    public function __invoke(\PhpParser\Node $node, Scope $scope): void
44
    {
45
        // TODO: collect dependencies to file cache for improve performance
46
47
        try {
48
            $this->dependencyResolver->resolveDependencies($node, $scope, $this->dependencyGraphBuilder);
49
//            foreach ($this->dependencyResolver->resolveDependencies($node, $scope, $this->dependencyGraphBuilder) as $dependeeReflection) {
50
//                if ($dependeeReflection instanceof ClassReflection) {
51
////                    if ($node instanceof MethodCall && $scope->getFunction()) {
52
////                        $dependeeClass = $dependeeReflection;
53
////                        $dependeeFunction = $node->name->name;
54
////
55
////                        $depender = $scope->getClassReflection();
56
////                        $dependerFunction = $scope->getFunction();
57
////                    }
58
//                    $this->addDependency($node, $scope, $dependeeReflection);
59
//                } elseif ($dependeeReflection instanceof UnknownClassReflection) {
60
//                    $this->addUnknownDependency($node, $scope, $dependeeReflection);
61
//                } elseif ($dependeeReflection instanceof PhpFunctionReflection) {
62
//                    // function call
63
//                    // ex:
64
//                    //   array_map(...);
65
//                    //   var_dump(...);
66
//                } else {
67
//                    // error of DependencyResolver
68
//                    throw new ResolveDependencyException($node, 'resolving node dependency is failed.');
69
//                }
70
//            }
71
        } catch (ResolveDependencyException $e) {
72
            DependencyDumper::getObserver()->notifyResolveDependencyError($this->file, $e);
73
        }
74
    }
75
76
    public function getDependencyGraphBuilder(): DependencyGraphBuilder
77
    {
78
        return $this->dependencyGraphBuilder;
79
    }
80
}
81