diff --git a/src/Doctrine/DoctrineDiagnoseExtension.php b/src/Doctrine/DoctrineDiagnoseExtension.php index 0502c736..7e9b91cc 100644 --- a/src/Doctrine/DoctrineDiagnoseExtension.php +++ b/src/Doctrine/DoctrineDiagnoseExtension.php @@ -30,12 +30,22 @@ public function __construct( public function print(Output $output): void { + $objectManager = $this->objectMetadataResolver->getObjectManager(); + $output->writeLineFormatted(sprintf( 'Doctrine\'s objectManagerLoader: %s', $this->objectMetadataResolver->hasObjectManagerLoader() ? 'In use' : 'No', )); - $objectManager = $this->objectMetadataResolver->getObjectManager(); + if ($this->objectMetadataResolver->getLastError() !== null) { + $output->writeLineFormatted(sprintf( + 'Doctrine\'s objectManagerLoader error: %s', + $this->objectMetadataResolver->getLastError()->getMessage(), + )); + + $output->writeLineFormatted(''); + } + if ($objectManager instanceof EntityManagerInterface) { $connection = $objectManager->getConnection(); $driver = $this->driverDetector->detect($connection); diff --git a/src/Type/Doctrine/ObjectMetadataResolver.php b/src/Type/Doctrine/ObjectMetadataResolver.php index 054e9a57..5408b548 100644 --- a/src/Type/Doctrine/ObjectMetadataResolver.php +++ b/src/Type/Doctrine/ObjectMetadataResolver.php @@ -9,6 +9,7 @@ use PHPStan\Doctrine\Mapping\ClassMetadataFactory; use PHPStan\ShouldNotHappenException; use ReflectionException; +use Throwable; use function class_exists; use function is_file; use function is_readable; @@ -26,6 +27,8 @@ final class ObjectMetadataResolver private string $tmpDir; + private ?Throwable $lastError = null; + public function __construct( ?string $objectManagerLoader, string $tmpDir @@ -89,6 +92,11 @@ public function isTransient(string $className): bool } } + public function getLastError(): ?Throwable + { + return $this->lastError; + } + private function getMetadataFactory(): ?ClassMetadataFactory { if ($this->metadataFactory !== null) { @@ -160,7 +168,13 @@ private function loadObjectManager(string $objectManagerLoader): ?ObjectManager )); } - return require $objectManagerLoader; + try { + return require $objectManagerLoader; + } catch (Throwable $error) { + $this->lastError = $error; + + return null; + } } }