Merge pull request #10556 from creative-commoners/pulls/4/deprecation-no-manifests

FIX Handle calling Deprecation::notice() before manifests are available
This commit is contained in:
Maxime Rainville 2022-10-21 10:28:40 +13:00 committed by GitHub
commit 25241a98e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 1 deletions

View File

@ -9,6 +9,8 @@ use BadMethodCallException;
*/ */
class InjectorLoader class InjectorLoader
{ {
public const NO_MANIFESTS_AVAILABLE = 'No injector manifests available';
/** /**
* @internal * @internal
* @var self * @var self
@ -42,7 +44,7 @@ class InjectorLoader
); );
} }
if (empty($this->manifests)) { 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]; return $this->manifests[count($this->manifests) - 1];
} }

View File

@ -2,8 +2,11 @@
namespace SilverStripe\Dev; namespace SilverStripe\Dev;
use BadMethodCallException;
use Exception;
use SilverStripe\Control\Director; use SilverStripe\Control\Director;
use SilverStripe\Core\Environment; use SilverStripe\Core\Environment;
use SilverStripe\Core\Injector\InjectorLoader;
use SilverStripe\Core\Manifest\Module; use SilverStripe\Core\Manifest\Module;
/** /**
@ -234,6 +237,14 @@ class Deprecation
} else { } else {
user_error($string, self::$notice_level); 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 { } finally {
static::$inside_notice = false; static::$inside_notice = false;
} }