Skip to content
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

Could not get class storage for redis #10152

Closed
thbley opened this issue Aug 26, 2023 · 1 comment · Fixed by #10720
Closed

Could not get class storage for redis #10152

thbley opened this issue Aug 26, 2023 · 1 comment · Fixed by #10720
Labels
bug causes crash intersections Issues related to intersection types

Comments

@thbley
Copy link
Contributor

thbley commented Aug 26, 2023

Psalm 5.15 crashes with:

public Redis&App $redis;

but succeeds with:

private Redis $redis;

https://psalm.dev/r/8eca4012df
https://psalm.dev/r/8c20742f57

Target PHP version: 8.2 (inferred from current PHP version) Enabled extensions: pdo, redis (unsupported extensions: pdo_pgsql, spl, pcre, zend-opcache).
Scanning files...
Uncaught InvalidArgumentException: Could not get class storage for redis in /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Provider/ClassLikeStorageProvider.php:45
Stack trace:
#0 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/ClassLikes.php(613): Psalm\Internal\Provider\ClassLikeStorageProvider->get('redis')
#1 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Codebase.php(705): Psalm\Internal\Codebase\ClassLikes->classExtends('redis', 'pdo')
#2 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(340): Psalm\Codebase->classExtendsOrImplements('redis', 'pdo')
#3 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/ObjectComparator.php(117): Psalm\Internal\Type\Comparator\ObjectComparator::isIntersectionShallowlyContainedBy(Object(Psalm\Codebase), Object(Psalm\Type\Atomic\TNamedObject), Object(Psalm\Type\Atomic\TNamedObject), 'pdo', false, false, NULL)
#4 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Type/Comparator/AtomicTypeComparator.php(354): Psalm\Internal\Type\Comparator\ObjectComparator::isShallowlyContainedBy(Object(Psalm\Codebase), Object(Psalm\Type\Atomic\TNamedObject), Object(Psalm\Type\Atomic\TNamedObject), false, NULL)
#5 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Type.php(869): Psalm\Internal\Type\Comparator\AtomicTypeComparator::isContainedBy(Object(Psalm\Codebase), Object(Psalm\Type\Atomic\TNamedObject), Object(Psalm\Type\Atomic\TNamedObject))
#6 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Type.php(750): Psalm\Type::intersectAtomicTypes(Object(Psalm\Type\Atomic\TNamedObject), Object(Psalm\Type\Atomic\TNamedObject), Object(Psalm\Codebase), false)
#7 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/TypeHintResolver.php(112): Psalm\Type::intersectUnionTypes(Object(Psalm\Type\Union), Object(Psalm\Type\Union), Object(Psalm\Codebase))
#8 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/ClassLikeNodeScanner.php(1600): Psalm\Internal\PhpVisitor\Reflector\TypeHintResolver::resolve(Object(PhpParser\Node\IntersectionType), Object(Psalm\CodeLocation), Object(Psalm\Codebase), Object(Psalm\Storage\FileStorage), Object(Psalm\Storage\ClassLikeStorage), Object(Psalm\Aliases), 80208)
#9 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/Reflector/ClassLikeNodeScanner.php(766): Psalm\Internal\PhpVisitor\Reflector\ClassLikeNodeScanner->visitPropertyDeclaration(Object(PhpParser\Node\Stmt\Property), Object(Psalm\Config), Object(Psalm\Storage\ClassLikeStorage), 'AppMock2')
#10 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/PhpVisitor/ReflectorVisitor.php(157): Psalm\Internal\PhpVisitor\Reflector\ClassLikeNodeScanner->start(Object(PhpParser\Node\Stmt\Class_))
#11 /var/www/tests/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200): Psalm\Internal\PhpVisitor\ReflectorVisitor->enterNode(Object(PhpParser\Node\Stmt\Class_))
#12 /var/www/tests/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(91): PhpParser\NodeTraverser->traverseArray(Array)
#13 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Scanner/FileScanner.php(79): PhpParser\NodeTraverser->traverse(Array)
#14 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(554): Psalm\Internal\Scanner\FileScanner->scan(Object(Psalm\Codebase), Object(Psalm\Storage\FileStorage), false, Object(Psalm\Progress\DefaultProgress))
#15 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(782): Psalm\Internal\Codebase\Scanner->scanFile('/var/www/tests/...', Array, true)
#16 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(428): Psalm\Internal\Codebase\Scanner->scanAPath(58, '/var/www/tests/...')
#17 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Scanner.php(280): Psalm\Internal\Codebase\Scanner->scanFilePaths(1)
#18 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Codebase.php(505): Psalm\Internal\Codebase\Scanner->scanFiles(Object(Psalm\Internal\Codebase\ClassLikes), 1)
#19 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(522): Psalm\Codebase->scanFiles(1)
#20 /var/www/tests/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(379): Psalm\Internal\Analyzer\ProjectAnalyzer->check('/var/www/', true)
#21 /var/www/tests/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run(Array)
#22 /var/www/tests/vendor/bin/psalm(119): include('/var/www/tests/...')
#23 {main}
(Psalm 5.15.0@5c774aca4746caf3d239d9c8cadb9f882ca29352 crashed due to an uncaught Throwable)
@psalm-github-bot
Copy link

I found these snippets:

https://psalm.dev/r/8eca4012df
<?php

use Redis;

class App
{
    private Redis $redis;
}
Psalm output (using commit 190d488):

ERROR: MissingConstructor - 7:19 - App has an uninitialized property App::$redis, but no constructor
https://psalm.dev/r/8c20742f57
<?php

use Redis;

class App
{
    private Redis&App $redis;
}
Psalm encountered an internal error:

/vendor/vimeo/psalm/src/Psalm/Internal/Provider/ClassLikeStorageProvider.php: Could not get class storage for redis

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug causes crash intersections Issues related to intersection types
Projects
None yet
2 participants