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 ( b1f2fc...bf3dbc )
by Cees-Jan
02:53
created

functions.php ➔ throwable_decode()   D

Complexity

Conditions 12
Paths 193

Size

Total Lines 49
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 21
CRAP Score 12.0948

Importance

Changes 0
Metric Value
cc 12
eloc 32
nc 193
nop 1
dl 0
loc 49
ccs 21
cts 23
cp 0.913
crap 12.0948
rs 4.8187
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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 6
        'message',
45
        'code',
46
        'file',
47
        'line',
48
        'trace',
49
        'class',
50
    ];
51
52 6
    foreach ($properties as $property) {
53 6
        if (!isset($json[$property])) {
54 6
            throw new NotAnEncodedThrowableException($json);
55
        }
56
    }
57
58 6
    array_pop($properties);
59
60 6
    if (PHP_MAJOR_VERSION === 7) {
61
        try {
62 6
            $throwable = (new ReflectionClass($json['class']))->newInstanceWithoutConstructor();
63 2
        } catch (\Exception $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
64
        } catch (\Throwable $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
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...
65
        }
66
    }
67 6
    $class = new ReflectionClass($json['class']);
68 6
    if (!isset($throwable)) {
69
        try {
70 2
            $throwable = new $json['class']();
71 1
        } catch (\Exception $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
72
        } catch (\Throwable $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
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...
73
        }
74
    }
75 6
    if (!isset($throwable)) {
76 1
        $throwable = unserialize('O:' . strlen($json['class']) . ':"' . $json['class'] . '":0:{}"', [$json['class']]);
77
    }
78 6
    foreach ($properties as $key) {
79 6
        if (!$class->hasProperty($key)) {
80 4
            continue;
81
        }
82
83 6
        $property = new ReflectionProperty($json['class'], $key);
84 6
        $property->setAccessible(true);
85 6
        $property->setValue($throwable, $json[$key]);
86
    }
87
88 6
    return $throwable;
89
}
90