Skip to content

Commit bec308f

Browse files
authored
[CodeQuality] Skip parent method exists on ControllerMethodInjectionToConstructorRector (#889)
* [CodeQuality] Skip parent method exists on ControllerMethodInjectionToConstructorRector * fix * also skip abstract class
1 parent e85ad01 commit bec308f

File tree

4 files changed

+77
-1
lines changed

4 files changed

+77
-1
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
?>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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+
}

rules/CodeQuality/Rector/Class_/ControllerMethodInjectionToConstructorRector.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Rector\Symfony\Enum\SymfonyClass;
2626
use Rector\Symfony\TypeAnalyzer\ControllerAnalyzer;
2727
use Rector\ValueObject\MethodName;
28+
use Rector\VendorLocker\ParentClassMethodTypeOverrideGuard;
2829
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
2930
use 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
/**

0 commit comments

Comments
 (0)