8000 Use compiler pass to deprecate class parameters · doctrine/DoctrineMongoDBBundle@9f2c918 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9f2c918

Browse files
committed
Use compiler pass to deprecate class parameters
1 parent b98e3bf commit 9f2c918

File tree

4 files changed

+88
-45
lines changed

4 files changed

+88
-45
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler;
6+
7+
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\HydratorCacheWarmer;
8+
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\PersistentCollectionCacheWarmer;
9+
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\ProxyCacheWarmer;
10+
use Doctrine\Bundle\MongoDBBundle\ManagerConfigurator;
11+
use Doctrine\Bundle\MongoDBBundle\ManagerRegistry;
12+
use Doctrine\ODM\MongoDB\Configuration;
13+
use Doctrine\ODM\MongoDB\DocumentManager;
14+
use MongoDB\Client;
15+
use Symfony\Bridge\Doctrine\ContainerAwareEventManager;
16+
use Symfony\Bridge\Doctrine\Security\User\EntityUserProvider;
17+
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator;
18+
use Symfony\Bridge\Doctrine\Validator\DoctrineInitializer;
19+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
20+
use Symfony\Component\DependencyInjection\ContainerBuilder;
21+
22+
use function trigger_deprecation;
23+
24+
/** @internal */
25+
final class DeprecateChangesClassParametersPass implements CompilerPassInterface
26+
{
27+
public function process(ContainerBuilder $container): void
28+
{
29+
foreach (
30+
[
31+
'doctrine_mongodb.odm.connection.class' => Client::class,
32+
'doctrine_mongodb.odm.configuration.class' => Configuration::class,
33+
'doctrine_mongodb.odm.document_manager.class' => DocumentManager::class,
34+
'doctrine_mongodb.odm.manager_configurator.class' => ManagerConfigurator::class,
35+
'doctrine_mongodb.odm.event_manager.class' => ContainerAwareEventManager::class,
36+
'doctrine_odm.mongodb.validator_initializer.class' => DoctrineInitializer::class,
37+
'doctrine_odm.mongodb.validator.unique.class' => UniqueEntityValidator::class,
38+
'doctrine_mongodb.odm.class' => ManagerRegistry::class,
39+
'doctrine_mongodb.odm.security.user.provider.class' => EntityUserProvider::class,
40+
'doctrine_mongodb.odm.proxy_cache_warmer.class' => ProxyCacheWarmer::class,
41+
'doctrine_mongodb.odm.hydrator_cache_warmer.class' => HydratorCacheWarmer::class,
42+
'doctrine_mongodb.odm.persistent_collection_cache_warmer.class' => PersistentCollectionCacheWarmer::class,
43+
] as $parameter => $class
44+
) {
45+
if (! $container->hasParameter($parameter) || $container->getParameter($parameter) === $class) {
46+
continue;
47+
}
48+
49+
trigger_deprecation(
50+
'doctrine/mongodb-odm-bundle',
51+
'4.7',
52+
'"%s" parameter is deprecated, use a compiler pass to update the service instead.',
53+
$parameter,
54+
);
55+
}
56+
}
57+
}

DependencyInjection/DoctrineMongoDBExtension.php

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,21 @@
66

77
use Doctrine\Bundle\MongoDBBundle\Attribute\AsDocumentListener;
88
use Doctrine\Bundle\MongoDBBundle\Attribute\MapDocument;
9-
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\HydratorCacheWarmer;
10-
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\PersistentCollectionCacheWarmer;
11-
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\ProxyCacheWarmer;
129
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\FixturesCompilerPass;
1310
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass;
1411
use Doctrine\Bundle\MongoDBBundle\EventSubscriber\EventSubscriberInterface;
1512
use Doctrine\Bundle\MongoDBBundle\Fixture\ODMFixtureInterface;
16-
use Doctrine\Bundle\MongoDBBundle\ManagerConfigurator;
17-
use Doctrine\Bundle\MongoDBBundle\ManagerRegistry;
1813
use Doctrine\Bundle\MongoDBBundle\Repository\ServiceDocumentRepositoryInterface;
1914
use Doctrine\Common\Cache\MemcacheCache;
2015
use Doctrine\Common\Cache\RedisCache;
2116
use Doctrine\Common\DataFixtures\Loader as DataFixturesLoader;
2217
use Doctrine\Common\EventSubscriber;
23-
use Doctrine\ODM\MongoDB\Configuration as MongoDBConfiguration;
2418
use Doctrine\ODM\MongoDB\DocumentManager;
2519
use InvalidArgumentException;
2620
use Jean85\PrettyVersions;
27-
use MongoDB\Client;
2821
use Symfony\Bridge\Doctrine\ArgumentResolver\EntityValueResolver;
29-
use Symfony\Bridge\Doctrine\ContainerAwareEventManager;
3022
use Symfony\Bridge\Doctrine\DependencyInjection\AbstractDoctrineExtension;
3123
use Symfony\Bridge\Doctrine\Messenger\DoctrineClearEntityManagerWorkerSubscriber;
32-
use Symfony\Bridge\Doctrine\Security\User\EntityUserProvider;
33-
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator;
34-
use Symfony\Bridge\Doctrine\Validator\DoctrineInitializer;
3524
use Symfony\Component\Cache\Adapter\ApcuAdapter;
3625
use Symfony\Component\Cache\Adapter\ArrayAdapter;
3726
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
@@ -55,7 +44,6 @@
5544
use function in_array;
5645
use function interface_exists;
5746
use function is_dir;
58-
use function method_exists;
5947
use function reset;
6048
use function sprintf;
6149

