From 9701bd6dc571ec342da6d5b1fd1b40128704d0ef Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 14 Jan 2026 15:28:14 +0100 Subject: [PATCH 1/5] Prepared configuration for Ibexa Annotation to Attribute Constraints --- src/contracts/Sets/ibexa-50.php | 6 +++ ...otationToAttributeConfigurationBuilder.php | 24 +++++++++ .../IbexaSymfonyConstraintList.php | 52 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 src/lib/Configuration/AnnotationToAttributeConfigurationBuilder.php create mode 100644 src/lib/Configuration/IbexaSymfonyConstraintList.php diff --git a/src/contracts/Sets/ibexa-50.php b/src/contracts/Sets/ibexa-50.php index f1aaff4..05e21ff 100644 --- a/src/contracts/Sets/ibexa-50.php +++ b/src/contracts/Sets/ibexa-50.php @@ -8,6 +8,7 @@ namespace Ibexa\Contracts\Rector\Sets; +use Ibexa\Rector\Configuration\AnnotationToAttributeConfigurationBuilder; use Ibexa\Rector\Rule\AddReturnTypeFromParentMethodRule; use Ibexa\Rector\Rule\AddReturnTypeFromPhpDocRule; use Ibexa\Rector\Rule\ChangeArgumentTypeRector; @@ -17,6 +18,7 @@ use Ibexa\Rector\Rule\PropertyToGetterRector; use Ibexa\Rector\Rule\RemoveArgumentFromMethodCallRector; use Rector\Config\RectorConfig; +use Rector\Php80\Rector\Class_\AnnotationToAttributeRector; use Rector\Renaming\Rector\ClassConstFetch\RenameClassConstFetchRector; use Rector\Renaming\Rector\MethodCall\RenameMethodRector; use Rector\Renaming\Rector\Name\RenameClassRector; @@ -306,6 +308,10 @@ ), ] ); + $rectorConfig->ruleWithConfiguration( + AnnotationToAttributeRector::class, + iterator_to_array((new AnnotationToAttributeConfigurationBuilder())->build()) + ); $rectorConfig->skip( [ diff --git a/src/lib/Configuration/AnnotationToAttributeConfigurationBuilder.php b/src/lib/Configuration/AnnotationToAttributeConfigurationBuilder.php new file mode 100644 index 0000000..9d91bc6 --- /dev/null +++ b/src/lib/Configuration/AnnotationToAttributeConfigurationBuilder.php @@ -0,0 +1,24 @@ + + */ + public function build(): iterable + { + foreach (IbexaSymfonyConstraintList::cases() as $constraintFQCN) { + yield new AnnotationToAttribute($constraintFQCN->value); + } + } +} diff --git a/src/lib/Configuration/IbexaSymfonyConstraintList.php b/src/lib/Configuration/IbexaSymfonyConstraintList.php new file mode 100644 index 0000000..15f5fa7 --- /dev/null +++ b/src/lib/Configuration/IbexaSymfonyConstraintList.php @@ -0,0 +1,52 @@ + Date: Wed, 14 Jan 2026 15:28:49 +0100 Subject: [PATCH 2/5] [Tests] Added coverage for Ibexa annotation to attribute rector config --- .../UniquePaymentMethodIdentifier.php | 11 +++++ .../Constraint/UserToSegmentAssignment.php | 11 +++++ .../Fixture/annotation_to_attribute.php.inc | 47 +++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 stubs/Ibexa/Payment/Validation/Constraints/UniquePaymentMethodIdentifier.php create mode 100644 stubs/Ibexa/Segmentation/Validation/Constraint/UserToSegmentAssignment.php create mode 100644 tests/lib/Sets/Ibexa50/Fixture/annotation_to_attribute.php.inc diff --git a/stubs/Ibexa/Payment/Validation/Constraints/UniquePaymentMethodIdentifier.php b/stubs/Ibexa/Payment/Validation/Constraints/UniquePaymentMethodIdentifier.php new file mode 100644 index 0000000..99937bd --- /dev/null +++ b/stubs/Ibexa/Payment/Validation/Constraints/UniquePaymentMethodIdentifier.php @@ -0,0 +1,11 @@ +uniquePaymentIdentifier; + } +} + +?> +----- +uniquePaymentIdentifier; + } +} + +?> From 6ec8516f3affd23cdf3437b906d65ebfe06d930c Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 14 Jan 2026 16:04:39 +0100 Subject: [PATCH 3/5] Made AnnotationToAttributeConfigurationBuilder readonly Co-authored-by: Konrad Oboza --- .../Configuration/AnnotationToAttributeConfigurationBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Configuration/AnnotationToAttributeConfigurationBuilder.php b/src/lib/Configuration/AnnotationToAttributeConfigurationBuilder.php index 9d91bc6..5b53e25 100644 --- a/src/lib/Configuration/AnnotationToAttributeConfigurationBuilder.php +++ b/src/lib/Configuration/AnnotationToAttributeConfigurationBuilder.php @@ -10,7 +10,7 @@ use Rector\Php80\ValueObject\AnnotationToAttribute; -final class AnnotationToAttributeConfigurationBuilder +final readonly class AnnotationToAttributeConfigurationBuilder { /** * @return iterable<\Rector\Php80\ValueObject\AnnotationToAttribute> From b7860012a12af3fb740822f1bf55fd5ef85f18cd Mon Sep 17 00:00:00 2001 From: Andrew Longosz Date: Wed, 14 Jan 2026 16:05:55 +0100 Subject: [PATCH 4/5] Added strict types to stubs Co-authored-by: Konrad Oboza --- .../Validation/Constraints/UniquePaymentMethodIdentifier.php | 2 +- .../Validation/Constraint/UserToSegmentAssignment.php | 2 +- tests/lib/Sets/Ibexa50/Fixture/annotation_to_attribute.php.inc | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/stubs/Ibexa/Payment/Validation/Constraints/UniquePaymentMethodIdentifier.php b/stubs/Ibexa/Payment/Validation/Constraints/UniquePaymentMethodIdentifier.php index 99937bd..8a67adf 100644 --- a/stubs/Ibexa/Payment/Validation/Constraints/UniquePaymentMethodIdentifier.php +++ b/stubs/Ibexa/Payment/Validation/Constraints/UniquePaymentMethodIdentifier.php @@ -1,5 +1,5 @@ ----- Date: Thu, 15 Jan 2026 15:05:09 +0100 Subject: [PATCH 5/5] Enabled Symfony & Doctrine annotation to attribute rectors in the config factory --- src/contracts/Factory/IbexaRectorConfigFactory.php | 1 + src/contracts/Factory/IbexaRectorConfigFactoryInterface.php | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/contracts/Factory/IbexaRectorConfigFactory.php b/src/contracts/Factory/IbexaRectorConfigFactory.php index 0e601d7..c0cecd2 100644 --- a/src/contracts/Factory/IbexaRectorConfigFactory.php +++ b/src/contracts/Factory/IbexaRectorConfigFactory.php @@ -62,6 +62,7 @@ public function createConfig(): RectorConfigBuilder $this->extraSets ) ) + ->withAttributesSets(symfony: true, doctrine: true) ; } } diff --git a/src/contracts/Factory/IbexaRectorConfigFactoryInterface.php b/src/contracts/Factory/IbexaRectorConfigFactoryInterface.php index d09dad6..77b0386 100644 --- a/src/contracts/Factory/IbexaRectorConfigFactoryInterface.php +++ b/src/contracts/Factory/IbexaRectorConfigFactoryInterface.php @@ -15,5 +15,8 @@ */ interface IbexaRectorConfigFactoryInterface { + /** + * @throws \Rector\Exception\Configuration\InvalidConfigurationException + */ public function createConfig(): RectorConfigBuilder; }