Skip to content

Crash with phpstan 2.1.32 #711

@simPod

Description

@simPod

v2.1.31 was ok.

<?php

declare(strict_types=1);

namespace Project\Foo;

use Project\Foo\Operator;
use Doctrine\ORM\EntityManagerInterface;
use Ds\Map;
use InvalidArgumentException;

final readonly class DoctrineRepository
{
    public function __construct(private EntityManagerInterface $entityManager)
    {
    }

    public function foo(Operator $operator): Map
    {
        $queryBuilder = $this->entityManager->createQueryBuilder();
        $expr = $queryBuilder->expr();

        $comparator = match ($operator) {
            Operator::Eq => $expr->in(...),
            Operator::Neq=> $expr->notIn(...),
        };

        ...
 -- --------------------------------------------------------------------------- 
     Error                                                                      
 -- --------------------------------------------------------------------------- 
     Internal error: Too few arguments to function                              
     Doctrine\ORM\Query\Expr::in(), 0 passed in                                 
     /project/vendor/phpstan/phpstan-doctrine/src/Type/Doctrine  
     /QueryBuilder/Expr/ExpressionBuilderDynamicReturnTypeExtension.php on      
     line 77 and exactly 2 expected while analysing file                        
     /project/src/DoctrineRepository.php                                                               
     Post the following stack trace to                                          
     https://github.com/phpstan/phpstan/issues/new?template=Bug_report.yaml:    
     ## /project/vendor/doctrine/orm/src/Query/Expr.php(393)     
     #0                                                                         
     /project/vendor/phpstan/phpstan-doctrine/src/Type/Doctrine  
     /QueryBuilder/Expr/ExpressionBuilderDynamicReturnTypeExtension.php(77):    
     Doctrine\ORM\Query\Expr->in()                                              
     #1                                                                         
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/MutatingScope.php(4044):                                            
     PHPStan\Type\Doctrine\QueryBuilder\Expr\ExpressionBuilderDynamicReturnTyp  
     eExtension->getTypeFromMethodCall()                                        
     #2                                                                         
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/MutatingScope.php(1582):                                            
     PHPStan\Analyser\MutatingScope->methodCallReturnType()                     
     #3                                                                         
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/MutatingScope.php(642):                                             
     PHPStan\Analyser\MutatingScope->resolveType()                              
     #4                                                                         
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/De  
     pendency/DependencyResolver.php(207):                                      
     PHPStan\Analyser\MutatingScope->getType()                                  
     #5                                                                         
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/De  
     pendency/DependencyResolver.php(446):                                      
     PHPStan\Dependency\DependencyResolver->resolveDependencies()               
     #6                                                                         
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/FileAnalyser.php(192):                                              
     PHPStan\Dependency\DependencyResolver->resolveDependencies()               
     #7                                                                         
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/No  
     de/ClassStatementsGatherer.php(116):                                       
     PHPStan\Analyser\FileAnalyser->{closure:PHPStan\Analyser\FileAnalyser::a   
     nalyseFile():114}()                                                        
     #8                                                                         
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(716):                                         
     PHPStan\Node\ClassStatementsGatherer->__invoke()                           
     #9                                                                         
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(820):                                         
     PHPStan\Analyser\NodeScopeResolver::{closure:PHPStan\Analyser\NodeScopeRe  
     solver::processStmtNode():715}()                                           
     #10                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(3627):                                        
     PHPStan\Analyser\NodeScopeResolver::{closure:PHPStan\Analyser\NodeScopeRe  
     solver::processStmtNode():819}()                                           
     #11                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(2049):                                        
     PHPStan\Analyser\NodeScopeResolver->callNodeCallbackWithExpression()       
     #12                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(2047):                                        
     PHPStan\Analyser\NodeScopeResolver->processExprNode()                      
     #13                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(3116):                                        
     PHPStan\Analyser\NodeScopeResolver->processExprNode()                      
     #14                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(2076):                                        
     PHPStan\Analyser\NodeScopeResolver->processExprNode()                      
     #15                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(4326):                                        
     PHPStan\Analyser\NodeScopeResolver->{closure:PHPStan\Analyser\NodeScopeR   
     esolver::processExprNode():2061}()                                         
     #16                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(2061):                                        
     PHPStan\Analyser\NodeScopeResolver->processAssignVar()                     
     #17                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(819):                                         
     PHPStan\Analyser\NodeScopeResolver->processExprNode()                      
     #18                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(522):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                      
     #19                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(955):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                     
     #20                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(522):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                      
     #21                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(1085):                                        
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                     
     #22                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(522):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                      
     #23                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(715):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                     
     #24                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(522):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                      
     #25                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(899):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                     
     #26                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(522):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                      
     #27                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(850):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNodes()                     
     #28                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/NodeScopeResolver.php(470):                                         
     PHPStan\Analyser\NodeScopeResolver->processStmtNode()                      
     #29                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/An  
     alyser/FileAnalyser.php(220):                                              
     PHPStan\Analyser\NodeScopeResolver->processNodes()                         
     #30                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/Co  
     mmand/WorkerCommand.php(149):                                              
     PHPStan\Analyser\FileAnalyser->analyseFile()                               
     #31                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /evenement/evenement/src/EventEmitterTrait.php(111):                       
     PHPStan\Command\WorkerCommand::{closure:PHPStan\Command\WorkerCommand::ru  
     nWorker():126}()                                                           
     #32                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /clue/ndjson-react/src/Decoder.php(117):                                   
     _PHPStan_e870ac104\Evenement\EventEmitter->emit()                          
     #33                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /evenement/evenement/src/EventEmitterTrait.php(111):                       
     _PHPStan_e870ac104\Clue\React\NDJson\Decoder->handleData()                 
     #34                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /react/stream/src/Util.php(62):                                            
     _PHPStan_e870ac104\Evenement\EventEmitter->emit()                          
     #35                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /evenement/evenement/src/EventEmitterTrait.php(111):                       
     _PHPStan_e870ac104\React\Stream\Util::{closure:_PHPStan_e870ac104\React\S  
     tream\Util::forwardEvents():61}()                                          
     #36                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /react/stream/src/DuplexResourceStream.php(168):                           
     _PHPStan_e870ac104\Evenement\EventEmitter->emit()                          
     #37                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /react/event-loop/src/StreamSelectLoop.php(201):                           
     _PHPStan_e870ac104\React\Stream\DuplexResourceStream->handleData()         
     #38                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /react/event-loop/src/StreamSelectLoop.php(173):                           
     _PHPStan_e870ac104\React\EventLoop\StreamSelectLoop->waitForStreamActivi   
     ty()                                                                       
     #39                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/src/Co  
     mmand/WorkerCommand.php(105):                                              
     _PHPStan_e870ac104\React\EventLoop\StreamSelectLoop->run()                 
     #40                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /symfony/console/Command/Command.php(259):                                 
     PHPStan\Command\WorkerCommand->execute()                                   
     #41                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /symfony/console/Application.php(868):                                     
     _PHPStan_e870ac104\Symfony\Component\Console\Command\Command->run()        
     #42                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /symfony/console/Application.php(261):                                     
     _PHPStan_e870ac104\Symfony\Component\Console\Application->doRunCommand()   
     #43                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/vendor  
     /symfony/console/Application.php(157):                                     
     _PHPStan_e870ac104\Symfony\Component\Console\Application->doRun()          
     #44                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/bin/ph  
     pstan(99):                                                                 
     _PHPStan_e870ac104\Symfony\Component\Console\Application->run()            
     #45                                                                        
     phar:///project/vendor/phpstan/phpstan/phpstan.phar/bin/ph  
     pstan(100):                                                                
     {closure:phar:///project/vendor/phpstan/phpstan/phpstan.ph  
     ar/bin/phpstan:14}()                                                       
     #46 /project/vendor/phpstan/phpstan/phpstan(8):             
     require('...')                                                             
     #47 /project/vendor/bin/phpstan(119): include('...')        
     #48 {main}                                                                 
 -- --------------------------------------------------------------------------- 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions