ConstructorNewOperator   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 4
Bugs 0 Features 2
Metric Value
wmc 8
c 4
b 0
f 2
lcom 1
cbo 2
dl 0
loc 39
ccs 17
cts 17
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B apply() 0 16 5
A containsClassName() 0 10 3
1
<?php
2
3
namespace MS\PHPMD\Rule\Symfony2;
4
5
use PHPMD\AbstractNode;
6
use PHPMD\AbstractRule;
7
use PHPMD\Node\MethodNode;
8
use PHPMD\Rule\MethodAware;
9
10
/**
11
 * Class ConstructorNewOperator
12
 *
13
 * Resolve strong dependency by simply inject the new instance via DI. So your class is more flexible.
14
 *
15
 * @package MS\PHPMD\Rule\Symfony2
16
 */
17
class ConstructorNewOperator extends AbstractRule implements MethodAware
18
{
19
    /**
20
     * @param AbstractNode|MethodNode $node
21
     */
22 5
    public function apply(AbstractNode $node)
23
    {
24 5
        $classReferences = $node->findChildrenOfType('ClassReference');
25
26 5
        if ('__construct' !== $node->getImage() || 0 === count($classReferences)) {
27 3
            return;
28
        }
29
30 2
        $allowedClassNames = explode($this->getStringProperty('delimiter'), $this->getStringProperty('allowedClassNames'));
31
32 2
        foreach ($classReferences as $classReference) {
33 2
            if (false === $this->containsClassName($classReference->getImage(), $allowedClassNames)) {
34 1
                $this->addViolation($classReference);
35 1
            }
36 2
        }
37 2
    }
38
39
    /**
40
     * @param string $className
41
     * @param array  $allowedClassNames
42
     *
43
     * @return bool
44
     */
45 2
    private function containsClassName($className, array $allowedClassNames)
46
    {
47 2
        foreach ($allowedClassNames as $allowedClassName) {
48 2
            if (false !== stripos($className, $allowedClassName)) {
49 1
                return true;
50
            }
51 1
        }
52
53 1
        return false;
54
    }
55
}
56