*/ final class ClassMethodOrClassConstTypeResolver implements NodeTypeResolverInterface { /** * @var \Rector\NodeTypeResolver\NodeTypeResolver */ private $nodeTypeResolver; /** * @readonly * @var \Rector\Core\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; public function __construct(BetterNodeFinder $betterNodeFinder) { $this->betterNodeFinder = $betterNodeFinder; } /** * @required */ public function autowire(NodeTypeResolver $nodeTypeResolver) : void { $this->nodeTypeResolver = $nodeTypeResolver; } /** * @return array> */ public function getNodeClasses() : array { return [ClassMethod::class, ClassConst::class]; } /** * @param ClassMethod|ClassConst $node */ public function resolve(Node $node) : Type { $classLike = $this->betterNodeFinder->findParentType($node, ClassLike::class); if (!$classLike instanceof ClassLike) { // anonymous class return new ObjectWithoutClassType(); } return $this->nodeTypeResolver->getType($classLike); } }