From 9f84da4d6f74ebfd14c2d3fe776a52e57212cc01 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Thu, 13 Jan 2022 23:36:46 +0100 Subject: [PATCH] Try another strategy --- .../Method/MethodCallReturnTypeFetcher.php | 13 +++++++ .../Provider/FunctionReturnTypeProvider.php | 1 - .../Provider/MethodReturnTypeProvider.php | 2 -- .../ExceptionCodeReturnTypeProvider.php | 35 ------------------- 4 files changed, 13 insertions(+), 38 deletions(-) delete mode 100644 src/Psalm/Internal/Provider/ReturnTypeProvider/ExceptionCodeReturnTypeProvider.php diff --git a/src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallReturnTypeFetcher.php b/src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallReturnTypeFetcher.php index cc99d748ec5..4e48a48bd4b 100644 --- a/src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallReturnTypeFetcher.php +++ b/src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/MethodCallReturnTypeFetcher.php @@ -2,6 +2,8 @@ namespace Psalm\Internal\Analyzer\Statements\Expression\Call\Method; +use Exception; +use PDOException; use PhpParser; use Psalm\CodeLocation; use Psalm\Codebase; @@ -27,6 +29,7 @@ use Psalm\Type\Atomic\TNamedObject; use Psalm\Type\Atomic\TTemplateParam; use Psalm\Type\Union; +use Throwable; use UnexpectedValueException; use function array_filter; @@ -92,6 +95,16 @@ public static function fetch( } } + if ($premixin_method_id->method_name === 'getcode' + && $premixin_method_id->fq_class_name !== Exception::class + && in_array(Throwable::class, $class_storage->class_implements)) { + if ($premixin_method_id->fq_class_name === PDOException::class) { + return Type::getString(); + } else { + return Type::getInt(); + } + } + if ($declaring_method_id && $declaring_method_id !== $method_id) { $declaring_fq_class_name = $declaring_method_id->fq_class_name; $declaring_method_name = $declaring_method_id->method_name; diff --git a/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php b/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php index 70d8119aaf7..8b124ea5532 100644 --- a/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php +++ b/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php @@ -23,7 +23,6 @@ use Psalm\Internal\Provider\ReturnTypeProvider\ArraySpliceReturnTypeProvider; use Psalm\Internal\Provider\ReturnTypeProvider\ArrayUniqueReturnTypeProvider; use Psalm\Internal\Provider\ReturnTypeProvider\ArrayValuesReturnTypeProvider; -use Psalm\Internal\Provider\ReturnTypeProvider\ExceptionCodeReturnTypeProvider; use Psalm\Internal\Provider\ReturnTypeProvider\ExplodeReturnTypeProvider; use Psalm\Internal\Provider\ReturnTypeProvider\FilterVarReturnTypeProvider; use Psalm\Internal\Provider\ReturnTypeProvider\FirstArgStringReturnTypeProvider; diff --git a/src/Psalm/Internal/Provider/MethodReturnTypeProvider.php b/src/Psalm/Internal/Provider/MethodReturnTypeProvider.php index 7e42a861340..f29dc77d6cc 100644 --- a/src/Psalm/Internal/Provider/MethodReturnTypeProvider.php +++ b/src/Psalm/Internal/Provider/MethodReturnTypeProvider.php @@ -8,7 +8,6 @@ use Psalm\Context; use Psalm\Internal\Provider\ReturnTypeProvider\ClosureFromCallableReturnTypeProvider; use Psalm\Internal\Provider\ReturnTypeProvider\DomNodeAppendChild; -use Psalm\Internal\Provider\ReturnTypeProvider\ExceptionCodeReturnTypeProvider; use Psalm\Internal\Provider\ReturnTypeProvider\ImagickPixelColorReturnTypeProvider; use Psalm\Internal\Provider\ReturnTypeProvider\PdoStatementReturnTypeProvider; use Psalm\Internal\Provider\ReturnTypeProvider\SimpleXmlElementAsXml; @@ -59,7 +58,6 @@ public function __construct() $this->registerClass(SimpleXmlElementAsXml::class); $this->registerClass(PdoStatementReturnTypeProvider::class); $this->registerClass(ClosureFromCallableReturnTypeProvider::class); - $this->registerClass(ExceptionCodeReturnTypeProvider::class); } /** diff --git a/src/Psalm/Internal/Provider/ReturnTypeProvider/ExceptionCodeReturnTypeProvider.php b/src/Psalm/Internal/Provider/ReturnTypeProvider/ExceptionCodeReturnTypeProvider.php deleted file mode 100644 index e2c5f447522..00000000000 --- a/src/Psalm/Internal/Provider/ReturnTypeProvider/ExceptionCodeReturnTypeProvider.php +++ /dev/null @@ -1,35 +0,0 @@ -getMethodNameLowercase(); - $fqcn = $event->getFqClasslikeName(); - - if ($method_name_lowercase !== 'getcode') { - return null; - } - - if ($fqcn === 'Exception' || $fqcn === 'Throwable') { - return null; - } - - if ($fqcn === 'PDOException') { - return Type::parseString('string'); - } - - return Type::parseString('int'); - } -}