From 4a90a300d39add327df2839ef13db72eaf34db9f Mon Sep 17 00:00:00 2001 From: adrian-martinez-onestic <162105928+adrian-martinez-onestic@users.noreply.github.com> Date: Tue, 2 Apr 2024 13:04:59 +0200 Subject: [PATCH] Validate return type using reflection --- .../RepositorySourceType/RepositorySourceFactory.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Model/GridSourceType/RepositorySourceType/RepositorySourceFactory.php b/Model/GridSourceType/RepositorySourceType/RepositorySourceFactory.php index bcf5d1be..005edc6d 100644 --- a/Model/GridSourceType/RepositorySourceType/RepositorySourceFactory.php +++ b/Model/GridSourceType/RepositorySourceType/RepositorySourceFactory.php @@ -129,7 +129,16 @@ private function validateReturnType(string $sourceConfig): void $class = $this->getSourceRepoClass($sourceConfig); $method = $this->getSourceRepoMethod($sourceConfig); - $returnType = $this->reflectionMethodsMap->getMethodReturnType($class, $method); + try { + $returnNamedType = (new \ReflectionClass($class))->getMethod($method)->getReturnType(); + + if ($returnNamedType instanceof \ReflectionNamedType) { + $returnType = $returnNamedType->getName(); + } + } catch (\ReflectionException) { + } + + $returnType ??= $this->reflectionMethodsMap->getMethodReturnType($class, $method); $resultInterface = SearchResultsInterface::class; if (!is_subclass_of($returnType, $resultInterface)) { $msg = sprintf('The repository source "%s" does not return a %s instance', $sourceConfig, $resultInterface);