Gii   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Test Coverage

Coverage 75%

Importance

Changes 4
Bugs 1 Features 0
Metric Value
wmc 5
eloc 8
c 4
b 1
f 0
dl 0
loc 29
ccs 9
cts 12
cp 0.75
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A addGenerator() 0 3 1
A __construct() 0 4 1
A getGenerators() 0 5 1
A getGenerator() 0 5 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Yii\Gii;
6
7
use Yiisoft\Yii\Gii\Exception\GeneratorNotFoundException;
8
9
final class Gii implements GiiInterface
10
{
11
    /**
12
     * @param array<string, GeneratorInterface|GeneratorProxy> $proxies
13
     * @param array<string, GeneratorInterface> $instances
14
     */
15 8
    public function __construct(
16
        private readonly array $proxies,
17
        private array $instances,
18
    ) {
19 8
    }
20
21
    public function addGenerator(GeneratorInterface $generator): void
22
    {
23
        $this->instances[$generator::getId()] = $generator;
24
    }
25
26 1
    public function getGenerator(string $id): GeneratorInterface
27
    {
28 1
        return $this->instances[$id] ?? (isset($this->proxies[$id])
29
            ? $this->proxies[$id]->loadGenerator()
30 1
            : throw new GeneratorNotFoundException('Generator "' . $id . '" not found'));
31
    }
32
33 4
    public function getGenerators(): array
34
    {
35 4
        return [
0 ignored issues
show
Bug Best Practice introduced by
The expression return array($this->instances, $this->proxies) returns the type array<integer,array> which is incompatible with the return type mandated by Yiisoft\Yii\Gii\GiiInterface::getGenerators() of Yiisoft\Yii\Gii\GeneratorInterface[].

In the issue above, the returned value is violating the contract defined by the mentioned interface.

Let's take a look at an example:

interface HasName {
    /** @return string */
    public function getName();
}

class Name {
    public $name;
}

class User implements HasName {
    /** @return string|Name */
    public function getName() {
        return new Name('foo'); // This is a violation of the ``HasName`` interface
                                // which only allows a string value to be returned.
    }
}
Loading history...
36 4
            ...$this->instances,
37 4
            ...$this->proxies,
38 4
        ];
39
    }
40
}
41