Skip to content

Commit

Permalink
Use compiler pass to deprecate class parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
franmomu committed Dec 16, 2023
1 parent b98e3bf commit 23da11f
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 45 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<?php

declare(strict_types=1);

namespace Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler;

use Doctrine\Bundle\MongoDBBundle\CacheWarmer\HydratorCacheWarmer;
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\PersistentCollectionCacheWarmer;
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\ProxyCacheWarmer;
use Doctrine\Bundle\MongoDBBundle\ManagerConfigurator;
use Doctrine\Bundle\MongoDBBundle\ManagerRegistry;
use Doctrine\Bundle\MongoDBBundle\Mapping\Driver\XmlDriver;
use Doctrine\ODM\MongoDB\Configuration;
use Doctrine\ODM\MongoDB\DocumentManager;
use Doctrine\ODM\MongoDB\Mapping\Driver\AttributeDriver;
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
use MongoDB\Client;
use Symfony\Bridge\Doctrine\ContainerAwareEventManager;
use Symfony\Bridge\Doctrine\Security\User\EntityUserProvider;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator;
use Symfony\Bridge\Doctrine\Validator\DoctrineInitializer;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

use function trigger_deprecation;

/** @internal */
final class DeprecateChangedClassParametersPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container): void
{
foreach (
[
'doctrine_mongodb.odm.connection.class' => Client::class,
'doctrine_mongodb.odm.configuration.class' => Configuration::class,
'doctrine_mongodb.odm.document_manager.class' => DocumentManager::class,
'doctrine_mongodb.odm.manager_configurator.class' => ManagerConfigurator::class,
'doctrine_mongodb.odm.event_manager.class' => ContainerAwareEventManager::class,
'doctrine_odm.mongodb.validator_initializer.class' => DoctrineInitializer::class,
'doctrine_odm.mongodb.validator.unique.class' => UniqueEntityValidator::class,
'doctrine_mongodb.odm.class' => ManagerRegistry::class,
'doctrine_mongodb.odm.security.user.provider.class' => EntityUserProvider::class,
'doctrine_mongodb.odm.proxy_cache_warmer.class' => ProxyCacheWarmer::class,
'doctrine_mongodb.odm.hydrator_cache_warmer.class' => HydratorCacheWarmer::class,
'doctrine_mongodb.odm.persistent_collection_cache_warmer.class' => PersistentCollectionCacheWarmer::class,
] as $parameter => $class
) {
if (! $container->hasParameter($parameter) || $container->getParameter($parameter) === $class) {
continue;
}

trigger_deprecation(
'doctrine/mongodb-odm-bundle',
'4.7',
'"%s" parameter is deprecated, use a compiler pass to update the service instead.',
$parameter,
);
}

foreach (
[
'doctrine_mongodb.odm.cache.array.class' => 'Doctrine\Common\Cache\ArrayCache',
'doctrine_mongodb.odm.cache.apc.class' => 'Doctrine\Common\Cache\ApcCache',
'doctrine_mongodb.odm.cache.apcu.class' => 'Doctrine\Common\Cache\ApcuCache',
'doctrine_mongodb.odm.cache.memcache.class' => 'Doctrine\Common\Cache\MemcacheCache',
'doctrine_mongodb.odm.cache.memcache_host' => 'localhost',
'doctrine_mongodb.odm.cache.memcache_port' => 11211,
'doctrine_mongodb.odm.cache.memcache_instance.class' => 'Memcache',
'doctrine_mongodb.odm.cache.xcache.class' => 'Doctrine\Common\Cache\XcacheCache',
'doctrine_mongodb.odm.metadata.driver_chain.class' => MappingDriverChain::class,
'doctrine_mongodb.odm.metadata.attribute.class' => AttributeDriver::class,
'doctrine_mongodb.odm.metadata.xml.class' => XmlDriver::class,
] as $parameter => $class
) {
if (! $container->hasParameter($parameter) || $container->getParameter($parameter) === $class) {
continue;
}

trigger_deprecation(
'doctrine/mongodb-odm-bundle',
'4.7',
'"%s" parameter is deprecated, this parameter is used internally for configuration.',
$parameter,
);

Check warning on line 84 in DependencyInjection/Compiler/DeprecateChangedClassParametersPass.php

View check run for this annotation

Codecov / codecov/patch

DependencyInjection/Compiler/DeprecateChangedClassParametersPass.php#L79-L84

Added lines #L79 - L84 were not covered by tests
}
}
}
45 changes: 0 additions & 45 deletions DependencyInjection/DoctrineMongoDBExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,21 @@

