From aea33824e6f94aaead3d45945a1856f24327a695 Mon Sep 17 00:00:00 2001 From: Matthew Brown Date: Tue, 18 Feb 2020 19:46:05 -0500 Subject: [PATCH] Fix #1555 - allow phantom class constants --- .../Expression/Call/StaticCallAnalyzer.php | 4 +++- .../Expression/Fetch/ClassConstFetchAnalyzer.php | 4 +++- tests/ClassTest.php | 12 ++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) 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' => [ + '