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@17: if (\strlen($class) > 0 && $class[0] === '\\') { Chris@17: $class = \substr($class, 1, \strlen($class)); Chris@13: } Chris@17: $quotedClass = \preg_quote($class); Chris@13: Chris@17: return \array_map( Chris@13: function ($className) use ($class) { Chris@13: // get the number of namespace separators Chris@17: $nsPos = \substr_count($class, '\\'); Chris@17: $pieces = \explode('\\', $className); Chris@13: //$methods = Mirror::get($class); Chris@17: return \implode('\\', \array_slice($pieces, $nsPos, \count($pieces))); Chris@13: }, Chris@17: \array_filter( Chris@17: \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@17: $token = \array_pop($tokens); Chris@17: $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@17: 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: }