Code Duplication    Length = 146-146 lines in 2 locations

src/Throwable/Error.php 1 location

@@ 5-150 (lines=146) @@
2
3
namespace Dazzle\Throwable;
4
5
class Error extends \Error
6
{
7
    /**
8
     * @var mixed[]
9
     */
10
    protected $context = [];
11
12
    /**
13
     * @param string $message
14
     * @param int $code
15
     * @param \Error|\Exception|null $previous
16
     */
17
    public function __construct($message = 'Unknown error', $code = 0, $previous = null)
18
    {
19
        parent::__construct($message, $code, $previous);
20
    }
21
22
    /**
23
     * @param mixed[] $context
24
     */
25
    public function setContext(array $context = [])
26
    {
27
        $this->context = $context;
28
    }
29
30
    /**
31
     * @return mixed[]
32
     */
33
    public function getContext()
34
    {
35
        return $this->context;
36
    }
37
38
    /**
39
     * @return string
40
     */
41
    public function __toString()
42
    {
43
        return static::toString($this);
44
    }
45
46
    /**
47
     * Return Error full trace in string format.
48
     *
49
     * @param \Error|\Exception $ex
50
     * @return string
51
     */
52
    public static function toString($ex)
53
    {
54
        return implode("\n", [
55
            "\t" . 'Throwable trace:',
56
            static::toThrowableString($ex),
57
            "\t" . 'Stack trace:',
58
            static::toStackString($ex)
59
        ]);
60
    }
61
62
    /**
63
     * Return Error full trace in array format.
64
     *
65
     * @param \Error|\Exception $ex
66
     * @return mixed
67
     */
68
    public static function toTrace($ex)
69
    {
70
        return Throwable::getThrowableStack($ex);
71
    }
72
73
    /**
74
     * Return Error stack trace in array format.
75
     *
76
     * @param \Error|\Exception $ex
77
     * @return string[]
78
     */
79
    public static function toStackTrace($ex)
80
    {
81
        $list = [];
82
        for ($stack = Throwable::getThrowableStack($ex); $stack !== null; $stack = $stack['prev'])
83
        {
84
            $list = array_merge($stack['trace'], $list);
85
        }
86
87
        return $list;
88
    }
89
90
    /**
91
     * Return Error throwable trace in array format.
92
     *
93
     * @param \Error|\Exception $ex
94
     * @return string[]
95
     */
96
    public static function toThrowableTrace($ex)
97
    {
98
        $list = [];
99
        for ($stack = Throwable::getThrowableStack($ex); $stack !== null; $stack = $stack['prev'])
100
        {
101
            $list[] = Throwable::parseThrowableMessage($stack);
102
        }
103
104
        return array_reverse($list);
105
    }
106
107
    /**
108
     * Return Error stack trace in string format.
109
     *
110
     * @param \Error|\Exception $ex
111
     * @return string
112
     */
113
    public static function toStackString($ex)
114
    {
115
        $stack = [];
116
        $i = 0;
117
        $trace = static::toStackTrace($ex);
118
        $pad = strlen(count($trace)) > 2 ?: 2;
119
120
        foreach ($trace as $element)
121
        {
122
            $stack[] = "\t" . str_pad('' . $i, $pad, ' ', STR_PAD_LEFT) . '. ' . $element;
123
            ++$i;
124
        }
125
126
        return implode("\n", $stack);
127
    }
128
129
    /**
130
     * Return Error throwable trace in string format.
131
     *
132
     * @param \Error|\Exception $ex
133
     * @return string
134
     */
135
    public static function toThrowableString($ex)
136
    {
137
        $stack = [];
138
        $i = 0;
139
        $trace = static::toThrowableTrace($ex);
140
        $pad = strlen(count($trace)) > 2 ?: 2;
141
142
        foreach ($trace as $element)
143
        {
144
            $stack[] = "\t" . str_pad('' . $i, $pad, ' ', STR_PAD_LEFT) . '. ' . $element;
145
            ++$i;
146
        }
147
148
        return implode("\n", $stack);
149
    }
150
}
151

