Completed
Push — master ( 296743...12eab9 )
by Kirill
36:17
created

CallStackRenderer::extractPhpStack()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 4
cts 4
cp 1
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
crap 2
1
<?php
2
/**
3
 * This file is part of Railt package.
4
 *
5
 * For the full copyright and license information, please view the LICENSE
6
 * file that was distributed with this source code.
7
 */
8
declare(strict_types=1);
9
10
namespace Railt\SDL\Runtime;
11
12
use Railt\SDL\Runtime\CallStackRenderer\DefinitionTraceRenderer;
13
use Railt\SDL\Runtime\CallStackRenderer\PhpTraceRenderer;
14
use Railt\SDL\Runtime\CallStackRenderer\TraceRenderer;
15
16
/**
17
 * Class CallStackRenderer
18
 */
19
class CallStackRenderer
20
{
21
    /**
22
     * @var array|TraceRenderer[]
23
     */
24
    private $trace = [];
25
26
    /**
27
     * @var TraceRenderer
28
     */
29
    private $last;
30
31
    /**
32
     * CallStackRenderer constructor.
33
     * @param CallStackInterface $stack
34
     * @param array $trace
35
     */
36 3291
    public function __construct(CallStackInterface $stack, array $trace)
37
    {
38 3291
        $this->extractSdlStack($stack);
39 3291
        $this->extractPhpStack($trace);
40 3291
    }
41
42
    /**
43
     * @param array $trace
44
     */
45 3291
    private function extractPhpStack(array $trace): void
46
    {
47 3291
        foreach ($trace as $item) {
48 3291
            $this->add(new PhpTraceRenderer($item));
49
        }
50 3291
    }
51
52
    /**
53
     * @param CallStackInterface $stack
54
     */
55 3291
    private function extractSdlStack(CallStackInterface $stack): void
56
    {
57 3291
        while ($latest = $stack->pop()) {
58 3291
            $this->add(new DefinitionTraceRenderer($latest));
59
        }
60 3291
    }
61
62
    /**
63
     * @param TraceRenderer $renderer
64
     */
65 3291
    private function add(TraceRenderer $renderer): void
66
    {
67 3291
        if ($this->last === null) {
68 3291
            $this->last = $renderer;
69
        } else {
70 3291
            $this->trace[] = $renderer;
71
        }
72 3291
    }
73
74
    /**
75
     * @return TraceRenderer
76
     */
77 3291
    public function getLastRenderer(): TraceRenderer
78
    {
79 3291
        return $this->last;
80
    }
81
82
    /**
83
     * @return iterable|TraceRenderer[]
84
     */
85 2280
    public function getTrace(): iterable
86
    {
87 2280
        return $this->trace;
88
    }
89
}
90