diff --git a/src/Core/Injector/InjectorLoader.php b/src/Core/Injector/InjectorLoader.php index 54bd6b4b5..4b5a857a5 100644 --- a/src/Core/Injector/InjectorLoader.php +++ b/src/Core/Injector/InjectorLoader.php @@ -9,6 +9,8 @@ use BadMethodCallException; */ class InjectorLoader { + public const NO_MANIFESTS_AVAILABLE = 'No injector manifests available'; + /** * @internal * @var self @@ -42,7 +44,7 @@ class InjectorLoader ); } if (empty($this->manifests)) { - throw new BadMethodCallException("No injector manifests available"); + throw new BadMethodCallException(self::NO_MANIFESTS_AVAILABLE); } return $this->manifests[count($this->manifests) - 1]; } diff --git a/src/Dev/Deprecation.php b/src/Dev/Deprecation.php index acd409470..5a222100e 100644 --- a/src/Dev/Deprecation.php +++ b/src/Dev/Deprecation.php @@ -2,8 +2,11 @@ namespace SilverStripe\Dev; +use BadMethodCallException; +use Exception; use SilverStripe\Control\Director; use SilverStripe\Core\Environment; +use SilverStripe\Core\Injector\InjectorLoader; use SilverStripe\Core\Manifest\Module; /** @@ -234,6 +237,14 @@ class Deprecation } else { user_error($string, self::$notice_level); } + } catch (BadMethodCallException $e) { + if ($e->getMessage() === InjectorLoader::NO_MANIFESTS_AVAILABLE) { + // noop + // this can happen when calling Deprecation::notice() before manifests are available, i.e. + // some of the code involved in creating the manifests calls Deprecation::notice() + } else { + throw $e; + } } finally { static::$inside_notice = false; }