*/ final class PropertyTypeResolver implements NodeTypeResolverInterface { /** * @var \Rector\NodeTypeResolver\NodeTypeResolver */ private $nodeTypeResolver; /** * @required */ public function autowire(NodeTypeResolver $nodeTypeResolver) : void { $this->nodeTypeResolver = $nodeTypeResolver; } /** * @return array> */ public function getNodeClasses() : array { return [Property::class]; } /** * @param Property $node */ public function resolve(Node $node) : Type { // fake property to local PropertyFetch → PHPStan understands that $propertyFetch = new PropertyFetch(new Variable('this'), (string) $node->props[0]->name); $propertyFetch->setAttribute(AttributeKey::SCOPE, $node->getAttribute(AttributeKey::SCOPE)); return $this->nodeTypeResolver->getType($propertyFetch); } }