Skip to content

TypeError: Return value of LanguageServer\DefinitionResolver::resolveExpressionNodeToType() must implement interface phpDocumentor\Reflection\Type, null returned #252

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
felixfbecker opened this issue Jan 21, 2017 · 9 comments
Labels

Comments

@felixfbecker
Copy link
Owner

2017-01-21T17:44:50.291630610Z #10 {main}TypeError: Return value of LanguageServer\DefinitionResolver::resolveExpressionNodeToType() must implement interface phpDocumentor\Reflection\Type, null returned in /srv/phpbs/vendor/felixfbecker/language-server/src/DefinitionResolver.php:451
2017-01-21T17:44:50.291693364Z Stack trace:
2017-01-21T17:44:50.291705849Z #0 /srv/phpbs/vendor/felixfbecker/language-server/src/DefinitionResolver.php(787): LanguageServer\DefinitionResolver->resolveExpressionNodeToType(Object(PhpParser\Node\Expr\ConstFetch))
2017-01-21T17:44:50.291713520Z #1 /srv/phpbs/vendor/felixfbecker/language-server/src/DefinitionResolver.php(131): LanguageServer\DefinitionResolver->getTypeFromNode(Object(PhpParser\Node\Const_))
2017-01-21T17:44:50.291719570Z #2 /srv/phpbs/vendor/felixfbecker/language-server/src/NodeVisitor/DefinitionCollector.php(45): LanguageServer\DefinitionResolver->createDefinitionFromNode(Object(PhpParser\Node\Const_), 'IEuler::pi3')
2017-01-21T17:44:50.291724702Z #3 /srv/phpbs/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(130): LanguageServer\NodeVisitor\DefinitionCollector->enterNode(Object(PhpParser\Node\Const_))
2017-01-21T17:44:50.291730828Z #4 /srv/phpbs/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(88): PhpParser\NodeTraverser->traverseArray(Array)
2017-01-21T17:44:50.291742071Z #5 /srv/phpbs/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(139): PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\ClassConst))
2017-01-21T17:44:50.291775654Z #6 /srv/phpbs/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(88): PhpParser\NodeTraverser->traverseArray(Array)
2017-01-21T17:44:50.291782624Z #7 /srv/phpbs/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(139): PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Interface_))
2017-01-21T17:44:50.291787530Z #8 /srv/phpbs/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(72): PhpParser\NodeTraverser->traverseArray(Array)
2017-01-21T17:44:50.291791614Z #9 /srv/phpbs/vendor/felixfbecker/language-server/src/PhpDocument.php(205): PhpParser\NodeTraverser->traverse(Array)
2017-01-21T17:44:50.291796804Z #10 /srv/phpbs/vendor/felixfbecker/language-server/src/PhpDocument.php(119): LanguageServer\PhpDocument->updateContent('<?php\n\ndefine("...')
2017-01-21T17:44:50.291802191Z #11 /srv/phpbs/vendor/felixfbecker/language-server/src/PhpDocumentLoader.php(134): LanguageServer\PhpDocument->__construct('file:///tests/c...', '<?php\n\ndefine("...', Object(LanguageServer\Index\Index), Object(LanguageServer\Parser), Object(phpDocumentor\Reflection\DocBlockFactory), Object(LanguageServer\DefinitionResolver))
2017-01-21T17:44:50.291807941Z #12 /srv/phpbs/vendor/felixfbecker/language-server/src/PhpDocumentLoader.php(113): LanguageServer\PhpDocumentLoader->create('file:///tests/c...', '<?php\n\ndefine("...')
2017-01-21T17:44:50.291813193Z #13 [internal function]: LanguageServer\PhpDocumentLoader->LanguageServer\{closure}()
2017-01-21T17:44:50.291818116Z #14 /srv/phpbs/vendor/sabre/event/lib/coroutine.php(70): Generator->send('<?php\n\ndefine("...')
2017-01-21T17:44:50.291822256Z #15 /srv/phpbs/vendor/sabre/event/lib/Promise.php(242): Sabre\Event\{closure}('<?php\n\ndefine("...')
2017-01-21T17:44:50.291833020Z #16 /srv/phpbs/vendor/sabre/event/lib/Loop/Loop.php(261): Sabre\Event\Promise->Sabre\Event\{closure}()
2017-01-21T17:44:50.291838529Z #17 /srv/phpbs/vendor/sabre/event/lib/Loop/Loop.php(215): Sabre\Event\Loop\Loop->runNextTicks()
2017-01-21T17:44:50.291842670Z #18 /srv/phpbs/vendor/sabre/event/lib/Loop/Loop.php(194): Sabre\Event\Loop\Loop->tick(true)
2017-01-21T17:44:50.291846832Z #19 /srv/phpbs/vendor/sabre/event/lib/Loop/functions.php(122): Sabre\Event\Loop\Loop->run()
2017-01-21T17:44:50.291851217Z #20 /srv/phpbs/bin/php-build-server.php(78): Sabre\Event\Loop\run()
@thelfensdrfer
Copy link

thelfensdrfer commented Feb 4, 2017

Got the same error:

