Passed
Push — master ( 2c1367...72194f )
by Alexey
03:21
created

UnresolvableDependencyException   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 61.53%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 1
dl 0
loc 53
ccs 16
cts 26
cp 0.6153
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A createMessage() 0 10 2
A formatFunction() 0 6 2
A formatParameter() 0 6 2
1
<?php declare(strict_types = 1);
2
3
namespace Venta\Container\Exception;
4
5
use Exception;
6
use ReflectionFunctionAbstract;
7
use ReflectionMethod;
8
use ReflectionParameter;
9
10
/**
11
 * Class ResolveException
12
 *
13
 * @package Venta\Container\Exception
14
 */
15
class UnresolvableDependencyException extends ContainerException
16
{
17
18
    /**
19
     * @inheritDoc
20
     * @param ArgumentResolverException $previous
21
     */
22 1
    public function __construct($entryId, array $referenceChain, ArgumentResolverException $previous)
23
    {
24 1
        parent::__construct($entryId, $referenceChain, $previous);
25 1
    }
26
27
    /**
28
     * @inheritDoc
29
     * @param ArgumentResolverException $argumentResolveException
30
     */
31 1
    protected function createMessage(Exception $argumentResolveException = null): string
32
    {
33 1
        return sprintf(
34 1
            'Unable to resolve parameter "%s" value for "%s" %s, path: "%s".',
35 1
            $this->formatParameter($argumentResolveException->getParameter()),
36 1
            $this->formatFunction($argumentResolveException->getFunction()),
37 1
            $argumentResolveException->getFunction() instanceof ReflectionMethod ? 'method' : 'function',
38 1
            implode(' -> ', $this->referenceChain())
39
        );
40
    }
41
42
    /**
43
     * Formats function declaration depending on method/function type.
44
     *
45
     * @param ReflectionFunctionAbstract $function
46
     * @return string
47
     */
48 1
    private function formatFunction(ReflectionFunctionAbstract $function)
49
    {
50 1
        return $function instanceof ReflectionMethod ?
51
            $function->getDeclaringClass()->getName() . '::' . $function->getName() :
52 1
            $function->getName();
53
    }
54
55
    /**
56
     * Formats parameter depending on type
57
     *
58
     * @param ReflectionParameter $parameter
59
     * @return string
60
     */
61 1
    private function formatParameter(ReflectionParameter $parameter): string
62
    {
63 1
        return $parameter->hasType() ?
64
            sprintf('%s $%s', $parameter->getType(), $parameter->getName()) :
65 1
            sprintf('$%s', $parameter->getName());
66
    }
67
}