@@ -159,8 +147,6 @@ public function load(array $configs, ContainerBuilder $container)
159147
$this->loadMessengerServices($container);
160148

161149
$this->loadEntityValueResolverServices($container, $loader, $config);
162-
163-
$this->deprecateClassParameters($container);
164150
}
165151

166152
/**
@@ -675,35 +661,4 @@ private static function getODMVersion(): string
675661

676662
return self::$odmVersion;
677663
}
678-
679-
private function deprecateClassParameters(ContainerBuilder $container): void
680-
{
681-
if (! method_exists($container, 'deprecateParameter')) {
682-
return;
683-
}
684-
685-
foreach (
686-
[
687-
'doctrine_mongodb.odm.connection.class' => Client::class,
688-
'doctrine_mongodb.odm.configuration.class' => MongoDBConfiguration::class,
689-
'doctrine_mongodb.odm.document_manager.class' => DocumentManager::class,
690-
'doctrine_mongodb.odm.manager_configurator.class' => ManagerConfigurator::class,
691-
'doctrine_mongodb.odm.event_manager.class' => ContainerAwareEventManager::class,
692-
'doctrine_odm.mongodb.validator_initializer.class' => DoctrineInitializer::class,
693-
'doctrine_odm.mongodb.validator.unique.class' => UniqueEntityValidator::class,
694-
'doctrine_mongodb.odm.class' => ManagerRegistry::class,
695-
'doctrine_mongodb.odm.security.user.provider.class' => EntityUserProvider::class,
696-
'doctrine_mongodb.odm.proxy_cache_warmer.class' => ProxyCacheWarmer::class,
697-
'doctrine_mongodb.odm.hydrator_cache_warmer.class' => HydratorCacheWarmer::class,
698-
'doctrine_mongodb.odm.persistent_collection_cache_warmer.class' => PersistentCollectionCacheWarmer::class,
699-
] as $parameter => $class
700-
) {
701-
$container->deprecateParameter(
702-
$parameter,
703-
'doctrine/mongodb-odm-bundle',
704-
'4.7',
705-
'"%s" parameter is deprecated, you should use a compiler pass to update the service instead.',
706-
);
707-
}
708-
}
709664
}

DoctrineMongoDBBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\CacheCompatibilityPass;
88
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\CreateHydratorDirectoryPass;
99
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\CreateProxyDirectoryPass;
10+
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\DeprecateChangesClassParametersPass;
1011
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\FixturesCompilerPass;
1112
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass;
1213
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\DoctrineMongoDBExtension;
@@ -43,6 +44,7 @@ public function build(ContainerBuilder $container)
4344
$container->addCompilerPass(new DoctrineValidationPass('mongodb'));
4445
$container->addCompilerPass(new ServiceRepositoryCompilerPass());
4546
$container->addCompilerPass(new FixturesCompilerPass());
47+
$container->addCompilerPass(new DeprecateChangesClassParametersPass());
4648

4749
if (! $container->hasExtension('security')) {
4850
return;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Doctrine\Bundle\MongoDBBundle\Tests\DependencyInjection\Compiler;
6+
7+
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\DeprecateChangesClassParametersPass;
8+
use PHPUnit\Framework\TestCase;
9+
use stdClass;
10+
use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
11+
use Symfony\Component\DependencyInjection\ContainerBuilder;
12+
13+
final class DeprecateChangesClassParametersPassTest extends TestCase
14+
{
15+
use ExpectDeprecationTrait;
16+
17+
/** @group legacy */
18+
public function testChangeParameterClass(): void
19+
{
20+
$container = new ContainerBuilder();
21+
$container->setParameter('doctrine_mongodb.odm.connection.class', stdClass::class);
22+
23+
$container->addCompilerPass(new DeprecateChangesClassParametersPass());
24+
25+
$this->expectDeprecation('Since doctrine/mongodb-odm-bundle 4.7: "doctrine_mongodb.odm.connection.class" parameter is deprecated, use a compiler pass to update the service instead.');
26+
27+
$container->compile();
28+
}
29+
}

0 commit comments

Comments
 (0)
0