ConstantRemoved   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 22
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 22
rs 10
c 0
b 0
f 0
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A accessibleConstants() 0 4 2
A __invoke() 0 13 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Roave\BackwardCompatibility\DetectChanges\BCBreak\ClassBased;
6
7
use Roave\BackwardCompatibility\Change;
8
use Roave\BackwardCompatibility\Changes;
9
use Roave\BetterReflection\Reflection\ReflectionClass;
10
use Roave\BetterReflection\Reflection\ReflectionClassConstant;
11
use function array_diff_key;
12
use function array_filter;
13
use function array_map;
14
use function array_values;
15
use function Safe\sprintf;
16
17
final class ConstantRemoved implements ClassBased
18
{
19
    public function __invoke(ReflectionClass $fromClass, ReflectionClass $toClass) : Changes
20
    {
21
        $removedConstants = array_diff_key(
22
            $this->accessibleConstants($fromClass),
23
            $this->accessibleConstants($toClass)
24
        );
25
26
        return Changes::fromList(...array_values(array_map(static function (ReflectionClassConstant $constant) use ($fromClass) : Change {
27
            return Change::removed(
28
                sprintf('Constant %s::%s was removed', $fromClass->getName(), $constant->getName()),
29
                true
30
            );
31
        }, $removedConstants)));
32
    }
33
34
    /** @return ReflectionClassConstant[] */
35
    private function accessibleConstants(ReflectionClass $class) : array
36
    {
37
        return array_filter($class->getReflectionConstants(), static function (ReflectionClassConstant $constant) : bool {
38
            return $constant->isPublic() || $constant->isProtected();
39
        });
40
    }
41
}
42