Upgraded drupal core with security updates
[yaffs-website] / vendor / psy / psysh / src / Psy / TabCompletion / Matcher / ClassMethodsMatcher.php
1 <?php
2
3 /*
4  * This file is part of Psy Shell.
5  *
6  * (c) 2012-2017 Justin Hileman
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Psy\TabCompletion\Matcher;
13
14 /**
15  * A class method tab completion Matcher.
16  *
17  * Given a namespace and class, this matcher provides completion for static
18  * methods.
19  *
20  * @author Marc Garcia <markcial@gmail.com>
21  */
22 class ClassMethodsMatcher extends AbstractMatcher
23 {
24     /**
25      * {@inheritdoc}
26      */
27     public function getMatches(array $tokens, array $info = array())
28     {
29         $input = $this->getInput($tokens);
30
31         $firstToken = array_pop($tokens);
32         if (self::tokenIs($firstToken, self::T_STRING)) {
33             // second token is the nekudotayim operator
34             array_pop($tokens);
35         }
36
37         $class = $this->getNamespaceAndClass($tokens);
38
39         $reflection = new \ReflectionClass($class);
40         $methods = $reflection->getMethods(\ReflectionMethod::IS_STATIC);
41         $methods = array_map(function (\ReflectionMethod $method) {
42             return $method->getName();
43         }, $methods);
44
45         return array_map(
46             function ($name) use ($class) {
47                 return $class . '::' . $name;
48             },
49             array_filter($methods, function ($method) use ($input) {
50                 return AbstractMatcher::startsWith($input, $method);
51             })
52         );
53     }
54
55     /**
56      * {@inheritdoc}
57      */
58     public function hasMatched(array $tokens)
59     {
60         $token = array_pop($tokens);
61         $prevToken = array_pop($tokens);
62
63         switch (true) {
64             case self::tokenIs($prevToken, self::T_DOUBLE_COLON) && self::tokenIs($token, self::T_STRING):
65             case self::tokenIs($token, self::T_DOUBLE_COLON):
66                 return true;
67         }
68
69         return false;
70     }
71 }