Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
78.95% covered (warning)
78.95%
15 / 19
33.33% covered (danger)
33.33%
2 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
ClassSymbol
78.95% covered (warning)
78.95%
15 / 19
33.33% covered (danger)
33.33%
2 / 6
8.60
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 getExtends
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getInterfaces
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 isAbstract
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getOriginalSymbolStripPrefix
75.00% covered (warning)
75.00%
3 / 4
0.00% covered (danger)
0.00%
0 / 1
3.14
 getAutoloadAliasArray
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace BrianHenryIE\Strauss\Types;
4
5use BrianHenryIE\Strauss\Files\FileBase;
6
7/**
8 * @phpstan-import-type ClassAliasArray from AutoloadAliasInterface
9 */
10class ClassSymbol extends DiscoveredSymbol implements AutoloadAliasInterface
11{
12    protected ?string $extends;
13    protected bool $isAbstract;
14
15    /**
16     * @var string[]
17     */
18    protected array $interfaces;
19
20    /**
21     * @param string $fqdnClassname
22     * @param FileBase $sourceFile
23     * @param bool $isAbstract
24     * @param string $namespace
25     * @param ?string $extends
26     * @param string[] $interfaces
27     */
28    public function __construct(
29        string $fqdnClassname,
30        FileBase $sourceFile,
31        bool $isAbstract = false,
32        string $namespace = '\\',
33        ?string $extends = null,
34        array $interfaces = []
35    ) {
36        parent::__construct($fqdnClassname, $sourceFile, $namespace);
37
38        $this->isAbstract = $isAbstract;
39        $this->extends = $extends;
40        $this->interfaces = $interfaces;
41    }
42
43    public function getExtends(): ?string
44    {
45        return $this->extends;
46    }
47
48    /**
49     * @return string[]
50     */
51    public function getInterfaces(): array
52    {
53        return $this->interfaces;
54    }
55
56    public function isAbstract(): bool
57    {
58        return $this->isAbstract;
59    }
60
61    public function getOriginalSymbolStripPrefix(string $class_prefix): string
62    {
63        $fqdnOriginalSymbol = $this->fqdnOriginalSymbol;
64
65        while (str_starts_with($fqdnOriginalSymbol, $class_prefix) && $class_prefix !== $fqdnOriginalSymbol) {
66            $fqdnOriginalSymbol = preg_replace('/^'.preg_quote($class_prefix).'/', '', $fqdnOriginalSymbol);
67        }
68
69        return $fqdnOriginalSymbol;
70    }
71
72    /**
73     * @return ClassAliasArray
74     */
75    public function getAutoloadAliasArray(): array
76    {
77        return array (
78            'type' => 'class',
79            'classname' => $this->getOriginalLocalName(),
80            'isabstract' => $this->isAbstract,
81            'namespace' => $this->namespace,
82            'extends' => $this->getReplacement(),
83            'implements' => $this->interfaces,
84        );
85    }
86}