-
Notifications
You must be signed in to change notification settings - Fork 696
Closed
Labels
bugcauses crashintersectionsIssues related to intersection typesIssues related to intersection types
Description
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)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugcauses crashintersectionsIssues related to intersection typesIssues related to intersection types