use Doctrine\Bundle\MongoDBBundle\Attribute\AsDocumentListener;
use Doctrine\Bundle\MongoDBBundle\Attribute\MapDocument;
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\HydratorCacheWarmer;
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\PersistentCollectionCacheWarmer;
use Doctrine\Bundle\MongoDBBundle\CacheWarmer\ProxyCacheWarmer;
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\FixturesCompilerPass;
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass;
use Doctrine\Bundle\MongoDBBundle\EventSubscriber\EventSubscriberInterface;
use Doctrine\Bundle\MongoDBBundle\Fixture\ODMFixtureInterface;
use Doctrine\Bundle\MongoDBBundle\ManagerConfigurator;
use Doctrine\Bundle\MongoDBBundle\ManagerRegistry;
use Doctrine\Bundle\MongoDBBundle\Repository\ServiceDocumentRepositoryInterface;
use Doctrine\Common\Cache\MemcacheCache;
use Doctrine\Common\Cache\RedisCache;
use Doctrine\Common\DataFixtures\Loader as DataFixturesLoader;
use Doctrine\Common\EventSubscriber;
use Doctrine\ODM\MongoDB\Configuration as MongoDBConfiguration;
use Doctrine\ODM\MongoDB\DocumentManager;
use InvalidArgumentException;
use Jean85\PrettyVersions;
use MongoDB\Client;
use Symfony\Bridge\Doctrine\ArgumentResolver\EntityValueResolver;
use Symfony\Bridge\Doctrine\ContainerAwareEventManager;
use Symfony\Bridge\Doctrine\DependencyInjection\AbstractDoctrineExtension;
use Symfony\Bridge\Doctrine\Messenger\DoctrineClearEntityManagerWorkerSubscriber;
use Symfony\Bridge\Doctrine\Security\User\EntityUserProvider;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator;
use Symfony\Bridge\Doctrine\Validator\DoctrineInitializer;
use Symfony\Component\Cache\Adapter\ApcuAdapter;
use Symfony\Component\Cache\Adapter\ArrayAdapter;
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
Expand All @@ -55,7 +44,6 @@
use function in_array;
use function interface_exists;
use function is_dir;
use function method_exists;
use function reset;
use function sprintf;

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

$this->loadEntityValueResolverServices($container, $loader, $config);

$this->deprecateClassParameters($container);
}

/**
Expand Down Expand Up @@ -675,35 +661,4 @@ private static function getODMVersion(): string

return self::$odmVersion;
}

private function deprecateClassParameters(ContainerBuilder $container): void
{
if (! method_exists($container, 'deprecateParameter')) {
return;
}

foreach (
[
'doctrine_mongodb.odm.connection.class' => Client::class,
'doctrine_mongodb.odm.configuration.class' => MongoDBConfiguration::class,
'doctrine_mongodb.odm.document_manager.class' => DocumentManager::class,
'doctrine_mongodb.odm.manager_configurator.class' => ManagerConfigurator::class,
'doctrine_mongodb.odm.event_manager.class' => ContainerAwareEventManager::class,
'doctrine_odm.mongodb.validator_initializer.class' => DoctrineInitializer::class,
'doctrine_odm.mongodb.validator.unique.class' => UniqueEntityValidator::class,
'doctrine_mongodb.odm.class' => ManagerRegistry::class,
'doctrine_mongodb.odm.security.user.provider.class' => EntityUserProvider::class,
'doctrine_mongodb.odm.proxy_cache_warmer.class' => ProxyCacheWarmer::class,
'doctrine_mongodb.odm.hydrator_cache_warmer.class' => HydratorCacheWarmer::class,
'doctrine_mongodb.odm.persistent_collection_cache_warmer.class' => PersistentCollectionCacheWarmer::class,
] as $parameter => $class
) {
$container->deprecateParameter(
$parameter,
'doctrine/mongodb-odm-bundle',
'4.7',
'"%s" parameter is deprecated, you should use a compiler pass to update the service instead.',
);
}
}
}
2 changes: 2 additions & 0 deletions DoctrineMongoDBBundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\CacheCompatibilityPass;
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\CreateHydratorDirectoryPass;
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\CreateProxyDirectoryPass;
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\DeprecateChangedClassParametersPass;
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\FixturesCompilerPass;
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass;
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\DoctrineMongoDBExtension;
Expand Down Expand Up @@ -43,6 +44,7 @@ public function build(ContainerBuilder $container)
$container->addCompilerPass(new DoctrineValidationPass('mongodb'));
$container->addCompilerPass(new ServiceRepositoryCompilerPass());
$container->addCompilerPass(new FixturesCompilerPass());
$container->addCompilerPass(new DeprecateChangedClassParametersPass());

if (! $container->hasExtension('security')) {
return;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace Doctrine\Bundle\MongoDBBundle\Tests\DependencyInjection\Compiler;

use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\DeprecateChangedClassParametersPass;
use PHPUnit\Framework\TestCase;
use stdClass;
use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
use Symfony\Component\DependencyInjection\ContainerBuilder;

final class DeprecateChangesClassParametersPassTest extends TestCase
{
use ExpectDeprecationTrait;

/** @group legacy */
public function testChangeParameterClass(): void
{
$container = new ContainerBuilder();
$container->setParameter('doctrine_mongodb.odm.connection.class', stdClass::class);

$container->addCompilerPass(new DeprecateChangedClassParametersPass());

$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.');

$container->compile();
}
}

0 comments on commit 23da11f

Please sign in to comment.