88use PhpParser \NodeTraverser ;
99use PhpParser \NodeVisitor \NameResolver ;
1010use PHPStan \Analyser \Scope ;
11- use PhpStan \Parser \Parser ;
11+ use PHPStan \Parser \Parser ;
1212use PHPStan \Type \Constant \ConstantArrayType ;
1313use PHPStan \Type \Constant \ConstantStringType ;
1414use PHPStan \Type \ObjectType ;
@@ -26,7 +26,9 @@ public function __construct(Parser $parser)
2626$ this ->parser = $ parser ;
2727}
2828
29-
29+ /**
30+ * @phpstan-param \ReflectionClass<\Nextras\Orm\Repository\Repository> $repositoryReflection
31+ */
3032public function resolveFirst (\ReflectionClass $ repositoryReflection , Scope $ scope ): Type
3133{
3234$ entityClassNameTypes = $ this ->parseEntityClassNameTypes ($ repositoryReflection , $ scope );
@@ -43,12 +45,16 @@ public function resolveFirst(\ReflectionClass $repositoryReflection, Scope $scop
4345}
4446}
4547
46-
48+ /**
49+ * @phpstan-param \ReflectionClass<\Nextras\Orm\Repository\Repository> $repositoryReflection
50+ */
4751private function parseEntityClassNameTypes (\ReflectionClass $ repositoryReflection , Scope $ scope ): ?Type
4852{
4953$ className = $ repositoryReflection ->getName ();
5054$ fileName = $ repositoryReflection ->getFileName ();
5155
56+ assert ($ fileName !== false , sprintf ('File for clsas "%s" does not exists. ' , $ className ));
57+
5258$ ast = $ this ->parser ->parseFile ($ fileName );
5359
5460$ nodeTraverser = new NodeTraverser ();
@@ -78,7 +84,7 @@ private function parseEntityClassNameTypes(\ReflectionClass $repositoryReflectio
7884return $ node instanceof Node \Stmt \Return_;
7985});
8086
81- if ($ return instanceof Node \Stmt \Return_) {
87+ if ($ return instanceof Node \Stmt \Return_ && $ return -> expr !== null ) {
8288return $ scope ->getType ($ return ->expr );
8389} else {
8490return null ;
0 commit comments