Completed
Push — psalm-shepherd ( 15ce4b...f3390c )
by Akihito
01:41 queued 14s
created

CodeVisitor::enterNode()   A

Complexity

Conditions 6
Paths 32

Size

Total Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
rs 9.0111
c 0
b 0
f 0
cc 6
nc 32
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Ray\Aop;
6
7
use PhpParser\Node;
8
use PhpParser\Node\Stmt\Class_;
9
use PhpParser\Node\Stmt\ClassMethod;
10
use PhpParser\Node\Stmt\Declare_;
11
use PhpParser\Node\Stmt\Namespace_;
12
use PhpParser\Node\Stmt\Use_;
13
use PhpParser\NodeVisitorAbstract;
14
use Ray\Aop\Exception\MultipleClassInOneFileException;
15
16
final class CodeVisitor extends NodeVisitorAbstract
17
{
18
    /**
19
     * @var Namespace_
20
     */
21
    public $namespace;
22
23
    /**
24
     * @var Declare_[]
25
     */
26
    public $declare = [];
27
28
    /**
29
     * @var Use_[]
30
     */
31
    public $use = [];
32
33
    /**
34
     * @var null|Class_
35
     */
36
    public $class;
37
38
    /**
39
     * @var ClassMethod[]
40
     */
41
    public $classMethod = [];
42
43
    public function enterNode(Node $node)
44
    {
45
        if ($node instanceof Declare_) {
46
            $this->declare[] = $node;
47
        }
48
        if ($node instanceof Use_) {
49
            $this->use[] = $node;
50
        }
51
        if ($node instanceof Namespace_) {
52
            $this->namespace = $node;
53
        }
54
        if ($node instanceof Class_) {
55
            $this->validateClass($node);
56
            $this->class = $node;
57
        }
58
        if ($node instanceof ClassMethod) {
59
            $this->classMethod[] = $node;
60
        }
61
    }
62
63
    private function validateClass(Class_ $class) : void
64
    {
65
        $isClassAlreadyDeclared = $this->class instanceof Class_;
66
        if ($isClassAlreadyDeclared) {
67
            $name = $class->name instanceof Node\Identifier ? $class->name->name : '';
68
69
            throw new MultipleClassInOneFileException($name);
70
        }
71
    }
72
}
73