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;
+ }
}
}