move core architecture to own set

This commit is contained in:
TomasVotruba 2020-02-13 14:42:40 +01:00
parent 8512859813
commit 09cf6f8a4a
16 changed files with 106 additions and 97 deletions

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Rector\Compiler\Console;
namespace Rector\Compiler\Composer;
use Nette\Utils\FileSystem as NetteFileSystem;
use Nette\Utils\Json;

View File

@ -4,11 +4,11 @@ declare(strict_types=1);
namespace Rector\Compiler\Console;
use Rector\Compiler\Composer\ComposerJsonManipulator;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Process\Process;
use Symplify\PackageBuilder\Console\ShellCode;
use Symplify\PackageBuilder\Console\Style\SymfonyStyleFactory;
@ -42,7 +42,6 @@ final class CompileCommand extends Command
{
parent::__construct();
$this->filesystem = new Filesystem();
$this->composerJsonManipulator = $composerJsonManipulator;
$this->dataDir = $dataDir;

View File

@ -4,7 +4,8 @@ parameters:
services:
# order matters, this needs to be first to correctly detect parent repository
Rector\Core\Rector\Architecture\RepositoryAsService\ReplaceParentRepositoryCallsByRepositoryPropertyRector: null
Rector\Core\Rector\Architecture\RepositoryAsService\MoveRepositoryFromParentToConstructorRector: null
Rector\Core\Rector\Architecture\RepositoryAsService\ServiceLocatorToDIRector: null
Rector\Architecture\Rector\Class_\MoveRepositoryFromParentToConstructorRector: null
Rector\Architecture\Rector\MethodCall\ServiceLocatorToDIRector: null
Rector\Architecture\Rector\MethodCall\ReplaceParentRepositoryCallsByRepositoryPropertyRector: null
Rector\Doctrine\Rector\Class_\RemoveRepositoryFromEntityAnnotationRector: null

View File

@ -93,6 +93,87 @@
<br>
### `MoveRepositoryFromParentToConstructorRector`
- class: `Rector\Architecture\Rector\Class_\MoveRepositoryFromParentToConstructorRector`
Turns parent EntityRepository class to constructor dependency
```diff
namespace App\Repository;
+use App\Entity\Post;
use Doctrine\ORM\EntityRepository;
-final class PostRepository extends EntityRepository
+final class PostRepository
{
+ /**
+ * @var \Doctrine\ORM\EntityRepository
+ */
+ private $repository;
+ public function __construct(\Doctrine\ORM\EntityManager $entityManager)
+ {
+ $this->repository = $entityManager->getRepository(\App\Entity\Post::class);
+ }
}
```
<br>
### `ReplaceParentRepositoryCallsByRepositoryPropertyRector`
- class: `Rector\Architecture\Rector\MethodCall\ReplaceParentRepositoryCallsByRepositoryPropertyRector`
Handles method calls in child of Doctrine EntityRepository and moves them to "$this->repository" property.
```diff
<?php
use Doctrine\ORM\EntityRepository;
class SomeRepository extends EntityRepository
{
public function someMethod()
{
- return $this->findAll();
+ return $this->repository->findAll();
}
}
```
<br>
### `ServiceLocatorToDIRector`
- class: `Rector\Architecture\Rector\MethodCall\ServiceLocatorToDIRector`
Turns "$this->getRepository()" in Symfony Controller to constructor injection and private property access.
```diff
class ProductController extends Controller
{
+ /**
+ * @var ProductRepository
+ */
+ private $productRepository;
+
+ public function __construct(ProductRepository $productRepository)
+ {
+ $this->productRepository = $productRepository;
+ }
+
public function someAction()
{
$entityManager = $this->getDoctrine()->getManager();
- $entityManager->getRepository('SomethingBundle:Product')->findSomething(...);
+ $this->productRepository->findSomething(...);
}
}
```
<br>
## Autodiscovery
### `MoveEntitiesToEntityDirectoryRector`
@ -9407,34 +9488,6 @@ services:
<br>
### `MoveRepositoryFromParentToConstructorRector`
- class: `Rector\Core\Rector\Architecture\RepositoryAsService\MoveRepositoryFromParentToConstructorRector`
Turns parent EntityRepository class to constructor dependency
```diff
namespace App\Repository;
+use App\Entity\Post;
use Doctrine\ORM\EntityRepository;
-final class PostRepository extends EntityRepository
+final class PostRepository
{
+ /**
+ * @var \Doctrine\ORM\EntityRepository
+ */
+ private $repository;
+ public function __construct(\Doctrine\ORM\EntityManager $entityManager)
+ {
+ $this->repository = $entityManager->getRepository(\App\Entity\Post::class);
+ }
}
```
<br>
### `MultipleClassFileToPsr4ClassesRector`
- class: `Rector\Core\Rector\Psr4\MultipleClassFileToPsr4ClassesRector`
@ -9760,29 +9813,6 @@ services:
<br>
### `ReplaceParentRepositoryCallsByRepositoryPropertyRector`
- class: `Rector\Core\Rector\Architecture\RepositoryAsService\ReplaceParentRepositoryCallsByRepositoryPropertyRector`
Handles method calls in child of Doctrine EntityRepository and moves them to "$this->repository" property.
```diff
<?php
use Doctrine\ORM\EntityRepository;
class SomeRepository extends EntityRepository
{
public function someMethod()
{
- return $this->findAll();
+ return $this->repository->findAll();
}
}
```
<br>
### `ReplaceVariableByPropertyFetchRector`
- class: `Rector\Core\Rector\Architecture\DependencyInjection\ReplaceVariableByPropertyFetchRector`
@ -9906,36 +9936,6 @@ services:
<br>
### `ServiceLocatorToDIRector`
- class: `Rector\Core\Rector\Architecture\RepositoryAsService\ServiceLocatorToDIRector`
Turns "$this->getRepository()" in Symfony Controller to constructor injection and private property access.
```diff
class ProductController extends Controller
{
+ /**
+ * @var ProductRepository
+ */
+ private $productRepository;
+
+ public function __construct(ProductRepository $productRepository)
+ {
+ $this->productRepository = $productRepository;
+ }
+
public function someAction()
{
$entityManager = $this->getDoctrine()->getManager();
- $entityManager->getRepository('SomethingBundle:Product')->findSomething(...);
+ $this->productRepository->findSomething(...);
}
}
```
<br>
### `StaticCallToFunctionRector`
- class: `Rector\Core\Rector\StaticCall\StaticCallToFunctionRector`

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Rector\Core\Rector\Architecture\RepositoryAsService;
namespace Rector\Architecture\Rector\Class_;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
@ -20,6 +20,9 @@ use Rector\Core\RectorDefinition\RectorDefinition;
use Rector\Doctrine\Contract\Mapper\DoctrineEntityAndRepositoryMapperInterface;
use Rector\NodeTypeResolver\Node\AttributeKey;
/**
* @see \Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\DoctrineRepositoryAsServiceTest
*/
final class MoveRepositoryFromParentToConstructorRector extends AbstractRector
{
/**

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Rector\Core\Rector\Architecture\RepositoryAsService;
namespace Rector\Architecture\Rector\MethodCall;
use Doctrine\ORM\EntityRepository;
use PhpParser\Node;
@ -12,6 +12,9 @@ use Rector\Core\Rector\AbstractRector;
use Rector\Core\RectorDefinition\CodeSample;
use Rector\Core\RectorDefinition\RectorDefinition;
/**
* @see \Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\DoctrineRepositoryAsServiceTest
*/
final class ReplaceParentRepositoryCallsByRepositoryPropertyRector extends AbstractRector
{
/**

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Rector\Core\Rector\Architecture\RepositoryAsService;
namespace Rector\Architecture\Rector\MethodCall;
use Nette\Utils\Strings;
use PhpParser\Node;
@ -21,6 +21,9 @@ use Rector\Core\RectorDefinition\RectorDefinition;
use Rector\Doctrine\Contract\Mapper\DoctrineEntityAndRepositoryMapperInterface;
use Rector\NodeTypeResolver\Node\AttributeKey;
/**
* @see \Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\DoctrineRepositoryAsServiceTest
*/
final class ServiceLocatorToDIRector extends AbstractRector
{
/**

View File

@ -2,15 +2,15 @@
declare(strict_types=1);
namespace Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService;
namespace Rector\Architecture\Tests\Rector\DoctrineRepositoryAsService;
use Iterator;
use Rector\Core\Testing\PHPUnit\AbstractRectorTestCase;
/**
* @covers \Rector\Rector\Architecture\RepositoryAsService\ReplaceParentRepositoryCallsByRepositoryPropertyRector
* @covers \Rector\Rector\Architecture\RepositoryAsService\MoveRepositoryFromParentToConstructorRector
* @covers \Rector\Rector\Architecture\RepositoryAsService\ServiceLocatorToDIRector
* @covers \Rector\Architecture\Rector\MethodCall\ReplaceParentRepositoryCallsByRepositoryPropertyRector
* @covers \Rector\Architecture\Rector\Class_\MoveRepositoryFromParentToConstructorRector
* @covers \Rector\Architecture\Rector\MethodCall\ServiceLocatorToDIRector
*/
final class DoctrineRepositoryAsServiceTest extends AbstractRectorTestCase
{

View File

@ -1,6 +1,6 @@
<?php
namespace Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\Fixture;
namespace Rector\Architecture\Tests\Rector\DoctrineRepositoryAsService\Fixture;
use Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\Source\Entity\Post;
use Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\Source\SymfonyController;
@ -21,7 +21,7 @@ final class PostController extends SymfonyController
-----
<?php
namespace Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\Fixture;
namespace Rector\Architecture\Tests\Rector\DoctrineRepositoryAsService\Fixture;
use Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\Source\Entity\Post;
use Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\Source\SymfonyController;

View File

@ -3,4 +3,4 @@ parameters:
entity_manager_class: 'Rector\Core\Tests\Rector\Architecture\DoctrineRepositoryAsService\Source\EntityManagerClass'
imports:
- { resource: '../../../../config/set/architecture/doctrine-repository-as-service.yaml' }
- { resource: '../../../../../config/set/architecture/doctrine-repository-as-service.yaml' }