src/Throwable/Exception.php 1 location

@@ 5-150 (lines=146) @@
2
3
namespace Dazzle\Throwable;
4
5
class Exception extends \Exception
6
{
7
    /**
8
     * @var mixed[]
9
     */
10
    protected $context = [];
11
12
    /**
13
     * @param string $message
14
     * @param int $code
15
     * @param \Error|\Exception|null $previous
16
     */
17
    public function __construct($message = 'Unknown exception', $code = 0, $previous = null)
18
    {
19
        parent::__construct($message, $code, $previous);
20
    }
21
22
    /**
23
     * @param mixed[] $context
24
     */
25
    public function setContext(array $context = [])
26
    {
27
        $this->context = $context;
28
    }
29
30
    /**
31
     * @return mixed[]
32
     */
33
    public function getContext()
34
    {
35
        return $this->context;
36
    }
37
38
    /**
39
     * @return string
40
     */
41
    public function __toString()
42
    {
43
        return static::toString($this);
44
    }
45
46
    /**
47
     * Return Exception full trace in string format.
48
     *
49
     * @param \Error|\Exception $ex
50
     * @return string
51
     */
52
    public static function toString($ex)
53
    {
54
        return implode("\n", [
55
            "\t" . 'Throwable trace:',
56
            static::toThrowableString($ex),
57
            "\t" . 'Stack trace:',
58
            static::toStackString($ex)
59
        ]);
60
    }
61
62
    /**
63
     * Return Exception full trace in array format.
64
     *
65
     * @param \Error|\Exception $ex
66
     * @return mixed
67
     */
68
    public static function toTrace($ex)
69
    {
70
        return Throwable::getThrowableStack($ex);
71
    }
72
73
    /**
74
     * Return Exception stack trace in array format.
75
     *
76
     * @param \Error|\Exception $ex
77
     * @return string[]
78
     */
79
    public static function toStackTrace($ex)
80
    {
81
        $list = [];
82
        for ($stack = Throwable::getThrowableStack($ex); $stack !== null; $stack = $stack['prev'])
83
        {
84
            $list = array_merge($stack['trace'], $list);
85
        }
86
87
        return $list;
88
    }
89
90
    /**
91
     * Return Exception throwable trace in array format.
92
     *
93
     * @param \Error|\Exception $ex
94
     * @return string[]
95
     */
96
    public static function toThrowableTrace($ex)
97
    {
98
        $list = [];
99
        for ($stack = Throwable::getThrowableStack($ex); $stack !== null; $stack = $stack['prev'])
100
        {
101
            $list[] = Throwable::parseThrowableMessage($stack);
102
        }
103
104
        return array_reverse($list);
105
    }
106
107
    /**
108
     * Return Exception stack trace in string format.
109
     *
110
     * @param \Error|\Exception $ex
111
     * @return string
112
     */
113
    public static function toStackString($ex)
114
    {
115
        $stack = [];
116
        $i = 0;
117
        $trace = static::toStackTrace($ex);
118
        $pad = strlen(count($trace)) > 2 ?: 2;
119
120
        foreach ($trace as $element)
121
        {
122
            $stack[] = "\t" . str_pad('' . $i, $pad, ' ', STR_PAD_LEFT) . '. ' . $element;
123
            ++$i;
124
        }
125
126
        return implode("\n", $stack);
127
    }
128
129
    /**
130
     * Return Exception throwable trace in string format.
131
     *
132
     * @param \Error|\Exception $ex
133
     * @return string
134
     */
135
    public static function toThrowableString($ex)
136
    {
137
        $stack = [];
138
        $i = 0;
139
        $trace = static::toThrowableTrace($ex);
140
        $pad = strlen(count($trace)) > 2 ?: 2;
141
142
        foreach ($trace as $element)
143
        {
144
            $stack[] = "\t" . str_pad('' . $i, $pad, ' ', STR_PAD_LEFT) . '. ' . $element;
145
            ++$i;
146
        }
147
148
        return implode("\n", $stack);
149
    }
150
}
151