Completed
Pull Request — master (#38)
by Marco
02:27
created

ConstantVisibilityReduced   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
dl 0
loc 40
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A compare() 0 18 2
A propertyVisibility() 0 11 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Roave\ApiCompare\Comparator\BackwardsCompatibility\ClassConstantBased;
6
7
use Roave\ApiCompare\Change;
8
use Roave\ApiCompare\Changes;
9
use Roave\BetterReflection\Reflection\ReflectionClassConstant;
10
11
final class ConstantVisibilityReduced implements ConstantBased
12
{
13
    private const VISIBILITY_PRIVATE = 'private';
14
15
    private const VISIBILITY_PROTECTED = 'protected';
16
17
    private const VISIBILITY_PUBLIC = 'public';
18
19
    public function compare(ReflectionClassConstant $fromConstant, ReflectionClassConstant $toConstant) : Changes
20
    {
21
        $visibilityFrom = $this->propertyVisibility($fromConstant);
22
        $visibilityTo   = $this->propertyVisibility($toConstant);
23
24
        if ($visibilityFrom <= $visibilityTo) {
25
            return Changes::new();
26
        }
27
28
        return Changes::fromArray([Change::changed(
29
            sprintf(
30
                'Constant %s::%s visibility reduced from %s to %s',
31
                $fromConstant->getDeclaringClass()->getName(),
32
                $fromConstant->getName(),
33
                $visibilityFrom,
34
                $visibilityTo
35
            ),
36
            true
37
        )]);
38
    }
39
40
    private function propertyVisibility(ReflectionClassConstant $property) : string
41
    {
42
        if ($property->isPublic()) {
43
            return self::VISIBILITY_PUBLIC;
44
        }
45
46
        if ($property->isProtected()) {
47
            return self::VISIBILITY_PROTECTED;
48
        }
49
50
        return self::VISIBILITY_PRIVATE;
51
    }
52
}
53