Skip to content

Error when running PHPStan: Call to undefined method PhpParser\Node\Expr\MethodCall::toString() #23

Description

@wernerkrauss

Silverstripe 4.13, PHPStan 1.10.38, silverstripe-phpstan 4.x-dev #fcb734c

This method in an Extension to SiteTree makes PHPStan error:

    /**
     * Helper, to reload the current page e.g. in SearchForm to load additional fields that might not be loaded.
     *
     * @return SiteTree
     */
    public function getReload()
    {
        return $this->getOwner()::get()->byID($this->getOwner()->ID);
    }

The error is:

Internal error: Internal error: Call to undefined method PhpParser\Node\Expr\MethodCall::toString() in file /path/to/app/src/myproject/Extensions/SiteTree.php

 Post the following stack trace to https://github.com/phpstan/phpstan/issues/new?template=Bug_report.yaml:
 #0 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(3494): Syntro\SilverstripePHPStan\Type\DataObjectGetStaticReturnTypeExtension->getTypeFromStaticMethodCall()
 #1 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1422): PHPStan\Analyser\MutatingScope->methodCallReturnType()
 #2 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1428): PHPStan\Analyser\MutatingScope->PHPStan\Analyser\{closure}()
 #3 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(566): PHPStan\Analyser\MutatingScope->resolveType()
 #4 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NullsafeOperatorHelper.php(12): PHPStan\Analyser\MutatingScope->getType()
 #5 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Rules/Methods/MethodCallCheck.php(51): PHPStan\Analyser\NullsafeOperatorHelper::getNullsafeShortcircuitedExprRespectingScope()
 #6 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Rules/Methods/CallMethodsRule.php(42): PHPStan\Rules\Methods\MethodCallCheck->check()
 #7 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(107): PHPStan\Rules\Methods\CallMethodsRule->processNode()
 #8 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Node/ClassStatementsGatherer.php(108): PHPStan\Analyser\FileAnalyser->PHPStan\Analyser\{closure}()
 #9 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(543): PHPStan\Node\ClassStatementsGatherer->__invoke()
 #10 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(2622): PHPStan\Analyser\NodeScopeResolver::PHPStan\Analyser\{closure}()
 #11 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(1574): PHPStan\Analyser\NodeScopeResolver->callNodeCallbackWithExpression()
 #12 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(581): PHPStan\Analyser\NodeScopeResolver->processExprNode()
 #13 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(388): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
 #14 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(561): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()
 #15 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(388): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
 #16 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(644): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()
 #17 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(388): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
 #18 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(616): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()
 #19 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(357): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
 #20 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(166): PHPStan\Analyser\NodeScopeResolver->processNodes()
 #21 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(132): PHPStan\Analyser\FileAnalyser->analyseFile()
 #22 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97): PHPStan\Command\WorkerCommand->PHPStan\Command\{closure}()
 #23 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/clue/ndjson-react/src/Decoder.php(117): _PHPStan_adbc35a1c\Evenement\EventEmitter->emit()
 #24 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97): _PHPStan_adbc35a1c\Clue\React\NDJson\Decoder->handleData()
 #25 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/Util.php(62): _PHPStan_adbc35a1c\Evenement\EventEmitter->emit()
 #26 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
 _PHPStan_adbc35a1c\React\Stream\Util::_PHPStan_adbc35a1c\React\Stream\{closure}()
 #27 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/DuplexResourceStream.php(154): _PHPStan_adbc35a1c\Evenement\EventEmitter->emit()
 #28 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(201): _PHPStan_adbc35a1c\React\Stream\DuplexResourceStream->handleData()
 #29 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(173): _PHPStan_adbc35a1c\React\EventLoop\StreamSelectLoop->waitForStreamActivity()
 #30 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(98): _PHPStan_adbc35a1c\React\EventLoop\StreamSelectLoop->run()
 #31 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Command/Command.php(259): PHPStan\Command\WorkerCommand->execute()
 #32 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(870): _PHPStan_adbc35a1c\Symfony\Component\Console\Command\Command->run()
 #33 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(261): _PHPStan_adbc35a1c\Symfony\Component\Console\Application->doRunCommand()
 #34 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(157): _PHPStan_adbc35a1c\Symfony\Component\Console\Application->doRun()
 #35 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(124): _PHPStan_adbc35a1c\Symfony\Component\Console\Application->run()
 #36 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(125): _PHPStan_adbc35a1c\{closure}()
 #37 /path/to/vendor/phpstan/phpstan/phpstan(7): require('phar:///ho>  Internal error: Internal error: Call to undefined method PhpParser\Node\Expr\MethodCall::toString() in file /path/to/app/src/myproject/Extensions/SiteTree.php

 Post the following stack trace to https://github.com/phpstan/phpstan/issues/new?template=Bug_report.yaml:
 #0 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(3494): Syntro\SilverstripePHPStan\Type\DataObjectGetStaticReturnTypeExtension->getTypeFromStaticMethodCall()
 #1 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1422): PHPStan\Analyser\MutatingScope->methodCallReturnType()
 #2 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(1428): PHPStan\Analyser\MutatingScope->PHPStan\Analyser\{closure}()
 #3 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/MutatingScope.php(566): PHPStan\Analyser\MutatingScope->resolveType()
 #4 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NullsafeOperatorHelper.php(12): PHPStan\Analyser\MutatingScope->getType()
 #5 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Rules/Methods/MethodCallCheck.php(51): PHPStan\Analyser\NullsafeOperatorHelper::getNullsafeShortcircuitedExprRespectingScope()
 #6 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Rules/Methods/CallMethodsRule.php(42): PHPStan\Rules\Methods\MethodCallCheck->check()
 #7 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(107): PHPStan\Rules\Methods\CallMethodsRule->processNode()
 #8 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Node/ClassStatementsGatherer.php(108): PHPStan\Analyser\FileAnalyser->PHPStan\Analyser\{closure}()
 #9 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(543): PHPStan\Node\ClassStatementsGatherer->__invoke()
 #10 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(2622): PHPStan\Analyser\NodeScopeResolver::PHPStan\Analyser\{closure}()
 #11 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(1574): PHPStan\Analyser\NodeScopeResolver->callNodeCallbackWithExpression()
 #12 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(581): PHPStan\Analyser\NodeScopeResolver->processExprNode()
 #13 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(388): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
 #14 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(561): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()
 #15 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(388): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
 #16 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(644): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()
 #17 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(388): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
 #18 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(616): PHPStan\Analyser\NodeScopeResolver->processStmtNodes()
 #19 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/NodeScopeResolver.php(357): PHPStan\Analyser\NodeScopeResolver->processStmtNode()
 #20 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Analyser/FileAnalyser.php(166): PHPStan\Analyser\NodeScopeResolver->processNodes()
 #21 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(132): PHPStan\Analyser\FileAnalyser->analyseFile()
 #22 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97): PHPStan\Command\WorkerCommand->PHPStan\Command\{closure}()
 #23 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/clue/ndjson-react/src/Decoder.php(117): _PHPStan_adbc35a1c\Evenement\EventEmitter->emit()
 #24 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97): _PHPStan_adbc35a1c\Clue\React\NDJson\Decoder->handleData()
 #25 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/Util.php(62): _PHPStan_adbc35a1c\Evenement\EventEmitter->emit()
 #26 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php(97):
 _PHPStan_adbc35a1c\React\Stream\Util::_PHPStan_adbc35a1c\React\Stream\{closure}()
 #27 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/react/stream/src/DuplexResourceStream.php(154): _PHPStan_adbc35a1c\Evenement\EventEmitter->emit()
 #28 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(201): _PHPStan_adbc35a1c\React\Stream\DuplexResourceStream->handleData()
 #29 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/react/event-loop/src/StreamSelectLoop.php(173): _PHPStan_adbc35a1c\React\EventLoop\StreamSelectLoop->waitForStreamActivity()
 #30 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/src/Command/WorkerCommand.php(98): _PHPStan_adbc35a1c\React\EventLoop\StreamSelectLoop->run()
 #31 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Command/Command.php(259): PHPStan\Command\WorkerCommand->execute()
 #32 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(870): _PHPStan_adbc35a1c\Symfony\Component\Console\Command\Command->run()
 #33 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(261): _PHPStan_adbc35a1c\Symfony\Component\Console\Application->doRunCommand()
 #34 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/vendor/symfony/console/Application.php(157): _PHPStan_adbc35a1c\Symfony\Component\Console\Application->doRun()
 #35 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(124): _PHPStan_adbc35a1c\Symfony\Component\Console\Application->run()
 #36 phar:///path/to/vendor/phpstan/phpstan/phpstan.phar/bin/phpstan(125): _PHPStan_adbc35a1c\{closure}()
 #37 /path/to/vendor/phpstan/phpstan/phpstan(7): require('phar:///path/to...')
 #38 /path/to/vendor/bin/phpstan(115): include('/path/to...')
 #39 {main}
 Child process error (exit code 1):me/we...')
 #38 /path/to/vendor/bin/phpstan(115): include('/path/to...')
 #39 {main}
 Child process error (exit code 1):

when I comment out that method, phpstan runs without an internal error.

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