{"method":"window\/logMessage","params":{"type":4,"message":"Parsing file 7054\/8083: file:***vendor\/wimg\/php-compatibility\/Sniffs\/PHP\/DeprecatedFunctionsSniff.php"},"jsonrpc":"2.0"}
[Extension Host] TypeError: Return value of LanguageServer\DefinitionResolver::resolveExpressionNodeToType() must implement interface phpDocumentor\Reflection\Type, null returned in /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/DefinitionResolver.php:455
Stack trace:
#0 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/DefinitionResolver.php(615): LanguageServer\DefinitionResolver->resolveExpressionNodeToType(Object(PhpParser\Node\Expr\ConstFetch))
#1 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/DefinitionResolver.php(615): LanguageServer\DefinitionResolver->resolveExpressionNodeToType(Object(PhpParser\Node\Expr\Array_))
#2 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/DefinitionResolver.php(788): LanguageServer\DefinitionResolver->resolveExpressionNodeToType(Object(PhpParser\Node\Expr\Array_))
#3 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/DefinitionResolver.php(131): LanguageServer\DefinitionResolver->getTypeFromNode(Object(PhpParser\Node\Stmt\PropertyProperty))
#4 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/NodeVisitor/DefinitionCollector.php(45): LanguageServer\DefinitionResolver->createDefinitionFromNode(Object(PhpParser\Node\Stmt\PropertyProperty), 'PHPCompatibilit...')
#5 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(130): LanguageServer\NodeVisitor\DefinitionCollector->enterNode(Object(PhpParser\Node\Stmt\PropertyProperty))
#6 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(88): PhpParser\NodeTraverser->traverseArray(Array)
#7 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(139): PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Property))
#8 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(88): PhpParser\NodeTraverser->traverseArray(Array)
#9 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(139): PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Class_))
#10 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(72): PhpParser\NodeTraverser->traverseArray(Array)
#11 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/PhpDocument.php(205): PhpParser\NodeTraverser->traverse(Array)
#12 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/PhpDocument.php(119): LanguageServer\PhpDocument->updateContent('<?php\n/**\n * PH...')
#13 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/PhpDocumentLoader.php(134): LanguageServer\PhpDocument->__construct('file:///home/ti...', '<?php\n/**\n * PH...', Object(LanguageServer\Index\Index), Object(LanguageServer\Parser), Object(phpDocumentor\Reflection\DocBlockFactory), Object(LanguageServer\DefinitionResolver))
#14 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/src/PhpDocumentLoader.php(113): LanguageServer\PhpDocumentLoader->create('file:///home/ti...', '<?php\n/**\n * PH...')
#15 [internal function]: LanguageServer\PhpDocumentLoader->LanguageServer\{closure}()
#16 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/sabre/event/lib/coroutine.php(70): Generator->send('<?php\n/**\n * PH...')
#17 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/sabre/event/lib/Promise.php(242): Sabre\Event\{closure}('<?php\n/**\n * PH...')
#18 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/sabre/event/lib/Loop/Loop.php(261): Sabre\Event\Promise->Sabre\Event\{closure}()
#19 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/sabre/event/lib/Loop/Loop.php(215): Sabre\Event\Loop\Loop->runNextTicks()
#20 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/sabre/event/lib/Loop/Loop.php(194): Sabre\Event\Loop\Loop->tick(true)
#21 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/sabre/event/lib/Loop/functions.php(122): Sabre\Event\Loop\Loop->run()
#22 /home/tim/.vscode/extensions/felixfbecker.php-intellisense-1.0.0/vendor/felixfbecker/language-server/bin/php-language-server.php(102): Sabre\Event\Loop\run()
#23 {main}

File is: https://github.com/wimg/PHPCompatibility/blob/master/Sniffs/PHP/DeprecatedFunctionsSniff.php

@filliph
Copy link

filliph commented Apr 22, 2017

Since my issue (in v1.2.0) was closed as a duplicate of this issue (in v1.0.0), which is also closed, when can we expect an actual fix for this issue? :)

@felixfbecker
Copy link
Owner Author

When someone does a PR and fixes it

@filliph
Copy link

filliph commented Apr 22, 2017

It's a bit discouraging when PRs sit pending review from the maintainer for ~2 weeks, but I went ahead and created a PR anyway, #362 :)

@felixfbecker
Copy link
Owner Author

Um, what PR exactly sits pending for review for 2 weeks? You do realise I am responding to your issues right now on the weekend, in my free time, do you? ;)

@filliph
Copy link

filliph commented Apr 22, 2017

#352, which is a feature that I personally care about.

I don't mean to sound entitled, it just strikes me as weird that a bug that causes the parser to not work at all for some users would sit unfixed for 2 months (#286) and when a PR is created, it's rejected because it fixes the crash, not the core issue.

To me, it makes more sense that the parser runs, but returns incorrect data for a small percentage of outcomes, rather than it not running at all and thus producing no data for 100% of outcomes, until such a time as it would be possible to investigate the root cause.

@felixfbecker
Copy link
Owner Author

It's not weird at all. Definition->type is accessed all over the codebase. You would have to add null checks for every single access. On the other side, Definitions are only ever created in a single method.

#352 has merge conflicts and includes a PR already merged, so I can't even review the real diff against master.

@filliph
Copy link

filliph commented Apr 22, 2017

@ the Defintion->type - fair enough. Would you be able to offer any assistance with what I need to do in order to help track down this problem?
I want to try to help, but the last time I tried I felt like I was brushed off. I understand that in this case, you may not have access to a file that can reproduce this issue, I do have access to such a file. However, I'm not familiar with your code, so it's a bit more difficult for me to simply jump in, when I don't even know what I'm looking for. Any assistance beyond "read the manual for tests" or "it's this method" would be much appreciated :)

@ #352 - okay, I just didn't see any comments from you or discussion with the author requesting a re-do from the latest master, or anything like that. To me, it looks like it's been ignored, that's all I was trying to say :)

@felixfbecker
Copy link
Owner Author

I would go to that method and set a conditional breakpoint when $def->type gets set to null to find out why

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants