|
11 | 11 |
|
12 | 12 | namespace Symfony\Component\DependencyInjection;
|
13 | 13 |
|
| 14 | +use Composer\InstalledVersions; |
14 | 15 | use Psr\Container\ContainerInterface as PsrContainerInterface;
|
15 | 16 | use Symfony\Component\Config\Resource\ClassExistenceResource;
|
16 | 17 | use Symfony\Component\Config\Resource\ComposerResource;
|
@@ -1467,6 +1468,34 @@ public function log(CompilerPassInterface $pass, string $message)
|
1467 | 1468 | $this->getCompiler()->log($pass, $this->resolveEnvPlaceholders($message));
|
1468 | 1469 | }
|
1469 | 1470 |
|
| 1471 | + /** |
| 1472 | + * Checks whether a class is available and will remain available in the "no-dev" mode of Composer. |
| 1473 | + * |
| 1474 | + * When parent packages are provided and if any of them is in dev-only mode, |
| 1475 | + * the class will be considered available even if it is also in dev-only mode. |
| 1476 | + */ |
| 1477 | + final public static function willBeAvailable(string $package, string $class, array $parentPackages): bool |
| 1478 | + { |
| 1479 | + if (!class_exists($class) && !interface_exists($class, false) && !trait_exists($class, false)) { |
| 1480 | + return false; |
| 1481 | + } |
| 1482 | + |
| 1483 | + if (!class_exists(InstalledVersions::class) || !InstalledVersions::isInstalled($package) || InstalledVersions::isInstalled($package, false)) { |
| 1484 | + return true; |
| 1485 | + } |
| 1486 | + |
| 1487 | + // the package is installed but in dev-mode only, check if this applies to one of the parent packages too |
| 1488 | + |
| 1489 | + $rootPackage = InstalledVersions::getRootPackage()['name'] ?? ''; |
| 1490 | + foreach ($parentPackages as $parentPackage) { |
| 1491 | + if ($rootPackage === $parentPackage || (InstalledVersions::isInstalled($parentPackage) && !InstalledVersions::isInstalled($parentPackage, false))) { |
| 1492 | + return true; |
| 1493 | + } |
| 1494 | + } |
| 1495 | + |
| 1496 | + return false; |
| 1497 | + } |
| 1498 | + |
1470 | 1499 | /**
|
1471 | 1500 | * Gets removed binding ids.
|
1472 | 1501 | *
|
|
0 commit comments