diff --git a/src/Psalm/Internal/Provider/ReturnTypeProvider/GetObjectVarsReturnTypeProvider.php b/src/Psalm/Internal/Provider/ReturnTypeProvider/GetObjectVarsReturnTypeProvider.php index 888280cd346..cc8a43da8ca 100644 --- a/src/Psalm/Internal/Provider/ReturnTypeProvider/GetObjectVarsReturnTypeProvider.php +++ b/src/Psalm/Internal/Provider/ReturnTypeProvider/GetObjectVarsReturnTypeProvider.php @@ -43,7 +43,7 @@ public static function getGetObjectVarsReturnType( if ($object_type instanceof TObjectWithProperties) { if ([] === $object_type->properties) { - return Type::getEmptyArray(); + return Type::parseString('array'); } return new Union([ new TKeyedArray($object_type->properties) @@ -62,7 +62,11 @@ public static function getGetObjectVarsReturnType( } if ([] === $class_storage->appearing_property_ids) { - return Type::getEmptyArray(); + if ($class_storage->final) { + return Type::getEmptyArray(); + } + + return Type::parseString('array'); } $properties = []; @@ -86,7 +90,11 @@ public static function getGetObjectVarsReturnType( } if ([] === $properties) { - return Type::getEmptyArray(); + if ($class_storage->final) { + return Type::getEmptyArray(); + } + + return Type::parseString('array'); } return new Union([ diff --git a/tests/ReturnTypeProvider/GetObjectVarsTest.php b/tests/ReturnTypeProvider/GetObjectVarsTest.php index 9e8d8500e47..cec41706c2c 100644 --- a/tests/ReturnTypeProvider/GetObjectVarsTest.php +++ b/tests/ReturnTypeProvider/GetObjectVarsTest.php @@ -24,7 +24,7 @@ class C { yield 'omitsPrivateAndProtectedPropertiesWhenCalledOutsideOfClassScope' => [ '