FIX Handle calling Deprecation::notice() before manifests are available

This commit is contained in:
Steve Boyd 2022-10-21 10:08:31 +13:00
parent 421b706a38
commit 897f9906f9
2 changed files with 14 additions and 1 deletions

View File

@ -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];
}

View File

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