GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

Reflection::isVariadic()   B
last analyzed

Complexity

Conditions 6
Paths 6

Size

Total Lines 16
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 16
rs 8.8571
cc 6
eloc 8
nc 6
nop 1
1
<?php
2
3
namespace Pinq\Parsing;
4
5
/**
6
 * Utility class for getting the reflection from any type
7
 * of callable.
8
 *
9
 * @author Elliot Levin <[email protected]>
10
 */
11
final class Reflection
12
{
13
    private function __construct()
14
    {
15
16
    }
17
18
    /**
19
     * @param callable $function
20
     *
21
     * @return \ReflectionFunctionAbstract
22
     * @throws InvalidFunctionException
23
     */
24
    final public static function fromCallable(callable $function)
25
    {
26
        // If is array it could be an instance or static method:
27
        // ['class', 'method'] or [$instance, 'method'];
28
        if (is_array($function)) {
29
            return new \ReflectionMethod($function[0], $function[1]);
30
        }
31
        // If it is a closure it could be an actual closure or
32
        // possibly a closure of another function from
33
        // \ReflectionFunction::getClosure or \ReflectionMethod::getClosure
34
        elseif ($function instanceof \Closure) {
35
            $reflection = new \ReflectionFunction($function);
36
37
            // If the name is {closure} it as an actual closure
38
            if ($reflection->getShortName() === '{closure}') {
39
                return $reflection;
40
            }
41
            // Bail out, no (sane) way of determining the actual function
42
            // represented by the closure
43
            throw InvalidFunctionException::invalidFunctionMessage(
44
                    'The function has been wrapped in closure '
45
                    . '(most likely  via ReflectionFunction::getClosure or \ReflectionMethod::getClosure) '
46
                    . 'and this is not supported',
47
                    $reflection);
48
        }
49
        // If an object but not a closure it must be an object defining
50
        // the __invoke magic method.
51
        elseif (is_object($function)) {
52
            return new \ReflectionMethod($function, '__invoke');
53
        }
54
        // Fallback to function
55
        else {
56
            $name = null;
57
            is_callable($function, false, $name);
58
59
            return new \ReflectionFunction($name);
60
        }
61
    }
62
63
    private static $supportsVariadicParameters = null;
64
65
    /**
66
     * @param \ReflectionFunctionAbstract $function
67
     *
68
     * @return boolean
69
     */
70
    public static function isVariadic(\ReflectionFunctionAbstract $function)
71
    {
72
        if (self::$supportsVariadicParameters === null) {
73
            self::$supportsVariadicParameters = method_exists('\ReflectionParameter', 'isVariadic');
74
        }
75
76
        foreach ($function->getParameters() as $parameter) {
77
            if ($parameter->getName() === '...' ||
0 ignored issues
show
Bug introduced by
Consider using $parameter->name. There is an issue with getName() and APC-enabled PHP versions.
Loading history...
78
                    (self::$supportsVariadicParameters && $parameter->isVariadic())
79
            ) {
80
                return true;
81
            }
82
        }
83
84
        return false;
85
    }
86
}
87