Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
93.33% covered (success)
93.33%
14 / 15
90.00% covered (success)
90.00%
9 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 1
DiscoveredSymbol
93.33% covered (success)
93.33%
14 / 15
90.00% covered (success)
90.00%
9 / 10
11.04
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
 getOriginalSymbol
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getSourceFiles
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 addSourceFile
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getReplacement
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 setReplacement
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getNamespace
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getOriginalLocalName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setDoRename
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 isDoRename
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3 * A namespace, class, interface or trait discovered in the project.
4 */
5
6namespace BrianHenryIE\Strauss\Types;
7
8use BrianHenryIE\Strauss\Files\File;
9use BrianHenryIE\Strauss\Pipeline\FileSymbolScanner;
10
11abstract class DiscoveredSymbol
12{
13    /** @var array<File> $sourceFiles */
14    protected array $sourceFiles = [];
15
16    protected ?string $namespace;
17
18    protected string $fqdnOriginalSymbol;
19
20    protected string $replacement;
21
22    protected bool $doRename = true;
23
24    /**
25     * @param string $fqdnSymbol The classname / namespace etc.
26     * @param File $sourceFile The file it was discovered in.
27     */
28    public function __construct(string $fqdnSymbol, File $sourceFile, string $namespace = '\\')
29    {
30        $this->fqdnOriginalSymbol = $fqdnSymbol;
31
32        $this->addSourceFile($sourceFile);
33        $sourceFile->addDiscoveredSymbol($this);
34
35        $this->namespace = $namespace;
36    }
37
38    public function getOriginalSymbol(): string
39    {
40        return $this->fqdnOriginalSymbol;
41    }
42
43    /**
44     * @return File[]
45     */
46    public function getSourceFiles(): array
47    {
48        return $this->sourceFiles;
49    }
50
51    /**
52     * @param File $sourceFile
53     *
54     * @see FileSymbolScanner
55     */
56    public function addSourceFile(File $sourceFile): void
57    {
58        $this->sourceFiles[$sourceFile->getSourcePath()] = $sourceFile;
59    }
60
61    public function getReplacement(): string
62    {
63        return $this->isDoRename()
64            ? ($this->replacement ?? $this->fqdnOriginalSymbol)
65            : $this->fqdnOriginalSymbol;
66    }
67
68    public function setReplacement(string $replacement): void
69    {
70        $this->replacement = $replacement;
71    }
72
73    public function getNamespace(): ?string
74    {
75        return $this->namespace;
76    }
77
78    public function getOriginalLocalName(): string
79    {
80        return array_reverse(explode('\\', $this->fqdnOriginalSymbol))[0];
81    }
82
83    public function setDoRename(bool $doRename): void
84    {
85        $this->doRename = $doRename;
86    }
87
88    public function isDoRename(): bool
89    {
90        return $this->doRename;
91    }
92}