From a7f2cd2b60eb3075a89cbcf279ab243a73cd071f Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Tue, 12 Nov 2024 14:03:18 +0100 Subject: [PATCH 1/8] [Composer] Bumped symfony-related packages requirements to ^6.4 --- composer.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 7498da78..2e10e96e 100644 --- a/composer.json +++ b/composer.json @@ -18,12 +18,12 @@ "ext-xmlwriter": "*", "ibexa/core": "~5.0.x-dev", "netgen/query-translator": "^1.0.2", - "symfony/http-kernel": "^5.0", - "symfony/dependency-injection": "^5.0", - "symfony/console": "^5.0", - "symfony/config": "^5.0", - "symfony/framework-bundle": "^5.0", - "symfony/http-client": "^5.4" + "symfony/http-kernel": "^6.4", + "symfony/dependency-injection": "^6.4", + "symfony/console": "^6.4", + "symfony/config": "^6.4", + "symfony/framework-bundle": "^6.4", + "symfony/http-client": "^6.4" }, "require-dev": { "ibexa/code-style": "~2.0.0", @@ -33,8 +33,8 @@ "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-symfony": "^1.2", "phpunit/phpunit": "^9.6", - "symfony/phpunit-bridge": "^5.4", - "symfony/proxy-manager-bridge": "^5.4" + "symfony/phpunit-bridge": "^6.4", + "symfony/proxy-manager-bridge": "^6.4" }, "autoload": { "psr-4": { From f0a3c0d729489b953c0e2fc3d1bd93fa64e59623 Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Tue, 12 Nov 2024 14:39:57 +0100 Subject: [PATCH 2/8] Aligned IbexaSolrExtension method signatures with Symfony 6 --- .../IbexaSolrExtension.php | 59 +++++++++---------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/src/bundle/DependencyInjection/IbexaSolrExtension.php b/src/bundle/DependencyInjection/IbexaSolrExtension.php index d06db193..5d042132 100644 --- a/src/bundle/DependencyInjection/IbexaSolrExtension.php +++ b/src/bundle/DependencyInjection/IbexaSolrExtension.php @@ -103,18 +103,13 @@ public function getServicePrefix(): string } /** - * Loads a specific configuration. - * - * @param array $configs An array of configuration values - * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance - * * @throws \InvalidArgumentException When provided tag is not defined in this extension - * - * @api + * @throws \Exception */ - public function load(array $configs, ContainerBuilder $container) + public function load(array $configs, ContainerBuilder $container): void { $configuration = $this->getConfiguration($configs, $container); + assert($configuration !== null); $config = $this->processConfiguration($configuration, $configs); // Loading configuration from lib/Resources/config/container @@ -141,10 +136,9 @@ public function load(array $configs, ContainerBuilder $container) * Processes connection configuration by flattening connection parameters * and setting them to the container as parameters. * - * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container - * @param array $config + * @param array $config */ - protected function processConnectionConfiguration(ContainerBuilder $container, array $config) + protected function processConnectionConfiguration(ContainerBuilder $container, array $config): void { $alias = $this->getServicePrefix(); @@ -189,12 +183,13 @@ protected function processConnectionConfiguration(ContainerBuilder $container, a /** * Creates needed search services for given connection name and parameters. * - * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container - * @param string $connectionName - * @param array $connectionParams + * @param array $connectionParams */ - private function configureSearchServices(ContainerBuilder $container, $connectionName, $connectionParams) - { + private function configureSearchServices( + ContainerBuilder $container, + string $connectionName, + array $connectionParams + ): void { $alias = $this->getServicePrefix(); // Endpoint resolver @@ -244,12 +239,13 @@ private function configureSearchServices(ContainerBuilder $container, $connectio /** * Creates boost factor map parameter for a given $connectionName. * - * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container - * @param string $connectionName - * @param array $connectionParams + * @param array $connectionParams */ - private function configureBoostMap(ContainerBuilder $container, $connectionName, $connectionParams) - { + private function configureBoostMap( + ContainerBuilder $container, + string $connectionName, + array $connectionParams + ): void { $alias = $this->getServicePrefix(); $boostFactorMap = $this->buildBoostFactorMap($connectionParams['boost_factors']); $boostFactorMapId = "{$alias}.connection.{$connectionName}.boost_factor_map_id"; @@ -260,11 +256,9 @@ private function configureBoostMap(ContainerBuilder $container, $connectionName, /** * Creates indexing depth map parameter for a given $connectionName. * - * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container - * @param string $connectionName - * @param array $connectionParams + * @param array $connectionParams */ - private function configureIndexingDepth(ContainerBuilder $container, $connectionName, $connectionParams) + private function configureIndexingDepth(ContainerBuilder $container, string $connectionName, array $connectionParams): void { $alias = $this->getServicePrefix(); @@ -278,11 +272,9 @@ private function configureIndexingDepth(ContainerBuilder $container, $connection /** * Creates Endpoint definition in the service container. * - * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container - * @param string $alias - * @param array $params + * @param array $params */ - protected function defineEndpoint(ContainerBuilder $container, $alias, $params) + protected function defineEndpoint(ContainerBuilder $container, string $alias, array $params): void { $definition = new Definition(self::ENDPOINT_CLASS, [$params]); $definition->addTag(self::ENDPOINT_TAG, ['alias' => $alias]); @@ -293,6 +285,9 @@ protected function defineEndpoint(ContainerBuilder $container, $alias, $params) ); } + /** + * @param array> $config + */ public function getConfiguration(array $config, ContainerBuilder $container): ?ConfigurationInterface { return new Configuration($this->getAlias()); @@ -303,11 +298,11 @@ public function getConfiguration(array $config, ContainerBuilder $container): ?C * * @see \Ibexa\Solr\FieldMapper\BoostFactorProvider::$map * - * @param array $config + * @param array $config * - * @return array + * @return array */ - protected function buildBoostFactorMap(array $config) + protected function buildBoostFactorMap(array $config): array { $boostFactorMap = []; From 8b50a4bc082e6604775b70ce484b993986762437 Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Tue, 12 Nov 2024 14:42:35 +0100 Subject: [PATCH 3/8] Aligned IbexaSolrBundle::build method signature with Symfony 6 --- src/bundle/IbexaSolrBundle.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/IbexaSolrBundle.php b/src/bundle/IbexaSolrBundle.php index bf2c1db3..6ade3800 100644 --- a/src/bundle/IbexaSolrBundle.php +++ b/src/bundle/IbexaSolrBundle.php @@ -21,7 +21,7 @@ class IbexaSolrBundle extends Bundle { - public function build(ContainerBuilder $container) + public function build(ContainerBuilder $container): void { parent::build($container); From d16c136e254220b21726ed94e40686d483b9b60f Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Tue, 12 Nov 2024 14:48:29 +0100 Subject: [PATCH 4/8] Aligned compiler passes methods signatures with Symfony 6 --- .../Container/Compiler/AggregateCriterionVisitorPass.php | 7 +++++-- .../Compiler/AggregateFacetBuilderVisitorPass.php | 4 ++-- .../Container/Compiler/AggregateSortClauseVisitorPass.php | 7 +++++-- src/lib/Container/Compiler/BaseFieldMapperPass.php | 2 +- src/lib/Container/Compiler/EndpointRegistryPass.php | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/lib/Container/Compiler/AggregateCriterionVisitorPass.php b/src/lib/Container/Compiler/AggregateCriterionVisitorPass.php index 303d885b..6732dc3e 100644 --- a/src/lib/Container/Compiler/AggregateCriterionVisitorPass.php +++ b/src/lib/Container/Compiler/AggregateCriterionVisitorPass.php @@ -17,7 +17,7 @@ */ class AggregateCriterionVisitorPass implements CompilerPassInterface { - public function process(ContainerBuilder $container) + public function process(ContainerBuilder $container): void { if ( !$container->hasDefinition('ibexa.solr.query.content.criterion_visitor.aggregate') && @@ -51,7 +51,10 @@ public function process(ContainerBuilder $container) } } - protected function addHandlers(Definition $definition, $handlers) + /** + * @param array> $handlers + */ + protected function addHandlers(Definition $definition, array $handlers): void { foreach ($handlers as $id => $attributes) { $definition->addMethodCall('addVisitor', [new Reference($id)]); diff --git a/src/lib/Container/Compiler/AggregateFacetBuilderVisitorPass.php b/src/lib/Container/Compiler/AggregateFacetBuilderVisitorPass.php index b5c4e671..3347fd41 100644 --- a/src/lib/Container/Compiler/AggregateFacetBuilderVisitorPass.php +++ b/src/lib/Container/Compiler/AggregateFacetBuilderVisitorPass.php @@ -16,13 +16,13 @@ */ class AggregateFacetBuilderVisitorPass implements CompilerPassInterface { - public function process(ContainerBuilder $container) + public function process(ContainerBuilder $container): void { $this->processVisitors($container, 'content'); $this->processVisitors($container, 'location'); } - private function processVisitors(ContainerBuilder $container, $name = 'content') + private function processVisitors(ContainerBuilder $container, string $name = 'content'): void { if (!$container->hasDefinition("ibexa.solr.query.$name.facet_builder_visitor.aggregate")) { return; diff --git a/src/lib/Container/Compiler/AggregateSortClauseVisitorPass.php b/src/lib/Container/Compiler/AggregateSortClauseVisitorPass.php index 6a3230f5..c0325028 100644 --- a/src/lib/Container/Compiler/AggregateSortClauseVisitorPass.php +++ b/src/lib/Container/Compiler/AggregateSortClauseVisitorPass.php @@ -20,7 +20,7 @@ class AggregateSortClauseVisitorPass implements CompilerPassInterface /** * @throws \LogicException */ - public function process(ContainerBuilder $container) + public function process(ContainerBuilder $container): void { if ( !$container->hasDefinition('ibexa.solr.query.content.sort_clause_visitor.aggregate') && @@ -54,7 +54,10 @@ public function process(ContainerBuilder $container) } } - protected function addHandlers(Definition $definition, $handlers) + /** + * @param array> $handlers + */ + protected function addHandlers(Definition $definition, array $handlers): void { foreach ($handlers as $id => $attributes) { $definition->addMethodCall('addVisitor', [new Reference($id)]); diff --git a/src/lib/Container/Compiler/BaseFieldMapperPass.php b/src/lib/Container/Compiler/BaseFieldMapperPass.php index 30262933..d28e23b2 100644 --- a/src/lib/Container/Compiler/BaseFieldMapperPass.php +++ b/src/lib/Container/Compiler/BaseFieldMapperPass.php @@ -26,7 +26,7 @@ abstract class BaseFieldMapperPass implements CompilerPassInterface */ public const AGGREGATE_MAPPER_SERVICE_TAG = null; - public function process(ContainerBuilder $container) + public function process(ContainerBuilder $container): void { if (!$container->hasDefinition(static::AGGREGATE_MAPPER_SERVICE_ID)) { return; diff --git a/src/lib/Container/Compiler/EndpointRegistryPass.php b/src/lib/Container/Compiler/EndpointRegistryPass.php index b54002a3..25a12404 100644 --- a/src/lib/Container/Compiler/EndpointRegistryPass.php +++ b/src/lib/Container/Compiler/EndpointRegistryPass.php @@ -23,7 +23,7 @@ class EndpointRegistryPass implements CompilerPassInterface * * @throws \LogicException */ - public function process(ContainerBuilder $container) + public function process(ContainerBuilder $container): void { if ( !$container->hasDefinition( From 44dea2a4da9b036c6f7a53f20f8a42a8469588ba Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 11 Dec 2024 15:32:12 +0100 Subject: [PATCH 5/8] Refactored IbexaSolrExtension to extend ConfigurableExtension --- .../DependencyInjection/IbexaSolrExtension.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/bundle/DependencyInjection/IbexaSolrExtension.php b/src/bundle/DependencyInjection/IbexaSolrExtension.php index 5d042132..8bb5757b 100644 --- a/src/bundle/DependencyInjection/IbexaSolrExtension.php +++ b/src/bundle/DependencyInjection/IbexaSolrExtension.php @@ -20,12 +20,12 @@ use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; use Symfony\Component\DependencyInjection\Reference; -use Symfony\Component\HttpKernel\DependencyInjection\Extension; +use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension; /** * @phpstan-type SolrHttpClientConfigArray = array{timeout: int, max_retries: int} */ -class IbexaSolrExtension extends Extension +class IbexaSolrExtension extends ConfigurableExtension { /** * Main Solr search handler service ID. @@ -103,15 +103,13 @@ public function getServicePrefix(): string } /** + * @param array $mergedConfig + * * @throws \InvalidArgumentException When provided tag is not defined in this extension * @throws \Exception */ - public function load(array $configs, ContainerBuilder $container): void + public function loadInternal(array $mergedConfig, ContainerBuilder $container): void { - $configuration = $this->getConfiguration($configs, $container); - assert($configuration !== null); - $config = $this->processConfiguration($configuration, $configs); - // Loading configuration from lib/Resources/config/container $loader = new YamlFileLoader( $container, @@ -125,7 +123,7 @@ public function load(array $configs, ContainerBuilder $container): void ); $loader->load('services.yml'); - $this->processConnectionConfiguration($container, $config); + $this->processConnectionConfiguration($container, $mergedConfig); $container ->registerForAutoconfiguration(UpdateSerializerInterface::class) From 58c08bf70e25d2c0e8aff7d9d73d50ad8348e53c Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 11 Dec 2024 15:35:45 +0100 Subject: [PATCH 6/8] Added strict return types to Search Handler `find*` methods --- .../IbexaSolrExtension.php | 51 ++++++------------- src/lib/Handler.php | 43 ++-------------- 2 files changed, 19 insertions(+), 75 deletions(-) diff --git a/src/bundle/DependencyInjection/IbexaSolrExtension.php b/src/bundle/DependencyInjection/IbexaSolrExtension.php index 8bb5757b..c70f1697 100644 --- a/src/bundle/DependencyInjection/IbexaSolrExtension.php +++ b/src/bundle/DependencyInjection/IbexaSolrExtension.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\Solr\ApiLoader\SolrEngineFactory; use Ibexa\Solr\FieldMapper\BoostFactorProvider; use Ibexa\Solr\Gateway\DistributionStrategy\CloudDistributionStrategy; +use Ibexa\Solr\Gateway\Endpoint; use Ibexa\Solr\Gateway\UpdateSerializerInterface; use Ibexa\Solr\Handler; use Symfony\Component\Config\Definition\ConfigurationInterface; @@ -30,67 +31,45 @@ class IbexaSolrExtension extends ConfigurableExtension /** * Main Solr search handler service ID. * - * @var string + * @phpstan-var class-string */ - public const ENGINE_ID = Handler::class; + public const string ENGINE_ID = Handler::class; /** * Configured core gateway service ID. * * Not using service alias since alias can't be passed for decoration. - * - * @var string */ - public const GATEWAY_ID = 'ibexa.solr.gateway.native'; + public const string GATEWAY_ID = 'ibexa.solr.gateway.native'; /** * Configured core filter service ID. * * Not using service alias since alias can't be passed for decoration. - * - * @var string */ - public const CORE_FILTER_ID = 'ibexa.solr.core_filter.native'; + public const string CORE_FILTER_ID = 'ibexa.solr.core_filter.native'; /** * Configured core endpoint resolver service ID. * * Not using service alias since alias can't be passed for decoration. - * - * @var string */ - public const ENDPOINT_RESOLVER_ID = 'ibexa.solr.gateway.endpoint_resolver.native'; + public const string ENDPOINT_RESOLVER_ID = 'ibexa.solr.gateway.endpoint_resolver.native'; - /** - * Endpoint class. - * - * @var string - */ - public const ENDPOINT_CLASS = 'Ibexa\\Solr\\Gateway\\Endpoint'; + /** @phpstan-var class-string */ + public const string ENDPOINT_CLASS = Endpoint::class; - /** - * Endpoint service tag. - * - * @var string - */ - public const ENDPOINT_TAG = 'ibexa.search.solr.endpoint'; + public const string ENDPOINT_TAG = 'ibexa.search.solr.endpoint'; - /** - * @var string - */ - public const BOOST_FACTOR_PROVIDER_ID = BoostFactorProvider::class; + /** @phpstan-var class-string */ + public const string BOOST_FACTOR_PROVIDER_ID = BoostFactorProvider::class; - /** - * @var string - */ - public const STANDALONE_DISTRIBUTION_STRATEGY_ID = 'ibexa.solr.gateway.distribution_strategy.abstract_standalone'; + public const string STANDALONE_DISTRIBUTION_STRATEGY_ID = 'ibexa.solr.gateway.distribution_strategy.abstract_standalone'; - /** - * @var string - */ - public const CLOUD_DISTRIBUTION_STRATEGY_ID = CloudDistributionStrategy::class; + /** @phpstan-var class-string */ + public const string CLOUD_DISTRIBUTION_STRATEGY_ID = CloudDistributionStrategy::class; - public const GATEWAY_UPDATE_SERIALIZER_TAG = 'ibexa.solr.gateway.serializer.update'; + public const string GATEWAY_UPDATE_SERIALIZER_TAG = 'ibexa.solr.gateway.serializer.update'; public function getAlias(): string { diff --git a/src/lib/Handler.php b/src/lib/Handler.php index c6be953a..772b7fc7 100644 --- a/src/lib/Handler.php +++ b/src/lib/Handler.php @@ -14,6 +14,7 @@ use Ibexa\Contracts\Core\Repository\Values\Content\LocationQuery; use Ibexa\Contracts\Core\Repository\Values\Content\Query; use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion; +use Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult; use Ibexa\Contracts\Core\Search\VersatileHandler; use Ibexa\Contracts\Solr\DocumentMapper; use Ibexa\Core\Base\Exceptions\InvalidArgumentException; @@ -126,19 +127,7 @@ public function __construct( $this->resultExtractor = $contentResultExtractor; } - /** - * Finds content objects for the given query. - * - * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException if Query criterion is not applicable to its target - * - * @param array $languageFilter - a map of language related filters specifying languages query will be performed on. - * Also used to define which field languages are loaded for the returned content. - * Currently supports: array("languages" => array(,..), "useAlwaysAvailable" => bool) - * useAlwaysAvailable defaults to true to avoid exceptions on missing translations. - * - * @return \Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult - */ - public function findContent(Query $query, array $languageFilter = []) + public function findContent(Query $query, array $languageFilter = []): SearchResult { $query = clone $query; $query->filter = $query->filter ?: new Criterion\MatchAll(); @@ -159,21 +148,7 @@ public function findContent(Query $query, array $languageFilter = []) ); } - /** - * Performs a query for a single content object. - * - * @throws \Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException if the object was not found by the query or due to permissions - * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException if Criterion is not applicable to its target - * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException if there is more than than one result matching the criterions - * - * @param array $languageFilter - a map of language related filters specifying languages query will be performed on. - * Also used to define which field languages are loaded for the returned content. - * Currently supports: array("languages" => array(,..), "useAlwaysAvailable" => bool) - * useAlwaysAvailable defaults to true to avoid exceptions on missing translations. - * - * @return \Ibexa\Contracts\Core\Persistence\Content - */ - public function findSingle(Query\CriterionInterface $filter, array $languageFilter = []) + public function findSingle(Query\CriterionInterface $filter, array $languageFilter = []): Content\ContentInfo { $query = new Query(); $query->filter = $filter; @@ -202,17 +177,7 @@ public function findSingle(Query\CriterionInterface $filter, array $languageFilt return $first->valueObject; } - /** - * Finds Locations for the given $query. - * - * @param array $languageFilter - a map of language related filters specifying languages query will be performed on. - * Also used to define which field languages are loaded for the returned content. - * Currently supports: array("languages" => array(,..), "useAlwaysAvailable" => bool) - * useAlwaysAvailable defaults to true to avoid exceptions on missing translations. - * - * @return \Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult - */ - public function findLocations(LocationQuery $query, array $languageFilter = []) + public function findLocations(LocationQuery $query, array $languageFilter = []): SearchResult { $query = clone $query; $query->query = $query->query ?: new Criterion\MatchAll(); From 9d25f37c07873b049594ae8d75d6091852def0e5 Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Thu, 12 Dec 2024 11:26:00 +0100 Subject: [PATCH 7/8] [PHPStan] Improved type-hinting in Search Handler and ResultExtractor --- src/lib/Handler.php | 13 ++++++++----- src/lib/ResultExtractor.php | 5 ++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/lib/Handler.php b/src/lib/Handler.php index 772b7fc7..cc86a4f4 100644 --- a/src/lib/Handler.php +++ b/src/lib/Handler.php @@ -139,6 +139,7 @@ public function findContent(Query $query, array $languageFilter = []): SearchRes DocumentMapper::DOCUMENT_TYPE_IDENTIFIER_CONTENT ); + /** @phpstan-var \Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult<\Ibexa\Contracts\Core\Persistence\Content\ContentInfo> */ return $this->contentResultExtractor->extract( $this->gateway->findContent($query, $languageFilter), $query->facetBuilders, @@ -162,19 +163,20 @@ public function findSingle(Query\CriterionInterface $filter, array $languageFilt DocumentMapper::DOCUMENT_TYPE_IDENTIFIER_CONTENT ); + /** @phpstan-var \Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult<\Ibexa\Contracts\Core\Persistence\Content\ContentInfo> $result */ $result = $this->resultExtractor->extract( $this->gateway->findContent($query, $languageFilter) ); - if (!$result->totalCount) { + if (!$result->totalCount || empty($result->searchHits)) { throw new NotFoundException('Content', 'findSingle() found no content for the given $filter'); - } elseif ($result->totalCount > 1) { - throw new InvalidArgumentException('totalCount', 'findSingle() found more then one Content item for the given $filter'); } - $first = reset($result->searchHits); + if ($result->totalCount > 1) { + throw new InvalidArgumentException('totalCount', 'findSingle() found more then one Content item for the given $filter'); + } - return $first->valueObject; + return reset($result->searchHits)->valueObject; } public function findLocations(LocationQuery $query, array $languageFilter = []): SearchResult @@ -188,6 +190,7 @@ public function findLocations(LocationQuery $query, array $languageFilter = []): DocumentMapper::DOCUMENT_TYPE_IDENTIFIER_LOCATION ); + /** @phpstan-var \Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult<\Ibexa\Contracts\Core\Persistence\Content\Location> */ return $this->locationResultExtractor->extract( $this->gateway->findLocations($query, $languageFilter), $query->facetBuilders, diff --git a/src/lib/ResultExtractor.php b/src/lib/ResultExtractor.php index 45ad34c6..1f95e60f 100644 --- a/src/lib/ResultExtractor.php +++ b/src/lib/ResultExtractor.php @@ -50,7 +50,7 @@ public function __construct( * @param \Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation[] $aggregations * @param array $languageFilter * - * @return \Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult + * @return \Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult<\Ibexa\Contracts\Core\Repository\Values\ValueObject> */ public function extract( $data, @@ -184,6 +184,9 @@ protected function extractFacets(stdClass $data, array $facetBuilders, array $la return $facets; } + /** + * @phpstan-return \Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchHit<\Ibexa\Contracts\Core\Repository\Values\ValueObject> + */ protected function extractSearchHit(stdClass $doc, array $languageFilter): SearchHit { return new SearchHit( From 903bc7c6c0426f9dd16a2ae4b56ddfe2546d4b90 Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Tue, 12 Nov 2024 14:04:14 +0100 Subject: [PATCH 8/8] [PHPStan] Removed resolved issues from the baseline --- phpstan-baseline.neon | 155 ------------------------------------------ 1 file changed, 155 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 0fc44f74..2d911307 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -55,91 +55,6 @@ parameters: count: 1 path: src/bundle/DependencyInjection/Configuration.php - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:buildBoostFactorMap\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:buildBoostFactorMap\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:configureBoostMap\\(\\) has no return type specified\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:configureBoostMap\\(\\) has parameter \\$connectionParams with no value type specified in iterable type array\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:configureIndexingDepth\\(\\) has no return type specified\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:configureIndexingDepth\\(\\) has parameter \\$connectionParams with no value type specified in iterable type array\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:configureSearchServices\\(\\) has no return type specified\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:configureSearchServices\\(\\) has parameter \\$connectionParams with no value type specified in iterable type array\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:defineEndpoint\\(\\) has no return type specified\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:defineEndpoint\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:getConfiguration\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:load\\(\\) has no return type specified\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:load\\(\\) has parameter \\$configs with no value type specified in iterable type array\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:processConnectionConfiguration\\(\\) has no return type specified\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\DependencyInjection\\\\IbexaSolrExtension\\:\\:processConnectionConfiguration\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Parameter \\#1 \\$configuration of method Symfony\\\\Component\\\\DependencyInjection\\\\Extension\\\\Extension\\:\\:processConfiguration\\(\\) expects Symfony\\\\Component\\\\Config\\\\Definition\\\\ConfigurationInterface, Symfony\\\\Component\\\\Config\\\\Definition\\\\ConfigurationInterface\\|null given\\.$#" - count: 1 - path: src/bundle/DependencyInjection/IbexaSolrExtension.php - - - - message: "#^Method Ibexa\\\\Bundle\\\\Solr\\\\IbexaSolrBundle\\:\\:build\\(\\) has no return type specified\\.$#" - count: 1 - path: src/bundle/IbexaSolrBundle.php - - message: "#^Method Ibexa\\\\Contracts\\\\Solr\\\\Query\\\\CriterionVisitor\\:\\:escapeQuote\\(\\) should return string but returns string\\|null\\.$#" count: 1 @@ -180,61 +95,6 @@ parameters: count: 1 path: src/contracts/ResultExtractor/AggregationResultExtractor/TermAggregationKeyMapper.php - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\AggregateCriterionVisitorPass\\:\\:addHandlers\\(\\) has no return type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/AggregateCriterionVisitorPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\AggregateCriterionVisitorPass\\:\\:addHandlers\\(\\) has parameter \\$handlers with no type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/AggregateCriterionVisitorPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\AggregateCriterionVisitorPass\\:\\:process\\(\\) has no return type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/AggregateCriterionVisitorPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\AggregateFacetBuilderVisitorPass\\:\\:process\\(\\) has no return type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/AggregateFacetBuilderVisitorPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\AggregateFacetBuilderVisitorPass\\:\\:processVisitors\\(\\) has no return type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/AggregateFacetBuilderVisitorPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\AggregateFacetBuilderVisitorPass\\:\\:processVisitors\\(\\) has parameter \\$name with no type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/AggregateFacetBuilderVisitorPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\AggregateSortClauseVisitorPass\\:\\:addHandlers\\(\\) has no return type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/AggregateSortClauseVisitorPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\AggregateSortClauseVisitorPass\\:\\:addHandlers\\(\\) has parameter \\$handlers with no type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/AggregateSortClauseVisitorPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\AggregateSortClauseVisitorPass\\:\\:process\\(\\) has no return type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/AggregateSortClauseVisitorPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\BaseFieldMapperPass\\:\\:process\\(\\) has no return type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/BaseFieldMapperPass.php - - - - message: "#^Method Ibexa\\\\Solr\\\\Container\\\\Compiler\\\\EndpointRegistryPass\\:\\:process\\(\\) has no return type specified\\.$#" - count: 1 - path: src/lib/Container/Compiler/EndpointRegistryPass.php - - message: "#^Method Ibexa\\\\Solr\\\\CoreFilter\\:\\:apply\\(\\) has no return type specified\\.$#" count: 1 @@ -615,11 +475,6 @@ parameters: count: 2 path: src/lib/Handler.php - - - message: "#^Cannot access property \\$valueObject on Ibexa\\\\Contracts\\\\Core\\\\Repository\\\\Values\\\\Content\\\\Search\\\\SearchHit\\|false\\.$#" - count: 1 - path: src/lib/Handler.php - - message: "#^Method Ibexa\\\\Solr\\\\Handler\\:\\:bulkIndexContent\\(\\) has no return type specified\\.$#" count: 1 @@ -670,11 +525,6 @@ parameters: count: 1 path: src/lib/Handler.php - - - message: "#^Method Ibexa\\\\Solr\\\\Handler\\:\\:findSingle\\(\\) should return Ibexa\\\\Contracts\\\\Core\\\\Persistence\\\\Content but returns Ibexa\\\\Contracts\\\\Core\\\\Repository\\\\Values\\\\ValueObject\\.$#" - count: 1 - path: src/lib/Handler.php - - message: "#^Method Ibexa\\\\Solr\\\\Handler\\:\\:generateDocument\\(\\) should return Ibexa\\\\Contracts\\\\Core\\\\Search\\\\Document but returns array\\\\.$#" count: 1 @@ -720,11 +570,6 @@ parameters: count: 1 path: src/lib/Handler.php - - - message: "#^Return type \\(Ibexa\\\\Contracts\\\\Core\\\\Persistence\\\\Content\\) of method Ibexa\\\\Solr\\\\Handler\\:\\:findSingle\\(\\) should be compatible with return type \\(Ibexa\\\\Contracts\\\\Core\\\\Persistence\\\\Content\\\\ContentInfo\\) of method Ibexa\\\\Contracts\\\\Core\\\\Search\\\\Handler\\:\\:findSingle\\(\\)$#" - count: 2 - path: src/lib/Handler.php - - message: "#^Method Ibexa\\\\Solr\\\\Indexer\\:\\:purge\\(\\) has no return type specified\\.$#" count: 1