CodeVisitor   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 70
Duplicated Lines 0 %

Importance

Changes 5
Bugs 1 Features 0
Metric Value
wmc 10
eloc 27
c 5
b 1
f 0
dl 0
loc 70
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A enterNode() 0 21 4
A enterNodeClass() 0 14 3
A validateClass() 0 7 3
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
    /** @var ?Namespace_ */
19
    public $namespace;
20
21
    /** @var Declare_[] */
22
    public $declare = [];
23
24
    /** @var Use_[] */
25
    public $use = [];
26
27
    /** @var Class_|null */
28
    public $class;
29
30
    /** @var ClassMethod[] */
31
    public $classMethod = [];
32
33
    /**
34
     * @return null
35
     */
36
    public function enterNode(Node $node)
37
    {
38
        if ($node instanceof Declare_) {
39
            $this->declare[] = $node;
40
41
            return null;
42
        }
43
44
        if ($node instanceof Use_) {
45
            $this->use[] = $node;
46
47
            return null;
48
        }
49
50
        if ($node instanceof Namespace_) {
51
            $this->namespace = $node;
52
53
            return null;
54
        }
55
56
        return $this->enterNodeClass($node);
0 ignored issues
show
Bug introduced by
Are you sure the usage of $this->enterNodeClass($node) targeting Ray\Aop\CodeVisitor::enterNodeClass() seems to always return null.

This check looks for function or method calls that always return null and whose return value is used.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
if ($a->getObject()) {

The method getObject() can return nothing but null, so it makes no sense to use the return value.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
57
    }
58
59
    private function validateClass(Class_ $class): void
60
    {
61
        $isClassAlreadyDeclared = $this->class instanceof Class_;
62
        if ($isClassAlreadyDeclared) {
63
            $name = $class->name instanceof Node\Identifier ? $class->name->name : '';
64
65
            throw new MultipleClassInOneFileException($name);
66
        }
67
    }
68
69
    /**
70
     * @return null
71
     */
72
    private function enterNodeClass(Node $node)
73
    {
74
        if ($node instanceof Class_) {
75
            $this->validateClass($node);
76
            $this->class = $node;
77
78
            return null;
79
        }
80
81
        if ($node instanceof ClassMethod) {
82
            $this->classMethod[] = $node;
83
        }
84
85
        return null;
86
    }
87
}
88