diff --git a/config.xsd b/config.xsd
index 97e5401e1f9..634b3de26a1 100644
--- a/config.xsd
+++ b/config.xsd
@@ -410,7 +410,6 @@
-
diff --git a/docs/running_psalm/issues.md b/docs/running_psalm/issues.md
index dca69c9dda2..a57d76b9e4f 100644
--- a/docs/running_psalm/issues.md
+++ b/docs/running_psalm/issues.md
@@ -2,6 +2,7 @@
- [AbstractInstantiation](issues/AbstractInstantiation.md)
- [AbstractMethodCall](issues/AbstractMethodCall.md)
+ - [AmbiguousConstantInheritance](issues/AmbiguousConstantInheritance.md)
- [ArgumentTypeCoercion](issues/ArgumentTypeCoercion.md)
- [AssignmentToVoid](issues/AssignmentToVoid.md)
- [CircularReference](issues/CircularReference.md)
@@ -93,6 +94,7 @@
- [InvalidToString](issues/InvalidToString.md)
- [InvalidTraversableImplementation](issues/InvalidTraversableImplementation.md)
- [InvalidTypeImport](issues/InvalidTypeImport.md)
+ - [LessSpecificClassConstantType](issues/LessSpecificClassConstantType.md)
- [LessSpecificImplementedReturnType](issues/LessSpecificImplementedReturnType.md)
- [LessSpecificReturnStatement](issues/LessSpecificReturnStatement.md)
- [LessSpecificReturnType](issues/LessSpecificReturnType.md)
@@ -153,6 +155,7 @@
- [NullPropertyAssignment](issues/NullPropertyAssignment.md)
- [NullPropertyFetch](issues/NullPropertyFetch.md)
- [NullReference](issues/NullReference.md)
+ - [OverriddenInterfaceConstant](issues/OverriddenInterfaceConstant.md)
- [OverriddenMethodAccess](issues/OverriddenMethodAccess.md)
- [OverriddenPropertyAccess](issues/OverriddenPropertyAccess.md)
- [ParadoxicalCondition](issues/ParadoxicalCondition.md)
diff --git a/src/Psalm/Internal/Analyzer/Statements/Expression/ClassConstAnalyzer.php b/src/Psalm/Internal/Analyzer/Statements/Expression/ClassConstAnalyzer.php
index c924a776595..958c144f95b 100644
--- a/src/Psalm/Internal/Analyzer/Statements/Expression/ClassConstAnalyzer.php
+++ b/src/Psalm/Internal/Analyzer/Statements/Expression/ClassConstAnalyzer.php
@@ -722,15 +722,14 @@ public static function analyze(
): void {
foreach ($class_storage->constants as $const_name => $const_storage) {
// Check covariance
- /** @psalm-suppress PossiblyNullArrayAccess https://github.com/vimeo/psalm/issues/7151 */
[$parent_classlike_storage, $parent_const_storage] = self::getOverriddenConstant(
$class_storage,
$const_storage,
$const_name,
$codebase
);
- /** @psalm-suppress RedundantConditionGivenDocblockType https://github.com/vimeo/psalm/issues/7151 */
if ($parent_const_storage !== null) {
+ assert($parent_classlike_storage !== null);
$location = $const_storage->type_location ?? $const_storage->stmt_location;
if ($location !== null
&& $const_storage->type !== null
@@ -776,10 +775,7 @@ private static function getOverriddenConstant(
if ($parent_const_storage !== null) {
if ($const_storage->location
&& $const_storage !== $parent_const_storage
- && (
- $codebase->php_major_version < 8
- || ($codebase->php_major_version === 8 && $codebase->php_minor_version < 1)
- )
+ && $codebase->analysis_php_version_id < 8_01_00
) {
$interface_overrides[strtolower($interface)] = new OverriddenInterfaceConstant(
"{$class_storage->name}::{$const_name} cannot override constant from $interface",
diff --git a/src/Psalm/Issue/AmbiguousConstantInheritance.php b/src/Psalm/Issue/AmbiguousConstantInheritance.php
index 9064237cbb9..9da852f6b5b 100644
--- a/src/Psalm/Issue/AmbiguousConstantInheritance.php
+++ b/src/Psalm/Issue/AmbiguousConstantInheritance.php
@@ -1,4 +1,5 @@
type_param->getId($exact) . '>';
}
diff --git a/tests/ConstantTest.php b/tests/ConstantTest.php
index b3a6991cd62..ba15fb23a4f 100644
--- a/tests/ConstantTest.php
+++ b/tests/ConstantTest.php
@@ -1328,7 +1328,7 @@ function foo(array $arg): void {}
',
],
'classConstCovariant' => [
- ' ' [
- ' ' [
- ' ' 'InvalidReturnStatement',
- [],
- false,
- '8.1',
+ 'ignored_issues' => [],
+ 'php_version' => '8.1',
],
'outOfScopeDefinedConstant' => [
'code' => ' "InvalidConstantAssignmentValue",
],
'classConstContravariant' => [
- ' ' "LessSpecificClassConstantType",
],
'classConstAmbiguousInherit' => [
- ' ' 'AmbiguousConstantInheritance',
],
'overrideClassConstFromInterface' => [
- ' ' 'OverriddenInterfaceConstant',
],
'overrideClassConstFromInterfaceWithInterface' => [
- ' '