@@ -70,3 +70,68 @@ public function someMethod(): void {}
7070 public function someMethod2 (): void {} // error: Unused Doctrine\MySubscriber::someMethod2
7171
7272}
73+
74+ #[\Doctrine \Bundle \DoctrineBundle \Attribute \AsDoctrineListener(event: 'postGenerateSchema ' )]
75+ class FixDoctrineMigrationTableSchema {
76+
77+ public function postGenerateSchema (): void {}
78+
79+ public function unusedMethod (): void {} // error: Unused Doctrine\FixDoctrineMigrationTableSchema::unusedMethod
80+
81+ }
82+
83+ #[\Doctrine \Bundle \DoctrineBundle \Attribute \AsDoctrineListener(event: 'postLoad ' )]
84+ class AsDoctrineListenerWithInvoke {
85+
86+ public function __invoke (): void {}
87+
88+ public function unusedMethod (): void {} // error: Unused Doctrine\AsDoctrineListenerWithInvoke::unusedMethod
89+
90+ }
91+
92+ #[\Symfony \Component \DependencyInjection \Attribute \AutoconfigureTag('doctrine.event_listener ' , event: 'postGenerateSchema ' )]
93+ class FixDoctrineMigrationTableSchemaWithAutoconfigureTag {
94+
95+ public function postGenerateSchema (): void {}
96+
97+ public function unusedMethod (): void {} // error: Unused Doctrine\FixDoctrineMigrationTableSchemaWithAutoconfigureTag::unusedMethod
98+
99+ }
100+
101+ #[\Symfony \Component \DependencyInjection \Attribute \AutoconfigureTag('doctrine.event_listener ' , event: 'postGenerateSchema ' , method: 'onPostGenerateSchema ' )]
102+ class FixDoctrineMigrationTableSchemaWithAutoconfigureTagAndMethod {
103+
104+ public function onPostGenerateSchema (): void {}
105+
106+ public function unusedMethod (): void {} // error: Unused Doctrine\FixDoctrineMigrationTableSchemaWithAutoconfigureTagAndMethod::unusedMethod
107+
108+ }
109+
110+ // Test multiple AsDoctrineListener attributes on same class (IS_REPEATABLE)
111+ #[\Doctrine \Bundle \DoctrineBundle \Attribute \AsDoctrineListener(event: 'postPersist ' )]
112+ #[\Doctrine \Bundle \DoctrineBundle \Attribute \AsDoctrineListener(event: 'postUpdate ' )]
113+ #[\Doctrine \Bundle \DoctrineBundle \Attribute \AsDoctrineListener(event: 'preRemove ' )]
114+ class MultipleAsDoctrineListeners {
115+
116+ public function postPersist (): void {}
117+
118+ public function postUpdate (): void {}
119+
120+ public function preRemove (): void {}
121+
122+ public function unusedMethod (): void {} // error: Unused Doctrine\MultipleAsDoctrineListeners::unusedMethod
123+
124+ }
125+
126+ // Test multiple AutoconfigureTag attributes
127+ #[\Symfony \Component \DependencyInjection \Attribute \AutoconfigureTag('doctrine.event_listener ' , event: 'postPersist ' )]
128+ #[\Symfony \Component \DependencyInjection \Attribute \AutoconfigureTag('doctrine.event_listener ' , event: 'postUpdate ' , method: 'afterUpdate ' )]
129+ class MultipleAutoconfigureTags {
130+
131+ public function postPersist (): void {}
132+
133+ public function afterUpdate (): void {}
134+
135+ public function unusedMethod (): void {} // error: Unused Doctrine\MultipleAutoconfigureTags::unusedMethod
136+
137+ }
0 commit comments