Skip to content

Commit

Permalink
feat(sw6.7): Add logger to scheduled task handler (#42)
Browse files Browse the repository at this point in the history
Co-authored-by: Shyim <[email protected]>
  • Loading branch information
aragon999 and shyim authored Feb 7, 2025
1 parent a4b88eb commit 68af632
Show file tree
Hide file tree
Showing 6 changed files with 141 additions and 0 deletions.
2 changes: 2 additions & 0 deletions config/shopware-6.7.0.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Frosh\Rector\Rule\ClassMethod\ChangeReturnTypeOfClassMethod;
use Frosh\Rector\Rule\ClassMethod\ChangeReturnTypeOfClassMethodRector;
use Frosh\Rector\Rule\v67\AddEntityNameToEntityExtension;
use Frosh\Rector\Rule\v67\AddLoggerToScheduledTaskConstructorRector;
use PhpParser\Node\Name\FullyQualified;
use Rector\Config\RectorConfig;

Expand All @@ -15,6 +16,7 @@
'backwardsCompatible' => false,
]);

$rectorConfig->rule(AddLoggerToScheduledTaskConstructorRector::class);
$rectorConfig->ruleWithConfiguration(ChangeReturnTypeOfClassMethodRector::class, [
new ChangeReturnTypeOfClassMethod('\Shopware\Elasticsearch\Framework\AbstractElasticsearchDefinition', 'buildTermQuery', new FullyQualified('OpenSearchDSL\BuilderInterface')),
]);
Expand Down
73 changes: 73 additions & 0 deletions src/Rule/v67/AddLoggerToScheduledTaskConstructorRector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<?php

declare(strict_types=1);

namespace Frosh\Rector\Rule\v67;

use PhpParser\Node;
use PHPStan\Type\ObjectType;
use Rector\Rector\AbstractRector;
use Rector\ValueObject\MethodName;
use Symplify\RuleDocGenerator\ValueObject\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;

final class AddLoggerToScheduledTaskConstructorRector extends AbstractRector
{
public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition('Ensure that the parent constructor is called with a Psr\Log\LoggerInterface as second argument.', [
new CodeSample(
<<<'PHP'
class MyTaskHandler extends ScheduledTaskHandler {
public function __construct(EntityRepository $scheduledTaskRepository) {
parent::__construct($scheduledTaskRepository);
}
}
PHP,
<<<'PHP'
class MyTaskHandler extends ScheduledTaskHandler {
public function __construct(EntityRepository $scheduledTaskRepository, LoggerInterface $exceptionLogger) {
parent::__construct($scheduledTaskRepository, $exceptionLogger);
}
}
PHP
),
]);
}

public function getNodeTypes(): array
{
return [Node\Stmt\Class_::class];
}

public function refactor(Node $node): ?Node
{
if (!$this->isObjectType($node, new ObjectType('Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTaskHandler'))) {
return null;
}

$constructor = $node->getMethod(MethodName::CONSTRUCT);
if (!$constructor instanceof Node\Stmt\ClassMethod) {
return null;
}

$missingScheduledTaskLogger = false;
foreach ($constructor->stmts as $stmt) {
if ($stmt instanceof Node\Stmt\Expression && $stmt->expr instanceof Node\Expr\StaticCall) {
$staticCall = $stmt->expr;
if ($this->isName($staticCall->name, MethodName::CONSTRUCT) && \count($staticCall->args) === 1) {
$missingScheduledTaskLogger = true;
$staticCall->args[] = $this->nodeFactory->createArg(new Node\Expr\Variable('exceptionLogger'));

break;
}
}
}

if ($missingScheduledTaskLogger) {
$constructor->params[] = $this->nodeFactory->createParamFromNameAndType('exceptionLogger', new ObjectType('Psr\Log\LoggerInterface'));
}

return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace Shopware\Core\Framework\MessageQueue\ScheduledTask;

class ScheduledTaskHandler
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php declare(strict_types=1);

namespace Frosh\Rector\Tests\Rector\v67\AddLoggerToScheduledTaskConstructorRector;

use Frosh\Rector\Tests\Rector\AbstractFroshRectorTestCase;

/**
* @internal
*
* @covers \Frosh\Rector\Rule\v67\AddLoggerToScheduledTaskConstructorRector
*/
class AddLoggerToScheduledTaskConstructorRector extends AbstractFroshRectorTestCase
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php declare(strict_types=1);

namespace Frosh\Rector\Tests\Rector\v67\AddLoggerToScheduledTaskConstructorRector\Fixture;

use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTaskHandler;

class MyScheduledTaskHandler extends ScheduledTaskHandler
{
public function __construct(EntityRepository $scheduledTaskRepository) {
parent::__construct($scheduledTaskRepository);
}

public function run(): void {}
}
?>
-----
<?php declare(strict_types=1);

namespace Frosh\Rector\Tests\Rector\v67\AddLoggerToScheduledTaskConstructorRector\Fixture;

use Psr\Log\LoggerInterface;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTaskHandler;

class MyScheduledTaskHandler extends ScheduledTaskHandler
{
public function __construct(EntityRepository $scheduledTaskRepository, LoggerInterface $exceptionLogger) {
parent::__construct($scheduledTaskRepository, $exceptionLogger);
}

public function run(): void {}
}
?>
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

use Frosh\Rector\Rule\v67\AddLoggerToScheduledTaskConstructorRector;
use Rector\Config\RectorConfig;

return static function (RectorConfig $rectorConfig): void {
$rectorConfig->import(__DIR__ . '/../../../../../config/config_test.php');
$rectorConfig->rule(AddLoggerToScheduledTaskConstructorRector::class);
};

0 comments on commit 68af632

Please sign in to comment.