diff --git a/src/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticCallAnalyzer.php b/src/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticCallAnalyzer.php index 4ca1c97fb67..2de6f4a16f2 100644 --- a/src/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticCallAnalyzer.php +++ b/src/Psalm/Internal/Analyzer/Statements/Expression/Call/StaticCallAnalyzer.php @@ -145,7 +145,9 @@ public static function analyze( } } - if (!$does_class_exist) { + if (!isset($context->phantom_classes[strtolower($fq_class_name)]) + && !$does_class_exist + ) { $does_class_exist = ClassLikeAnalyzer::checkFullyQualifiedClassLikeName( $statements_analyzer, $fq_class_name, diff --git a/src/Psalm/Internal/Analyzer/Statements/Expression/Fetch/ClassConstFetchAnalyzer.php b/src/Psalm/Internal/Analyzer/Statements/Expression/Fetch/ClassConstFetchAnalyzer.php index 61187147f52..c42d5d8cec9 100644 --- a/src/Psalm/Internal/Analyzer/Statements/Expression/Fetch/ClassConstFetchAnalyzer.php +++ b/src/Psalm/Internal/Analyzer/Statements/Expression/Fetch/ClassConstFetchAnalyzer.php @@ -74,7 +74,9 @@ public static function analyze( ); if ($stmt->name instanceof PhpParser\Node\Identifier) { - if (!$context->inside_class_exists || $stmt->name->name !== 'class') { + if ((!$context->inside_class_exists || $stmt->name->name !== 'class') + && !isset($context->phantom_classes[strtolower($fq_class_name)]) + ) { if (ClassLikeAnalyzer::checkFullyQualifiedClassLikeName( $statements_analyzer, $fq_class_name, diff --git a/tests/ClassTest.php b/tests/ClassTest.php index a832a3c0565..69e1a935a2c 100644 --- a/tests/ClassTest.php +++ b/tests/ClassTest.php @@ -513,6 +513,18 @@ public function get(): A { } }', ], + 'noErrorsAfterClassExists' => [ + '