Chris@13: Chris@13: */ Chris@13: class ClassNamesMatcher extends AbstractMatcher Chris@13: { Chris@13: /** Chris@13: * {@inheritdoc} Chris@13: */ Chris@13: public function getMatches(array $tokens, array $info = []) Chris@13: { Chris@13: $class = $this->getNamespaceAndClass($tokens); Chris@13: if (strlen($class) > 0 && $class[0] === '\\') { Chris@13: $class = substr($class, 1, strlen($class)); Chris@13: } Chris@13: $quotedClass = preg_quote($class); Chris@13: Chris@13: return array_map( Chris@13: function ($className) use ($class) { Chris@13: // get the number of namespace separators Chris@13: $nsPos = substr_count($class, '\\'); Chris@13: $pieces = explode('\\', $className); Chris@13: //$methods = Mirror::get($class); Chris@13: return implode('\\', array_slice($pieces, $nsPos, count($pieces))); Chris@13: }, Chris@13: array_filter( Chris@13: get_declared_classes(), Chris@13: function ($className) use ($quotedClass) { Chris@13: return AbstractMatcher::startsWith($quotedClass, $className); Chris@13: } Chris@13: ) Chris@13: ); Chris@13: } Chris@13: Chris@13: /** Chris@13: * {@inheritdoc} Chris@13: */ Chris@13: public function hasMatched(array $tokens) Chris@13: { Chris@13: $token = array_pop($tokens); Chris@13: $prevToken = array_pop($tokens); Chris@13: Chris@13: $blacklistedTokens = [ Chris@13: self::T_INCLUDE, self::T_INCLUDE_ONCE, self::T_REQUIRE, self::T_REQUIRE_ONCE, Chris@13: ]; Chris@13: Chris@13: switch (true) { Chris@13: case self::hasToken([$blacklistedTokens], $token): Chris@13: case self::hasToken([$blacklistedTokens], $prevToken): Chris@13: case is_string($token) && $token === '$': Chris@13: return false; Chris@16: case self::hasToken([self::T_NEW, self::T_OPEN_TAG, self::T_NS_SEPARATOR, self::T_STRING], $prevToken): Chris@13: case self::hasToken([self::T_NEW, self::T_OPEN_TAG, self::T_NS_SEPARATOR], $token): Chris@13: case self::hasToken([self::T_OPEN_TAG, self::T_VARIABLE], $token): Chris@13: case self::isOperator($token): Chris@13: return true; Chris@13: } Chris@13: Chris@13: return false; Chris@13: } Chris@13: }