Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
InterfaceSymbol
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
3 / 3
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getExtends
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getAutoloadAliasArray
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace BrianHenryIE\Strauss\Types;
4
5use BrianHenryIE\Strauss\Composer\ComposerPackage;
6use BrianHenryIE\Strauss\Files\FileBase;
7
8/**
9 * @phpstan-import-type InterfaceAliasArray from AutoloadAliasInterface
10 */
11class InterfaceSymbol extends NamespacedSymbol implements AutoloadAliasInterface
12{
13    /**
14     * @var string[]
15     */
16    protected array $extends;
17
18    /**
19     * @param string $fqdnClassname
20     * @param FileBase $sourceFile
21     * @param ?NamespaceSymbol $namespace
22     * @param ?ComposerPackage $package
23     * @param string[] $extends
24     */
25    public function __construct(
26        string $fqdnClassname,
27        FileBase $sourceFile,
28        ?NamespaceSymbol $namespace = null,
29        ?ComposerPackage $package = null,
30        array $extends = []
31    ) {
32        parent::__construct($fqdnClassname, $sourceFile, $namespace, $package);
33
34        $this->extends = $extends;
35    }
36
37    /**
38     * @return string[]
39     */
40    public function getExtends(): array
41    {
42        return $this->extends;
43    }
44
45    /**
46     * In `autoload_aliases.php`, interfaces work by extending the new interface:
47     *
48     * ```
49     * namespace OldNamespace;
50     * interface OriginalInterfaceName extends ReplacementFqdn\InterfaceName {}
51     * ```
52     *
53     * With this, dev dependencies can continue to use the old fqdn interface without updating their call sites.
54     *
55     * @see AliasAutoloader::interfaceTemplate()
56     *
57     * @return InterfaceAliasArray
58     */
59    public function getAutoloadAliasArray(): array
60    {
61        return array (
62            'type' => 'interface',
63            'interfacename' => $this->getOriginalLocalName(),
64            'namespace' => $this->namespace->getOriginalFqdnName(),
65            'extends' => [$this->getReplacementFqdnName()] + $this->getExtends(),
66        );
67    }
68}