File tree Expand file tree Collapse file tree 4 files changed +77
-1
lines changed
rules-tests/CodeQuality/Rector/Class_/ControllerMethodInjectionToConstructorRector
rules/CodeQuality/Rector/Class_ Expand file tree Collapse file tree 4 files changed +77
-1
lines changed Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Rector \Symfony \Tests \CodeQuality \Rector \Class_ \ControllerMethodInjectionToConstructorRector \Fixture ;
6+
7+ use Psr \Log \LoggerInterface ;
8+ use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
9+ use Symfony \Component \Routing \Annotation \Route ;
10+
11+ abstract class SkipAbstractClass extends AbstractController
12+ {
13+ #[Route('/some-action ' , name: 'some_action ' )]
14+ public function someAction (LoggerInterface $ logger )
15+ {
16+ $ someClosure = function () use ($ logger ) {
17+ $ logger ->log ('level ' , 'value ' );
18+ };
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Rector \Symfony \Tests \CodeQuality \Rector \Class_ \ControllerMethodInjectionToConstructorRector \Fixture ;
6+
7+ use Psr \Log \LoggerInterface ;
8+ use Rector \Symfony \Tests \CodeQuality \Rector \Class_ \ControllerMethodInjectionToConstructorRector \Source \IntermediateController ;
9+ use Symfony \Component \Routing \Annotation \Route ;
10+
11+ final class SkipParentMethodExists extends IntermediateController
12+ {
13+ public function __construct ()
14+ {
15+ }
16+
17+ #[Route('/some-action ' , name: 'some_action ' )]
18+ public function someAction (LoggerInterface $ logger )
19+ {
20+ $ someClosure = function () use ($ logger ) {
21+ $ logger ->log ('level ' , 'value ' );
22+ };
23+ }
24+ }
25+
26+ ?>
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Rector \Symfony \Tests \CodeQuality \Rector \Class_ \ControllerMethodInjectionToConstructorRector \Source ;
6+
7+ use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
8+ use Psr \Log \LoggerInterface ;
9+ use Symfony \Component \Routing \Annotation \Route ;
10+
11+ class IntermediateController extends AbstractController
12+ {
13+ #[Route('/some-action ' , name: 'some_action ' )]
14+ public function someAction (LoggerInterface $ logger )
15+ {
16+ // to be overridden
17+ }
18+ }
Original file line number Diff line number Diff line change 2525use Rector \Symfony \Enum \SymfonyClass ;
2626use Rector \Symfony \TypeAnalyzer \ControllerAnalyzer ;
2727use Rector \ValueObject \MethodName ;
28+ use Rector \VendorLocker \ParentClassMethodTypeOverrideGuard ;
2829use Symplify \RuleDocGenerator \ValueObject \CodeSample \CodeSample ;
2930use Symplify \RuleDocGenerator \ValueObject \RuleDefinition ;
3031
@@ -45,6 +46,7 @@ public function __construct(
4546 private readonly StaticTypeMapper $ staticTypeMapper ,
4647 private readonly AttributeFinder $ attributeFinder ,
4748 private readonly ValueResolver $ valueResolver ,
49+ private readonly ParentClassMethodTypeOverrideGuard $ parentClassMethodOverrideGuard
4850 ) {
4951 }
5052
@@ -113,6 +115,10 @@ public function refactor(Node $node): ?Node
113115 return null ;
114116 }
115117
118+ if ($ node ->isAbstract ()) {
119+ return null ;
120+ }
121+
116122 $ propertyMetadatas = [];
117123
118124 foreach ($ node ->getMethods () as $ classMethod ) {
@@ -218,7 +224,13 @@ private function shouldSkipClassMethod(ClassMethod $classMethod): bool
218224 return true ;
219225 }
220226
221- return ! $ this ->controllerMethodAnalyzer ->isAction ($ classMethod );
227+ if (! $ this ->controllerMethodAnalyzer ->isAction ($ classMethod )) {
228+ return true ;
229+ }
230+
231+ return $ this ->parentClassMethodOverrideGuard ->hasParentClassMethod (
232+ $ classMethod
233+ );
222234 }
223235
224236 /**
You can’t perform that action at this time.
0 commit comments