From e33dbd50ea16e2cb4ae9c5875445dae7e9d4f424 Mon Sep 17 00:00:00 2001 From: Richard van Velzen Date: Sun, 12 Jun 2022 10:56:08 +0200 Subject: [PATCH] Fix resolving user-defined constants in sub-namespaces --- src/Reflection/InitializerExprContext.php | 2 +- .../IncompatibleClassConstantPhpDocTypeRuleTest.php | 5 +++++ .../Rules/PhpDoc/data/bug-7352-with-sub-namespace.php | 11 +++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/PHPStan/Rules/PhpDoc/data/bug-7352-with-sub-namespace.php diff --git a/src/Reflection/InitializerExprContext.php b/src/Reflection/InitializerExprContext.php index 65568cd890..1818d15e92 100644 --- a/src/Reflection/InitializerExprContext.php +++ b/src/Reflection/InitializerExprContext.php @@ -47,7 +47,7 @@ private static function parseNamespace(string $name): ?string { $parts = explode('\\', $name); if (count($parts) > 1) { - return implode('\\', array_slice($parts, 0, 1)); + return implode('\\', array_slice($parts, 0, -1)); } return null; diff --git a/tests/PHPStan/Rules/PhpDoc/IncompatibleClassConstantPhpDocTypeRuleTest.php b/tests/PHPStan/Rules/PhpDoc/IncompatibleClassConstantPhpDocTypeRuleTest.php index 5e1bbacf75..e033737170 100644 --- a/tests/PHPStan/Rules/PhpDoc/IncompatibleClassConstantPhpDocTypeRuleTest.php +++ b/tests/PHPStan/Rules/PhpDoc/IncompatibleClassConstantPhpDocTypeRuleTest.php @@ -49,4 +49,9 @@ public function testBug7352(): void $this->analyse([__DIR__ . '/data/bug-7352.php'], []); } + public function testBug7352WithSubNamespace(): void + { + $this->analyse([__DIR__ . '/data/bug-7352-with-sub-namespace.php'], []); + } + } diff --git a/tests/PHPStan/Rules/PhpDoc/data/bug-7352-with-sub-namespace.php b/tests/PHPStan/Rules/PhpDoc/data/bug-7352-with-sub-namespace.php new file mode 100644 index 0000000000..a9b87c2cf7 --- /dev/null +++ b/tests/PHPStan/Rules/PhpDoc/data/bug-7352-with-sub-namespace.php @@ -0,0 +1,11 @@ +