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