From 0589421bd93a49087f8a762fbfb2dcace05abe73 Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 3 Dec 2025 01:40:43 +0100 Subject: [PATCH 1/5] [DI] Dropped unknown NameSchema services (#686) For more details see https://github.com/ibexa/core/pull/686 Key changes: * [DI] Dropped unknown NameSchema services --- src/lib/Resources/settings/repository/inner/name_schema.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/lib/Resources/settings/repository/inner/name_schema.yaml b/src/lib/Resources/settings/repository/inner/name_schema.yaml index 35cb97d184..45f8fcad8e 100644 --- a/src/lib/Resources/settings/repository/inner/name_schema.yaml +++ b/src/lib/Resources/settings/repository/inner/name_schema.yaml @@ -16,9 +16,5 @@ services: arguments: $settings: '%ibexa.core.repository.name_schema.settings%' - Ibexa\Core\Repository\NameSchema\NameSchemaFilter: ~ - - Ibexa\Core\Repository\NameSchema\TokenHandler: ~ - Ibexa\Contracts\Core\Repository\NameSchema\NameSchemaServiceInterface: alias: 'Ibexa\Core\Repository\NameSchema\NameSchemaService' From 62b0741194c42712ce2139f5f47e3f0f575fa8ab Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Mon, 1 Dec 2025 12:50:23 +0100 Subject: [PATCH 2/5] [PHPDoc] Fixed site access system config reference after rebranding --- .../Configuration/FieldTypeParserInterface.php | 4 ++-- .../Configuration/Parser/AbstractFieldTypeParser.php | 2 +- .../Configuration/Parser/UserContentTypeIdentifier.php | 7 +------ .../DependencyInjection/Configuration/ParserInterface.php | 2 +- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/bundle/Core/DependencyInjection/Configuration/FieldTypeParserInterface.php b/src/bundle/Core/DependencyInjection/Configuration/FieldTypeParserInterface.php index 87d8eb13b6..443f47a22f 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/FieldTypeParserInterface.php +++ b/src/bundle/Core/DependencyInjection/Configuration/FieldTypeParserInterface.php @@ -13,7 +13,7 @@ interface FieldTypeParserInterface extends ParserInterface { /** * Returns the fieldType identifier the config parser works for. - * Required to create configuration node under system..fieldtypes. + * Required to create configuration node under system..fieldtypes. * * @return string */ @@ -22,7 +22,7 @@ public function getFieldTypeIdentifier(); /** * Adds fieldType semantic configuration definition. * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.system..fieldtypes. + * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ibexa.system..fieldtypes. */ public function addFieldTypeSemanticConfig(NodeBuilder $nodeBuilder); } diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php index ddaf1fc56c..fff0e05630 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php @@ -13,7 +13,7 @@ /** * Abstract parser class that field type parsers need to extend in order - * to receive NodeBuilder at Node just under ezpublish...fieldtypes.. + * to receive NodeBuilder at Node just under ibexa.system..fieldtypes.. */ abstract class AbstractFieldTypeParser extends AbstractParser implements FieldTypeParserInterface { diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php index c3a60c72b8..ba73231f60 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php @@ -21,17 +21,12 @@ * ```yaml * ibexa: * system: - * default: # configuration per siteaccess or siteaccess group + * default: # configuration per SiteAccess or SiteAccess group * user_content_type_identifier: ['user', 'my_custom_user_identifier'] * ``` */ final class UserContentTypeIdentifier extends AbstractParser { - /** - * Adds semantic configuration definition. - * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.system. - */ public function addSemanticConfig(NodeBuilder $nodeBuilder) { $nodeBuilder diff --git a/src/bundle/Core/DependencyInjection/Configuration/ParserInterface.php b/src/bundle/Core/DependencyInjection/Configuration/ParserInterface.php index 3a928ad096..9b97a9b6ad 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/ParserInterface.php +++ b/src/bundle/Core/DependencyInjection/Configuration/ParserInterface.php @@ -15,7 +15,7 @@ interface ParserInterface extends HookableConfigurationMapperInterface /** * Adds semantic configuration definition. * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.system. + * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ibexa.system. */ public function addSemanticConfig(NodeBuilder $nodeBuilder); } From 638d38b638d8b31c48d57f93e6df38619b93be7c Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Mon, 1 Dec 2025 12:52:22 +0100 Subject: [PATCH 3/5] [PHPDoc] Dropped redundant `ParserInterface::addSemanticConfig` doc blocks --- .../Configuration/Parser/AbstractFieldTypeParser.php | 5 ----- .../Core/DependencyInjection/Configuration/Parser/Common.php | 5 ----- .../DependencyInjection/Configuration/Parser/Content.php | 5 ----- .../Core/DependencyInjection/Configuration/Parser/Image.php | 5 ----- .../DependencyInjection/Configuration/Parser/Languages.php | 5 ----- .../DependencyInjection/Configuration/Parser/Templates.php | 5 ----- .../Core/DependencyInjection/Configuration/Parser/View.php | 5 ----- 7 files changed, 35 deletions(-) diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php index fff0e05630..f187e21735 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php @@ -17,11 +17,6 @@ */ abstract class AbstractFieldTypeParser extends AbstractParser implements FieldTypeParserInterface { - /** - * Adds semantic configuration definition. - * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.. - */ public function addSemanticConfig(NodeBuilder $nodeBuilder) { $fieldTypeNodeBuilder = $nodeBuilder->arrayNode($this->getFieldTypeIdentifier())->children(); diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php index 7b9dc8c35e..241eefddbb 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php @@ -16,11 +16,6 @@ */ class Common extends AbstractParser { - /** - * Adds semantic configuration definition. - * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ibexa.system. - */ public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Content.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Content.php index 629ec24275..b92cae2590 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Content.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Content.php @@ -16,11 +16,6 @@ */ class Content extends AbstractParser { - /** - * Adds semantic configuration definition. - * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.system. - */ public function addSemanticConfig(NodeBuilder $nodeBuilder) { $nodeBuilder diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php index f58a18bd94..c4be646cc9 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php @@ -16,11 +16,6 @@ */ class Image extends AbstractParser { - /** - * Adds semantic configuration definition. - * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.system. - */ public function addSemanticConfig(NodeBuilder $nodeBuilder) { $nodeBuilder diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php index c0779fea1f..b0870314a1 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php @@ -15,11 +15,6 @@ class Languages extends AbstractParser { private $siteAccessesByLanguages = []; - /** - * Adds semantic configuration definition. - * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.system. - */ public function addSemanticConfig(NodeBuilder $nodeBuilder) { $nodeBuilder diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php index b287780e67..c46d2085c8 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php @@ -13,11 +13,6 @@ class Templates extends AbstractParser { - /** - * Adds semantic configuration definition. - * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.system. - */ public function addSemanticConfig(NodeBuilder $nodeBuilder) { $nodeBuilder diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/View.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/View.php index 485c51ab0e..e46088f1d3 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/View.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/View.php @@ -13,11 +13,6 @@ class View extends AbstractParser { - /** - * Adds semantic configuration definition. - * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.system. - */ public function addSemanticConfig(NodeBuilder $nodeBuilder) { $nodeBuilder From c6385a6972d3a62de31bdb5f005d9a126408cf3e Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Tue, 2 Dec 2025 13:47:05 +0100 Subject: [PATCH 4/5] Defined TParent of Symfony semantic configuration builders --- .../DependencyInjection/Configuration.php | 93 ++++++++++--------- .../Configuration/AbstractParser.php | 24 ----- .../Configuration/ConfigParser.php | 15 ++- .../FieldTypeParserInterface.php | 2 +- .../Parser/AbstractFieldTypeParser.php | 2 +- .../Configuration/Parser/Common.php | 2 +- .../Configuration/Parser/Content.php | 2 +- .../Configuration/Parser/ContentView.php | 4 +- .../Parser/FieldType/ImageAsset.php | 3 - .../Configuration/Parser/IO.php | 4 +- .../Configuration/Parser/Image.php | 4 +- .../Configuration/Parser/Languages.php | 13 ++- .../Configuration/Parser/LocationView.php | 6 +- .../Configuration/Parser/Templates.php | 4 +- .../Parser/TwigVariablesParser.php | 2 +- .../Configuration/Parser/UrlChecker.php | 2 +- .../Parser/UserContentTypeIdentifier.php | 2 +- .../Configuration/Parser/View.php | 7 +- .../Configuration/ParserInterface.php | 6 +- .../RepositoryConfigParserInterface.php | 7 ++ .../SiteAccessAware/Configuration.php | 19 ++-- .../ConfigurationProcessor.php | 30 +++--- .../HookableConfigurationMapperInterface.php | 10 +- .../IbexaCoreExtension.php | 3 +- .../IO/DependencyInjection/Configuration.php | 17 +++- .../ConfigurationFactory.php | 5 +- .../Configuration/ConfigParserTest.php | 39 ++++++-- .../RepositoryConfigParserTest.php | 12 +++ .../ConfigurationProcessorTest.php | 13 --- .../ConfigurationFactoryTestCase.php | 4 + 30 files changed, 194 insertions(+), 162 deletions(-) diff --git a/src/bundle/Core/DependencyInjection/Configuration.php b/src/bundle/Core/DependencyInjection/Configuration.php index dc9da37b88..18f2c8823a 100644 --- a/src/bundle/Core/DependencyInjection/Configuration.php +++ b/src/bundle/Core/DependencyInjection/Configuration.php @@ -10,37 +10,29 @@ use Ibexa\Bundle\Core\DependencyInjection\Configuration\ParserInterface; use Ibexa\Bundle\Core\DependencyInjection\Configuration\RepositoryConfigParserInterface; use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\Configuration as SiteAccessConfiguration; -use Ibexa\Bundle\Core\DependencyInjection\Configuration\Suggestion\Collector\SuggestionCollectorInterface; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\Config\Definition\Builder\TreeBuilder; +/** + * @phpstan-import-type TRootNode from SiteAccessConfiguration + */ class Configuration extends SiteAccessConfiguration { - public const CUSTOM_TAG_ATTRIBUTE_TYPES = ['number', 'string', 'boolean', 'choice']; - - /** @var \Ibexa\Bundle\Core\DependencyInjection\Configuration\ParserInterface */ - private $mainSiteAccessConfigParser; - - /** @var \Ibexa\Bundle\Core\DependencyInjection\Configuration\RepositoryConfigParserInterface */ - private $mainRepositoryConfigParser; - - /** @var \Ibexa\Bundle\Core\DependencyInjection\Configuration\Suggestion\Collector\SuggestionCollectorInterface */ - private $suggestionCollector; + public const array CUSTOM_TAG_ATTRIBUTE_TYPES = ['number', 'string', 'boolean', 'choice']; /** @var \Ibexa\Bundle\Core\SiteAccess\SiteAccessConfigurationFilter[] */ - private $siteAccessConfigurationFilters; + private array $siteAccessConfigurationFilters; public function __construct( - ParserInterface $mainConfigParser, - RepositoryConfigParserInterface $mainRepositoryConfigParser, - SuggestionCollectorInterface $suggestionCollector + private readonly ParserInterface $mainSiteAccessConfigParser, + private readonly RepositoryConfigParserInterface $mainRepositoryConfigParser ) { - $this->mainSiteAccessConfigParser = $mainConfigParser; - $this->mainRepositoryConfigParser = $mainRepositoryConfigParser; - $this->suggestionCollector = $suggestionCollector; } - public function setSiteAccessConfigurationFilters(array $filters) + /** + * @param \Ibexa\Bundle\Core\SiteAccess\SiteAccessConfigurationFilter[] $filters + */ + public function setSiteAccessConfigurationFilters(array $filters): void { $this->siteAccessConfigurationFilters = $filters; } @@ -48,7 +40,7 @@ public function setSiteAccessConfigurationFilters(array $filters) /** * Generates the configuration tree builder. * - * @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder + * @phpstan-return \Symfony\Component\Config\Definition\Builder\TreeBuilder<'array'> The tree builder */ public function getConfigTreeBuilder(): TreeBuilder { @@ -57,7 +49,7 @@ public function getConfigTreeBuilder(): TreeBuilder $rootNode = $treeBuilder->getRootNode(); $this->addRepositoriesSection($rootNode); - $this->addSiteaccessSection($rootNode); + $this->addSiteAccessSection($rootNode); $this->addImageMagickSection($rootNode); $this->addHttpCacheSection($rootNode); $this->addRouterSection($rootNode); @@ -73,7 +65,10 @@ public function getConfigTreeBuilder(): TreeBuilder return $treeBuilder; } - public function addRepositoriesSection(ArrayNodeDefinition $rootNode) + /** + * @phpstan-param TRootNode $rootNode + */ + public function addRepositoriesSection(ArrayNodeDefinition $rootNode): void { $repositoriesNode = $rootNode ->children() @@ -153,7 +148,10 @@ static function ($v) { ); } - public function addSiteaccessSection(ArrayNodeDefinition $rootNode) + /** + * @phpstan-param TRootNode $rootNode + */ + public function addSiteAccessSection(ArrayNodeDefinition $rootNode): void { $rootNode ->children() @@ -253,7 +251,10 @@ static function ($v) { ->end(); } - private function addImageMagickSection(ArrayNodeDefinition $rootNode) + /** + * @phpstan-param TRootNode $rootNode + */ + private function addImageMagickSection(ArrayNodeDefinition $rootNode): void { $filtersInfo = <<end(); } - private function addHttpCacheSection(ArrayNodeDefinition $rootNode) + /** + * @phpstan-param TRootNode $rootNode + */ + private function addHttpCacheSection(ArrayNodeDefinition $rootNode): void { $purgeTypeInfo = <<end(); } - private function addRouterSection(ArrayNodeDefinition $rootNode) + /** + * @phpstan-param TRootNode $rootNode + */ + private function addRouterSection(ArrayNodeDefinition $rootNode): void { $nonSAAwareInfo = <<children() @@ -421,13 +428,11 @@ private function addImagePlaceholderSection(ArrayNodeDefinition $rootNode) * cleanup_method: name_of_cleanup_method * * - * @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode - * - * @return \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition + * @phpstan-param TRootNode $rootNode */ - private function addUrlAliasSection(ArrayNodeDefinition $rootNode) + private function addUrlAliasSection(ArrayNodeDefinition $rootNode): void { - return $rootNode + $rootNode ->children() ->arrayNode('url_alias') ->children() @@ -462,13 +467,11 @@ private function addUrlAliasSection(ArrayNodeDefinition $rootNode) * enabled: true * * - * @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode - * - * @return \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition + * @phpstan-param TRootNode $rootNode */ - private function addUrlWildcardsSection($rootNode): ArrayNodeDefinition + private function addUrlWildcardsSection(ArrayNodeDefinition $rootNode): void { - return $rootNode + $rootNode ->children() ->arrayNode('url_wildcards') ->children() @@ -497,13 +500,11 @@ private function addUrlWildcardsSection($rootNode): ArrayNodeDefinition * * * - * @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode - * - * @return \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition + * @phpstan-param TRootNode $rootNode */ - private function addOrmSection($rootNode): ArrayNodeDefinition + private function addOrmSection(ArrayNodeDefinition $rootNode): void { - return $rootNode + $rootNode ->children() ->arrayNode('orm') ->children() @@ -544,11 +545,11 @@ private function addOrmSection($rootNode): ArrayNodeDefinition * * * - * @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode + * @phpstan-param TRootNode $rootNode */ - private function addUITranslationsSection($rootNode): ArrayNodeDefinition + private function addUITranslationsSection(ArrayNodeDefinition $rootNode): void { - return $rootNode + $rootNode ->children() ->arrayNode('ui') ->children() diff --git a/src/bundle/Core/DependencyInjection/Configuration/AbstractParser.php b/src/bundle/Core/DependencyInjection/Configuration/AbstractParser.php index 18598b16a2..7ca713615d 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/AbstractParser.php +++ b/src/bundle/Core/DependencyInjection/Configuration/AbstractParser.php @@ -11,34 +11,10 @@ abstract class AbstractParser implements ParserInterface { - /** - * This method is called by the ConfigurationProcessor before looping over available scopes. - * You may here use $contextualizer->mapConfigArray(). - * - * @see ConfigurationProcessor::mapConfig() - * @see \Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface::mapConfigArray() - * - * @param array $config Complete parsed semantic configuration - * @param \Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface $contextualizer - * - * @return mixed - */ public function preMap(array $config, ContextualizerInterface $contextualizer) { } - /** - * This method is called by the ConfigurationProcessor after looping over available scopes. - * You may here use $contextualizer->mapConfigArray(). - * - * @see ConfigurationProcessor::mapConfig() - * @see \Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface::mapConfigArray() - * - * @param array $config Complete parsed semantic configuration - * @param \Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface $contextualizer - * - * @return mixed - */ public function postMap(array $config, ContextualizerInterface $contextualizer) { } diff --git a/src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php b/src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php index bc5661c4b6..b9c269b18b 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php +++ b/src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php @@ -18,8 +18,13 @@ class ConfigParser implements ParserInterface { /** @var \Ibexa\Bundle\Core\DependencyInjection\Configuration\ParserInterface[] */ - private $configParsers; + private array $configParsers; + /** + * @param \Ibexa\Bundle\Core\DependencyInjection\Configuration\ParserInterface[] $configParsers + * + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException + */ public function __construct(array $configParsers = []) { foreach ($configParsers as $parser) { @@ -38,7 +43,7 @@ public function __construct(array $configParsers = []) /** * @param \Ibexa\Bundle\Core\DependencyInjection\Configuration\ParserInterface[] $configParsers */ - public function setConfigParsers($configParsers) + public function setConfigParsers(array $configParsers): void { $this->configParsers = $configParsers; } @@ -58,21 +63,21 @@ public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerIn } } - public function preMap(array $config, ContextualizerInterface $contextualizer) + public function preMap(array $config, ContextualizerInterface $contextualizer): void { foreach ($this->configParsers as $parser) { $parser->preMap($config, $contextualizer); } } - public function postMap(array $config, ContextualizerInterface $contextualizer) + public function postMap(array $config, ContextualizerInterface $contextualizer): void { foreach ($this->configParsers as $parser) { $parser->postMap($config, $contextualizer); } } - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $fieldTypeNodeBuilder = $nodeBuilder ->arrayNode('fieldtypes') diff --git a/src/bundle/Core/DependencyInjection/Configuration/FieldTypeParserInterface.php b/src/bundle/Core/DependencyInjection/Configuration/FieldTypeParserInterface.php index 443f47a22f..b52a21ea85 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/FieldTypeParserInterface.php +++ b/src/bundle/Core/DependencyInjection/Configuration/FieldTypeParserInterface.php @@ -22,7 +22,7 @@ public function getFieldTypeIdentifier(); /** * Adds fieldType semantic configuration definition. * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ibexa.system..fieldtypes. + * @phpstan-param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ibexa.system..fieldtypes. */ public function addFieldTypeSemanticConfig(NodeBuilder $nodeBuilder); } diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php index f187e21735..fa27caa279 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php @@ -17,7 +17,7 @@ */ abstract class AbstractFieldTypeParser extends AbstractParser implements FieldTypeParserInterface { - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $fieldTypeNodeBuilder = $nodeBuilder->arrayNode($this->getFieldTypeIdentifier())->children(); diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php index 241eefddbb..40190e3694 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php @@ -102,7 +102,7 @@ public function addSemanticConfig(NodeBuilder $nodeBuilder): void ->end(); } - public function preMap(array $config, ContextualizerInterface $contextualizer) + public function preMap(array $config, ContextualizerInterface $contextualizer): void { $contextualizer->mapConfigArray('session', $config); } diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Content.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Content.php index b92cae2590..cee955d5db 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Content.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Content.php @@ -16,7 +16,7 @@ */ class Content extends AbstractParser { - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode('content') diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/ContentView.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/ContentView.php index d077b26383..a63fcf726d 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/ContentView.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/ContentView.php @@ -9,6 +9,6 @@ class ContentView extends View { - public const NODE_KEY = 'content_view'; - public const INFO = 'Template selection settings when displaying a content'; + public const string NODE_KEY = 'content_view'; + public const string INFO = 'Template selection settings when displaying a content'; } diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/FieldType/ImageAsset.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/FieldType/ImageAsset.php index b55119dc07..2d9a0a2116 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/FieldType/ImageAsset.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/FieldType/ImageAsset.php @@ -23,9 +23,6 @@ public function getFieldTypeIdentifier(): string return ImageAssetFieldType::FIELD_TYPE_IDENTIFIER; } - /** - * {@inheritdoc} - */ public function addFieldTypeSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php index 8c1c422b48..b77929b2f6 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php @@ -23,7 +23,7 @@ public function __construct(ComplexSettingParserInterface $complexSettingParser) $this->complexSettingParser = $complexSettingParser; } - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode('io') @@ -85,7 +85,7 @@ public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerIn /** * Post process configuration to add io_root_dir and io_prefix. */ - public function postMap(array $config, ContextualizerInterface $contextualizer) + public function postMap(array $config, ContextualizerInterface $contextualizer): void { $container = $contextualizer->getContainer(); diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php index c4be646cc9..082951c839 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php @@ -16,7 +16,7 @@ */ class Image extends AbstractParser { - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode('image_variations') @@ -100,7 +100,7 @@ static function ($v) { ->end(); } - public function preMap(array $config, ContextualizerInterface $contextualizer) + public function preMap(array $config, ContextualizerInterface $contextualizer): void { $contextualizer->mapConfigArray('image_variations', $config); $contextualizer->mapSetting('image_host', $config); diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php index b0870314a1..0eeccb1dfc 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php @@ -13,9 +13,10 @@ class Languages extends AbstractParser { - private $siteAccessesByLanguages = []; + /** @var array */ + private array $siteAccessesByLanguages = []; - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode('languages') @@ -31,14 +32,16 @@ public function addSemanticConfig(NodeBuilder $nodeBuilder) ->end(); } - public function preMap(array $config, ContextualizerInterface $contextualizer) + public function preMap(array $config, ContextualizerInterface $contextualizer): void { $contextualizer->mapConfigArray('languages', $config, ContextualizerInterface::UNIQUE); $contextualizer->mapConfigArray('translation_siteaccesses', $config, ContextualizerInterface::UNIQUE); $container = $contextualizer->getContainer(); if ($container->hasParameter('ibexa.site_access.by_language')) { - $this->siteAccessesByLanguages = $container->getParameter('ibexa.site_access.by_language'); + /** @var array $siteAccessesByLanguage */ + $siteAccessesByLanguage = $container->getParameter('ibexa.site_access.by_language'); + $this->siteAccessesByLanguages = $siteAccessesByLanguage; } } @@ -54,7 +57,7 @@ public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerIn } } - public function postMap(array $config, ContextualizerInterface $contextualizer) + public function postMap(array $config, ContextualizerInterface $contextualizer): void { $contextualizer->getContainer()->setParameter( 'ibexa.site_access.by_language', diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/LocationView.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/LocationView.php index b7b13c07a8..aee74581aa 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/LocationView.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/LocationView.php @@ -12,10 +12,10 @@ class LocationView extends View { - public const NODE_KEY = 'location_view'; - public const INFO = 'Template selection settings when displaying a location. Deprecated from 5.4.5/2015.09, use content_view instead.'; + public const string NODE_KEY = 'location_view'; + public const string INFO = 'Template selection settings when displaying a location. Deprecated from 5.4.5/2015.09, use content_view instead.'; - public function preMap(array $config, ContextualizerInterface $contextualizer) + public function preMap(array $config, ContextualizerInterface $contextualizer): void { $scopes = array_merge( [ConfigResolver::SCOPE_GLOBAL], diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php index c46d2085c8..f853f2fc2d 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php @@ -13,7 +13,7 @@ class Templates extends AbstractParser { - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode(static::NODE_KEY) @@ -32,7 +32,7 @@ public function addSemanticConfig(NodeBuilder $nodeBuilder) ->end(); } - public function preMap(array $config, ContextualizerInterface $contextualizer) + public function preMap(array $config, ContextualizerInterface $contextualizer): void { foreach ($config['siteaccess']['groups'] as $group => $saArray) { if (!empty($config[$contextualizer->getSiteAccessNodeName()][$group][static::NODE_KEY])) { diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/TwigVariablesParser.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/TwigVariablesParser.php index 17109a37e0..def330a33d 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/TwigVariablesParser.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/TwigVariablesParser.php @@ -14,7 +14,7 @@ final class TwigVariablesParser extends AbstractParser { - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode('twig_variables') diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/UrlChecker.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/UrlChecker.php index 52432524a4..ba165f3275 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/UrlChecker.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/UrlChecker.php @@ -13,7 +13,7 @@ class UrlChecker extends AbstractParser { - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode('url_checker') diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php index ba73231f60..b0fd2123e1 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php @@ -27,7 +27,7 @@ */ final class UserContentTypeIdentifier extends AbstractParser { - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode('user_content_type_identifier') diff --git a/src/bundle/Core/DependencyInjection/Configuration/Parser/View.php b/src/bundle/Core/DependencyInjection/Configuration/Parser/View.php index e46088f1d3..027de667a7 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/Parser/View.php +++ b/src/bundle/Core/DependencyInjection/Configuration/Parser/View.php @@ -13,7 +13,10 @@ class View extends AbstractParser { - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public const string NODE_KEY = 'view'; + public const string INFO = 'View selection settings'; + + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode(static::NODE_KEY) @@ -64,7 +67,7 @@ public function addSemanticConfig(NodeBuilder $nodeBuilder) ->end(); } - public function preMap(array $config, ContextualizerInterface $contextualizer) + public function preMap(array $config, ContextualizerInterface $contextualizer): void { $contextualizer->mapConfigArray(static::NODE_KEY, $config, ContextualizerInterface::MERGE_FROM_SECOND_LEVEL); } diff --git a/src/bundle/Core/DependencyInjection/Configuration/ParserInterface.php b/src/bundle/Core/DependencyInjection/Configuration/ParserInterface.php index 9b97a9b6ad..2f5557d531 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/ParserInterface.php +++ b/src/bundle/Core/DependencyInjection/Configuration/ParserInterface.php @@ -7,15 +7,19 @@ namespace Ibexa\Bundle\Core\DependencyInjection\Configuration; +use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\Configuration as SiteAccessConfiguration; use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\HookableConfigurationMapperInterface; use Symfony\Component\Config\Definition\Builder\NodeBuilder; +/** + * @phpstan-import-type TRootNode from SiteAccessConfiguration + */ interface ParserInterface extends HookableConfigurationMapperInterface { /** * Adds semantic configuration definition. * - * @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ibexa.system. + * @phpstan-param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ibexa.system. */ public function addSemanticConfig(NodeBuilder $nodeBuilder); } diff --git a/src/bundle/Core/DependencyInjection/Configuration/RepositoryConfigParserInterface.php b/src/bundle/Core/DependencyInjection/Configuration/RepositoryConfigParserInterface.php index 5ae512d4b9..d3a9d469ff 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/RepositoryConfigParserInterface.php +++ b/src/bundle/Core/DependencyInjection/Configuration/RepositoryConfigParserInterface.php @@ -8,9 +8,16 @@ namespace Ibexa\Bundle\Core\DependencyInjection\Configuration; +use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\Configuration as SiteAccessConfiguration; use Symfony\Component\Config\Definition\Builder\NodeBuilder; +/** + * @phpstan-import-type TRootNode from SiteAccessConfiguration + */ interface RepositoryConfigParserInterface { + /** + * @phpstan-param NodeBuilder $nodeBuilder + */ public function addSemanticConfig(NodeBuilder $nodeBuilder): void; } diff --git a/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/Configuration.php b/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/Configuration.php index eb7aeaeaa3..075a546254 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/Configuration.php +++ b/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/Configuration.php @@ -8,6 +8,8 @@ namespace Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; +use Symfony\Component\Config\Definition\Builder\NodeBuilder; +use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; /** @@ -17,7 +19,7 @@ * Example of scope (aka SiteAccesses) usage, "system" being the node under which scope based configuration take place. * Key is the context name. * - * + * ``` * ibexa: * system: * eng: @@ -28,21 +30,22 @@ * languages: * - fre-FR * - eng-GB - * + * ``` + * + * @phpstan-type TRootNode ArrayNodeDefinition> */ abstract class Configuration implements ConfigurationInterface { /** * Generates the context node under which context based configuration will be defined. * - * @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode Node under which the generated node will be placed. - * @param string $scopeNodeName + * @phpstan-param TRootNode $rootNode Node under which the generated node will be placed. * - * @return \Symfony\Component\Config\Definition\Builder\NodeBuilder + * @phpstan-return NodeBuilder */ - public function generateScopeBaseNode(ArrayNodeDefinition $rootNode, $scopeNodeName = 'system') + public function generateScopeBaseNode(ArrayNodeDefinition $rootNode, string $scopeNodeName = 'system'): NodeBuilder { - $contextNode = $rootNode + return $rootNode ->children() ->arrayNode($scopeNodeName) ->info('System configuration. First key is always a siteaccess or siteaccess group name') @@ -62,7 +65,5 @@ public function generateScopeBaseNode(ArrayNodeDefinition $rootNode, $scopeNodeN ->normalizeKeys(false) ->prototype('array') ->children(); - - return $contextNode; } } diff --git a/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessor.php b/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessor.php index f08c94117f..bd24aa3aa6 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessor.php +++ b/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessor.php @@ -7,13 +7,14 @@ namespace Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware; -use InvalidArgumentException; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Processor for SiteAccess aware configuration processing. * Use it when you want to map SiteAccess dependent semantic configuration to internal settings, readable * with the ConfigResolver. + * + * @phpstan-type TCallableConfigurationMapper callable(array, string, ContextualizerInterface): void */ class ConfigurationProcessor { @@ -91,24 +92,27 @@ public static function setAvailableSiteAccessGroups(array $availableSiteAccessGr /** * Triggers mapping process between semantic and internal configuration. * - * @param array $config Parsed semantic configuration - * @param ConfigurationMapperInterface|callable $mapper Mapper to use. Can be either an instance of ConfigurationMapper or a callable. - * HookableConfigurationMapper can also be used. In this case, preMap() - * and postMap() will be also called respectively before and after the mapping loop. + * @param array $config Parsed semantic configuration * - * If $mapper is a callable, the same arguments as defined in the signature - * defined in ConfigurationMapper interface will be passed: - * `array $scopeSettings, $currentScope, ContextualizerInterface $contextualizer` + * @phpstan-param ConfigurationMapperInterface|TCallableConfigurationMapper $mapper + * Mapper to use. Can be either an instance of ConfigurationMapper or a callable. HookableConfigurationMapper + * can also be used. In this case, preMap() and postMap() will be also called respectively before and after + * the mapping loop. + * If $mapper is a callable, the same arguments as defined in the signature defined in ConfigurationMapper + * interface will be passed: + * ``` + * array $scopeSettings, + * string $currentScope, + * ContextualizerInterface $contextualizer + * ``` + * + * @see \Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\HookableConfigurationMapperInterface * * @throws \InvalidArgumentException */ - public function mapConfig(array $config, $mapper) + public function mapConfig(array $config, callable|ConfigurationMapperInterface $mapper): void { $mapperCallable = is_callable($mapper); - if (!$mapperCallable && !$mapper instanceof ConfigurationMapperInterface) { - throw new InvalidArgumentException('Configuration mapper must either be a callable or an instance of ConfigurationMapper.'); - } - if ($mapper instanceof HookableConfigurationMapperInterface) { $mapper->preMap($config, $this->contextualizer); } diff --git a/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/HookableConfigurationMapperInterface.php b/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/HookableConfigurationMapperInterface.php index fe5874612b..f4e35a70cb 100644 --- a/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/HookableConfigurationMapperInterface.php +++ b/src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/HookableConfigurationMapperInterface.php @@ -20,10 +20,7 @@ interface HookableConfigurationMapperInterface extends ConfigurationMapperInterf * @see ConfigurationProcessor::mapConfig() * @see ContextualizerInterface::mapConfigArray() * - * @param array $config Complete parsed semantic configuration - * @param ContextualizerInterface $contextualizer - * - * @return mixed + * @param array $config Complete parsed semantic configuration */ public function preMap(array $config, ContextualizerInterface $contextualizer); @@ -34,10 +31,7 @@ public function preMap(array $config, ContextualizerInterface $contextualizer); * @see ConfigurationProcessor::mapConfig() * @see ContextualizerInterface::mapConfigArray() * - * @param array $config Complete parsed semantic configuration - * @param ContextualizerInterface $contextualizer - * - * @return mixed + * @param array $config Complete parsed semantic configuration */ public function postMap(array $config, ContextualizerInterface $contextualizer); } diff --git a/src/bundle/Core/DependencyInjection/IbexaCoreExtension.php b/src/bundle/Core/DependencyInjection/IbexaCoreExtension.php index 854d1d057d..bef09cc94d 100644 --- a/src/bundle/Core/DependencyInjection/IbexaCoreExtension.php +++ b/src/bundle/Core/DependencyInjection/IbexaCoreExtension.php @@ -175,8 +175,7 @@ public function getConfiguration(array $config, ContainerBuilder $container): Co { $configuration = new Configuration( $this->getMainConfigParser(), - $this->getMainRepositoryConfigParser(), - $this->suggestionCollector + $this->getMainRepositoryConfigParser() ); $configuration->setSiteAccessConfigurationFilters($this->siteaccessConfigurationFilters); diff --git a/src/bundle/IO/DependencyInjection/Configuration.php b/src/bundle/IO/DependencyInjection/Configuration.php index 9251829e66..d64d399a92 100644 --- a/src/bundle/IO/DependencyInjection/Configuration.php +++ b/src/bundle/IO/DependencyInjection/Configuration.php @@ -9,7 +9,8 @@ namespace Ibexa\Bundle\IO\DependencyInjection; use ArrayObject; -use Symfony\Component\Config\Definition\Builder\NodeDefinition; +use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\Configuration as SiteAccessConfiguration; +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; use Symfony\Component\DependencyInjection\Exception\LogicException; @@ -18,6 +19,8 @@ * @internal * * @phpstan-type THandlerConfigurationFactoryList \ArrayObject + * + * @phpstan-import-type TRootNode from SiteAccessConfiguration */ class Configuration implements ConfigurationInterface { @@ -43,6 +46,9 @@ public function setBinarydataHandlerFactories(ArrayObject $factories): void $this->binarydataHandlerFactories = $factories; } + /** + * @phpstan-return TreeBuilder<'array'> + */ public function getConfigTreeBuilder(): TreeBuilder { if (!isset($this->binarydataHandlerFactories, $this->metadataHandlerFactories)) { @@ -72,10 +78,15 @@ public function getConfigTreeBuilder(): TreeBuilder } /** + * @phpstan-param TRootNode $node * @phpstan-param THandlerConfigurationFactoryList $factories */ - private function addHandlersSection(NodeDefinition $node, string $name, string $info, ArrayObject $factories): void - { + private function addHandlersSection( + ArrayNodeDefinition $node, + string $name, + string $info, + ArrayObject $factories + ): void { $handlersNodeBuilder = $node ->children() ->arrayNode($name) diff --git a/src/bundle/IO/DependencyInjection/ConfigurationFactory.php b/src/bundle/IO/DependencyInjection/ConfigurationFactory.php index 89e432f9ff..53dea97e3e 100644 --- a/src/bundle/IO/DependencyInjection/ConfigurationFactory.php +++ b/src/bundle/IO/DependencyInjection/ConfigurationFactory.php @@ -7,6 +7,7 @@ namespace Ibexa\Bundle\IO\DependencyInjection; +use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\Configuration as SiteAccessConfiguration; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition as ServiceDefinition; @@ -18,6 +19,8 @@ * - register an io handler * - add custom semantic configuration below ez_io.xxx_handler.. * - customize the custom handler services, and initialize extra services definitions + * + * @phpstan-import-type TRootNode from SiteAccessConfiguration */ interface ConfigurationFactory { @@ -33,7 +36,7 @@ interface ConfigurationFactory * ->end(); * ``` * - * @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $node The handler's configuration node. + * @phpstan-param TRootNode $node The handler's configuration node. */ public function addConfiguration(ArrayNodeDefinition $node): void; diff --git a/tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php b/tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php index ea0d2ec768..0838525084 100644 --- a/tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php +++ b/tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php @@ -9,19 +9,28 @@ use Ibexa\Bundle\Core\DependencyInjection\Configuration\ConfigParser; use Ibexa\Bundle\Core\DependencyInjection\Configuration\ParserInterface; +use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\Configuration as SiteAccessConfiguration; use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface; use Ibexa\Core\Base\Exceptions\InvalidArgumentType; +use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use stdClass; use Symfony\Component\Config\Definition\Builder\NodeBuilder; -class ConfigParserTest extends TestCase +/** + * @phpstan-import-type TRootNode from SiteAccessConfiguration + */ +final class ConfigParserTest extends TestCase { - public function testConstructWrongInnerParser() + /** + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException + */ + public function testConstructWrongInnerParser(): void { $this->expectException(InvalidArgumentType::class); new ConfigParser( + /** @phpstan-ignore argument.type */ [ $this->getConfigurationParserMock(), new stdClass(), @@ -29,7 +38,10 @@ public function testConstructWrongInnerParser() ); } - public function testConstruct() + /** + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException + */ + public function testConstruct(): void { $innerParsers = [ $this->getConfigurationParserMock(), @@ -40,7 +52,7 @@ public function testConstruct() self::assertSame($innerParsers, $configParser->getConfigParsers()); } - public function testGetSetInnerParsers() + public function testGetSetInnerParsers(): void { $configParser = new ConfigParser(); self::assertSame([], $configParser->getConfigParsers()); @@ -54,7 +66,10 @@ public function testGetSetInnerParsers() self::assertSame($innerParsers, $configParser->getConfigParsers()); } - public function testMapConfig() + /** + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException + */ + public function testMapConfig(): void { $parsers = [ $this->getConfigurationParserMock(), @@ -80,7 +95,10 @@ public function testMapConfig() $configParser->mapConfig($scopeSettings, $currentScope, $contextualizer); } - public function testPrePostMap() + /** + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException + */ + public function testPrePostMap(): void { $parsers = [ $this->getConfigurationParserMock(), @@ -110,7 +128,10 @@ public function testPrePostMap() $configParser->postMap($config, $contextualizer); } - public function testAddSemanticConfig() + /** + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException + */ + public function testAddSemanticConfig(): void { $parsers = [ $this->getConfigurationParserMock(), @@ -118,10 +139,10 @@ public function testAddSemanticConfig() ]; $configParser = new ConfigParser($parsers); + /** @phpstan-var NodeBuilder $nodeBuilder */ $nodeBuilder = new NodeBuilder(); foreach ($parsers as $parser) { - /* @var \PHPUnit\Framework\MockObject\MockObject $parser */ $parser ->expects(self::once()) ->method('addSemanticConfig') @@ -131,7 +152,7 @@ public function testAddSemanticConfig() $configParser->addSemanticConfig($nodeBuilder); } - protected function getConfigurationParserMock() + protected function getConfigurationParserMock(): ParserInterface & MockObject { return $this->createMock(ParserInterface::class); } diff --git a/tests/bundle/Core/DependencyInjection/Configuration/RepositoryConfigParserTest.php b/tests/bundle/Core/DependencyInjection/Configuration/RepositoryConfigParserTest.php index adbc0e02be..fdfb5d5ca2 100644 --- a/tests/bundle/Core/DependencyInjection/Configuration/RepositoryConfigParserTest.php +++ b/tests/bundle/Core/DependencyInjection/Configuration/RepositoryConfigParserTest.php @@ -10,13 +10,22 @@ use Ibexa\Bundle\Core\DependencyInjection\Configuration\RepositoryConfigParser; use Ibexa\Bundle\Core\DependencyInjection\Configuration\RepositoryConfigParserInterface; +use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\Configuration as SiteAccessConfiguration; +use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Config\Definition\Builder\NodeBuilder; +/** + * @phpstan-import-type TRootNode from SiteAccessConfiguration + */ final class RepositoryConfigParserTest extends TestCase { + /** + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException + */ public function testAddSemanticConfig(): void { + /** @phpstan-var NodeBuilder & MockObject $nodeBuilder */ $nodeBuilder = $this->createMock(NodeBuilder::class); $repositoryConfigParser = new RepositoryConfigParser([ @@ -28,6 +37,9 @@ public function testAddSemanticConfig(): void $repositoryConfigParser->addSemanticConfig($nodeBuilder); } + /** + * @phpstan-param NodeBuilder $nodeBuilder + */ private function createRepositoryConfigParserMock( NodeBuilder $nodeBuilder ): RepositoryConfigParserInterface { diff --git a/tests/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessorTest.php b/tests/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessorTest.php index 16470bc09b..ec7b4af269 100644 --- a/tests/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessorTest.php +++ b/tests/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessorTest.php @@ -12,7 +12,6 @@ use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface; use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\HookableConfigurationMapperInterface; use PHPUnit\Framework\TestCase; -use stdClass; use Symfony\Component\DependencyInjection\ContainerInterface; class ConfigurationProcessorTest extends TestCase @@ -60,18 +59,6 @@ public function testGetSetContextualizer() self::assertSame($newContextualizer, $processor->getContextualizer()); } - public function testMapConfigWrongMapper() - { - $this->expectException(\InvalidArgumentException::class); - - $namespace = 'ibexa_test'; - $siteAccessNodeName = 'foo'; - $container = $this->getContainerMock(); - $processor = new ConfigurationProcessor($container, $namespace, $siteAccessNodeName); - - $processor->mapConfig([], new stdClass()); - } - public function testMapConfigClosure() { $namespace = 'ibexa_test'; diff --git a/tests/bundle/IO/DependencyInjection/ConfigurationFactoryTestCase.php b/tests/bundle/IO/DependencyInjection/ConfigurationFactoryTestCase.php index 8344754380..c86858cbd3 100644 --- a/tests/bundle/IO/DependencyInjection/ConfigurationFactoryTestCase.php +++ b/tests/bundle/IO/DependencyInjection/ConfigurationFactoryTestCase.php @@ -8,6 +8,7 @@ namespace Ibexa\Tests\Bundle\IO\DependencyInjection; +use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\Configuration as SiteAccessConfiguration; use Ibexa\Bundle\IO\DependencyInjection\ConfigurationFactory; use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractContainerBuilderTestCase; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; @@ -17,6 +18,8 @@ * Abstract class for testing ConfigurationFactory implementations. * * The part about the container can rely on the matthiasnoback/SymfonyDependencyInjectionTest assertContainer* methods. + * + * @phpstan-import-type TRootNode from SiteAccessConfiguration */ abstract class ConfigurationFactoryTestCase extends AbstractContainerBuilderTestCase { @@ -39,6 +42,7 @@ public function testGetParentServiceId(): void public function testAddConfiguration(): void { + /** @phpstan-var TRootNode $node */ $node = new ArrayNodeDefinition('handler'); $this->factory->addConfiguration($node); self::assertNotEmpty($node->getChildNodeDefinitions()); From 315ebae997bd3ab7519ad28cec1253b2add9cbd4 Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Tue, 2 Dec 2025 13:47:44 +0100 Subject: [PATCH 5/5] [PHPStan] Aligned baseline with Symfony config TParent alignment --- phpstan-baseline.neon | 302 +----------------------------------------- 1 file changed, 7 insertions(+), 295 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 6aff62b7aa..5bc082fb71 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -391,74 +391,14 @@ parameters: path: src/bundle/Core/DependencyInjection/Compiler/TranslationCollectorPass.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:addHttpCacheSection\(\) has no return type specified\.$#' + message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\AbstractParser\:\:postMap\(\) has no return type specified\.$#' identifier: missingType.return count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:addImageMagickSection\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:addImagePlaceholderSection\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:addRepositoriesSection\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:addRouterSection\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:addSiteaccessSection\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:setSiteAccessConfigurationFilters\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:setSiteAccessConfigurationFilters\(\) has parameter \$filters with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Property Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:\$siteAccessConfigurationFilters \(array\\) in isset\(\) is not nullable\.$#' - identifier: isset.property - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Property Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\:\:\$suggestionCollector is never read, only written\.$#' - identifier: property.onlyWritten - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\AbstractParser\:\:postMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 path: src/bundle/Core/DependencyInjection/Configuration/AbstractParser.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\AbstractParser\:\:preMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue + message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\AbstractParser\:\:preMap\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: src/bundle/Core/DependencyInjection/Configuration/AbstractParser.php @@ -546,18 +486,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/ConfigBuilderInterface.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParser\:\:__construct\(\) has parameter \$configParsers with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParser\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParser\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -570,24 +498,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParser\:\:postMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParser\:\:preMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParser\:\:setConfigParsers\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/ConfigParser.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigResolver\:\:__construct\(\) has parameter \$groupsBySiteAccess with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -726,12 +636,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/FieldTypeParserInterface.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\AbstractFieldTypeParser\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/AbstractFieldTypeParser.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Common\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -744,18 +648,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Common\:\:preMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Common.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Content\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Content.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Content\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -792,12 +684,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\IO\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\IO\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -810,12 +696,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\IO\:\:postMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php - - message: '#^Parameter \#1 \$string of method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\ComplexSettings\\ComplexSettingParserInterface\:\:containsDynamicSettings\(\) expects string, array\|bool\|float\|int\|string\|null given\.$#' identifier: argument.type @@ -834,12 +714,6 @@ parameters: count: 3 path: src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Image\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Image\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -852,18 +726,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Image\:\:preMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Languages\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Languages\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -876,36 +738,12 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Languages\:\:postMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Languages\:\:preMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php - - message: '#^Parameter \#1 \$array of function array_shift expects array, array\|bool\|float\|int\|string\|null given\.$#' identifier: argument.type count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php - - - message: '#^Property Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Languages\:\:\$siteAccessesByLanguages has no type specified\.$#' - identifier: missingType.property - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Languages.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\LocationView\:\:preMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/LocationView.php - - message: '#^Access to undefined constant static\(Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Templates\)\:\:INFO\.$#' identifier: classConstant.notFound @@ -924,12 +762,6 @@ parameters: count: 5 path: src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Templates\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Templates\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -942,18 +774,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Templates\:\:preMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/Templates.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\TwigVariablesParser\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/TwigVariablesParser.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\TwigVariablesParser\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -966,12 +786,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/TwigVariablesParser.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\UrlChecker\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/UrlChecker.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\UrlChecker\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -984,36 +798,12 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/UrlChecker.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\UserContentTypeIdentifier\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\UserContentTypeIdentifier\:\:mapConfig\(\) has parameter \$scopeSettings with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/UserContentTypeIdentifier.php - - - message: '#^Access to undefined constant static\(Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\View\)\:\:INFO\.$#' - identifier: classConstant.notFound - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/View.php - - - - message: '#^Access to undefined constant static\(Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\View\)\:\:NODE_KEY\.$#' - identifier: classConstant.notFound - count: 2 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/View.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\View\:\:addSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/View.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\View\:\:mapConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -1026,12 +816,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/Parser/View.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\View\:\:preMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/Parser/View.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\ParserInterface\:\:addSemanticConfig\(\) has no return type specified\.$#' identifier: missingType.return @@ -1062,18 +846,6 @@ parameters: count: 1 path: src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessor.php - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\ConfigurationProcessor\:\:mapConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessor.php - - - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\ConfigurationProcessor\:\:mapConfig\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessor.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\ConfigurationProcessor\:\:mapConfigArray\(\) has no return type specified\.$#' identifier: missingType.return @@ -1453,14 +1225,14 @@ parameters: path: src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/DynamicSettingParserInterface.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\HookableConfigurationMapperInterface\:\:postMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue + message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\HookableConfigurationMapperInterface\:\:postMap\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/HookableConfigurationMapperInterface.php - - message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\HookableConfigurationMapperInterface\:\:preMap\(\) has parameter \$config with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue + message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\HookableConfigurationMapperInterface\:\:preMap\(\) has no return type specified\.$#' + identifier: missingType.return count: 1 path: src/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/HookableConfigurationMapperInterface.php @@ -4038,12 +3810,6 @@ parameters: count: 1 path: src/bundle/IO/BinaryStreamResponse.php - - - message: '#^Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition\:\:children\(\)\.$#' - identifier: method.notFound - count: 1 - path: src/bundle/IO/DependencyInjection/Configuration.php - - message: '#^Parameter \#3 \$length of function substr expects int\|null, int\<0, max\>\|false given\.$#' identifier: argument.type @@ -20694,48 +20460,6 @@ parameters: count: 1 path: tests/bundle/Core/DependencyInjection/Configuration/ComplexSettings/ComplexSettingValueResolverTest.php - - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParserTest\:\:getConfigurationParserMock\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php - - - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParserTest\:\:testAddSemanticConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php - - - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParserTest\:\:testConstruct\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php - - - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParserTest\:\:testConstructWrongInnerParser\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php - - - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParserTest\:\:testGetSetInnerParsers\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php - - - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParserTest\:\:testMapConfig\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php - - - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigParserTest\:\:testPrePostMap\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: tests/bundle/Core/DependencyInjection/Configuration/ConfigParserTest.php - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\ConfigResolver\\ChainConfigResolverTest\:\:hasParameterProvider\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -21204,24 +20928,12 @@ parameters: count: 1 path: tests/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessorTest.php - - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\ConfigurationProcessorTest\:\:testMapConfigWrongMapper\(\) has no return type specified\.$#' - identifier: missingType.return - count: 1 - path: tests/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessorTest.php - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\ConfigurationProcessorTest\:\:testMapSetting\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: tests/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessorTest.php - - - message: '#^Parameter \#2 \$mapper of method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\ConfigurationProcessor\:\:mapConfig\(\) expects \(callable\(\)\: mixed\)\|Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\ConfigurationMapperInterface, stdClass given\.$#' - identifier: argument.type - count: 1 - path: tests/bundle/Core/DependencyInjection/Configuration/SiteAccessAware/ConfigurationProcessorTest.php - - message: '#^Method Ibexa\\Tests\\Bundle\\Core\\DependencyInjection\\Configuration\\SiteAccessAware\\ContextualizerTest\:\:fullMapConfigArrayProvider\(\) has no return type specified\.$#' identifier: missingType.return