From 9b5c564a8e808ddd1ff13585490bc982cdd5a020 Mon Sep 17 00:00:00 2001 From: Arend Hummeling Date: Fri, 11 Feb 2022 14:23:17 +0100 Subject: [PATCH] fix sorting bug Fixed incorrect assumption that the minimum priority is zero leading to an unsorted list of negative priorities. --- .../Console/Descriptor/Descriptor.php | 2 +- .../Console/Descriptor/ObjectsProvider.php | 8 ++++++++ .../Descriptor/builder_priority_tag.json | 19 +++++++++++++++++++ .../Descriptor/builder_priority_tag.md | 14 ++++++++++++++ .../Descriptor/builder_priority_tag.txt | 1 + .../Descriptor/builder_priority_tag.xml | 7 +++++++ 6 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php index ed8a9118b4309..ab77fbf23b0c0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php @@ -261,7 +261,7 @@ protected function sortTaggedServicesByPriority(array $services): array { $maxPriority = []; foreach ($services as $service => $tags) { - $maxPriority[$service] = 0; + $maxPriority[$service] = \PHP_INT_MIN; foreach ($tags as $tag) { $currentPriority = $tag['priority'] ?? 0; if ($maxPriority[$service] < $currentPriority) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Console/Descriptor/ObjectsProvider.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Console/Descriptor/ObjectsProvider.php index e44fcf6395164..05031fa7fcfb6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Console/Descriptor/ObjectsProvider.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Console/Descriptor/ObjectsProvider.php @@ -171,6 +171,7 @@ public static function getContainerDefinitionsWithPriorityTags() $definition1 = new Definition('Full\\Qualified\\Class1'); $definition2 = new Definition('Full\\Qualified\\Class2'); $definition3 = new Definition('Full\\Qualified\\Class3'); + $definition4 = new Definition('Full\\Qualified\\Class4'); return [ 'definition_1' => $definition1 @@ -199,6 +200,13 @@ public static function getContainerDefinitionsWithPriorityTags() ->setAbstract(false) ->addTag('tag1', ['attr1' => 'val1', 'attr2' => 'val2', 'priority' => 0]) ->addTag('tag1', ['attr3' => 'val3', 'priority' => 40]), + 'definition_4' => $definition4 + ->setPublic(true) + ->setSynthetic(true) + ->setFile('/path/to/file') + ->setLazy(false) + ->setAbstract(false) + ->addTag('tag1', ['priority' => 0]), ]; } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.json b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.json index fe47af88b8d2d..a9d9697847fdb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.json +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.json @@ -63,6 +63,25 @@ } ] }, + "definition_4": { + "class": "Full\\Qualified\\Class4", + "public": true, + "synthetic": true, + "lazy": false, + "shared": true, + "abstract": false, + "autowire": false, + "autoconfigure": false, + "file": "\/path\/to\/file", + "tags": [ + { + "name": "tag1", + "parameters": { + "priority": 0 + } + } + ] + }, "definition_2": { "class": "Full\\Qualified\\Class2", "public": true, diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.md b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.md index 4ed3e82f0297b..8c0fef6aa3bea 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.md +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.md @@ -44,6 +44,20 @@ Definitions - Attr2: val2 - Tag: `tag2` +### definition_4 + +- Class: `Full\Qualified\Class4` +- Public: yes +- Synthetic: yes +- Lazy: no +- Shared: yes +- Abstract: no +- Autowired: no +- Autoconfigured: no +- File: `/path/to/file` +- Tag: `tag1` + - Priority: 0 + ### definition_2 - Class: `Full\Qualified\Class2` diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.txt b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.txt index 3cbca0110bcce..7884a05c2a690 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.txt +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.txt @@ -9,6 +9,7 @@ " val1 val2 0 definition_1 val1 30 Full\Qualified\Class1 " val2 + definition_4 0 Full\Qualified\Class4 definition_2 val1 val2 -20 Full\Qualified\Class2 -------------- ------- ------- ---------- ------- ----------------------- diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.xml index 8e886bed25579..2e00c99955257 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Descriptor/builder_priority_tag.xml @@ -29,6 +29,13 @@ + + + + 0 + + +