GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 14d64e...bf30ba )
by Cees-Jan
02:19
created

functions.php ➔ throwable_decode()   C

Complexity

Conditions 7
Paths 25

Size

Total Lines 38
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 7.0099

Importance

Changes 0
Metric Value
cc 7
eloc 24
nc 25
nop 1
dl 0
loc 38
ccs 16
cts 17
cp 0.9412
crap 7.0099
rs 6.7272
c 0
b 0
f 0
1
<?php
2
3
namespace WyriHaximus;
4
5
use Exception;
6
use ReflectionClass;
7
use ReflectionProperty;
8
use Throwable;
9
10
function throwable_json_encode($throwable)
11
{
12 1
    return json_encode(throwable_encode($throwable));
13
}
14
15
function throwable_encode($throwable)
16
{
17 2
    if (!($throwable instanceof Exception) && !($throwable instanceof Throwable)) {
0 ignored issues
show
Bug introduced by
The class Throwable does not exist. Is this class maybe located in a folder that is not analyzed, or in a newer version of your dependencies than listed in your composer.lock/composer.json?
Loading history...
18
        throw new NotAThrowableException($throwable);
19
    }
20
21 2
    $json = [];
22 2
    $json['class'] = get_class($throwable);
23 2
    $json['message'] = $throwable->getMessage();
24 2
    $json['code'] = $throwable->getCode();
25 2
    $json['file'] = $throwable->getFile();
26 2
    $json['line'] = $throwable->getLine();
27 2
    $json['trace'] = [];
28 2
    foreach ($throwable->getTrace() as $item) {
29 2
        $item['args'] = [];
30 2
        $json['trace'][] = $item;
31
    }
32
33 2
    return $json;
34
}
35
36
function throwable_json_decode($json)
37
{
38 1
    return throwable_decode(json_decode($json, true));
39
}
40
41
function throwable_decode($json)
42
{
43
    $properties = [
44 3
        'message',
45
        'code',
46
        'file',
47
        'line',
48
        'trace',
49
        'class',
50
    ];
51
52 3
    foreach ($properties as $property) {
53 3
        if (!isset($json[$property])) {
54 3
            throw new NotAnEncodedThrowableException($json);
55
        }
56
    }
57
58 3
    array_pop($properties);
59
60 3
    if (PHP_MAJOR_VERSION === 7) {
61 3
        $throwable = (new ReflectionClass($json['class']))->newInstanceWithoutConstructor();
62
    }
63 3
    $class = new ReflectionClass($json['class']);
64 3
    if (!isset($throwable)) {
65
        $throwable = new $json['class']();
66
    }
67 3
    foreach ($properties as $key) {
68 3
        if (!$class->hasProperty($key)) {
69 1
            continue;
70
        }
71
72 3
        $property = new ReflectionProperty($json['class'], $key);
73 3
        $property->setAccessible(true);
74 3
        $property->setValue($throwable, $json[$key]);
75
    }
76
77 3
    return $throwable;
78
}
79