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