Fixing issue where incorrect autoloader unregistered (#1210)

Co-authored-by: Terence Marks <[email protected]>
This commit is contained in:
Terence Marks
2021-04-09 07:54:00 +02:00
committed by GitHub
co-authored by Terence Marks
parent c1ddd30532
commit ca94ffd99a
3 changed files with 48 additions and 8 deletions
+12 -8
View File
@@ -84,7 +84,7 @@ class MetaCommand extends Command
// Needs to run before exception handler is registered
$factories = $this->config->get('ide-helper.include_factory_builders') ? Factories::all() : [];
$this->registerClassAutoloadExceptions();
$ourAutoloader = $this->registerClassAutoloadExceptions();
$bindings = [];
foreach ($this->getAbstracts() as $abstract) {
@@ -106,7 +106,7 @@ class MetaCommand extends Command
}
}
$this->unregisterClassAutoloadExceptions();
$this->unregisterClassAutoloadExceptions($ourAutoloader);
$content = $this->view->make('meta', [
'bindings' => $bindings,
@@ -143,12 +143,16 @@ class MetaCommand extends Command
/**
* Register an autoloader the throws exceptions when a class is not found.
*
* @return callable
*/
protected function registerClassAutoloadExceptions()
protected function registerClassAutoloadExceptions(): callable
{
spl_autoload_register(function ($class) {
$autoloader = function ($class) {
throw new \ReflectionException("Class '$class' not found.");
});
};
spl_autoload_register($autoloader);
return $autoloader;
}
/**
@@ -167,11 +171,11 @@ class MetaCommand extends Command
/**
* Remove our custom autoloader that we pushed onto the autoload stack
*
* @param callable $ourAutoloader
*/
private function unregisterClassAutoloadExceptions()
private function unregisterClassAutoloadExceptions(callable $ourAutoloader): void
{
$autoloadFunctions = spl_autoload_functions();
$ourAutoloader = array_pop($autoloadFunctions);
spl_autoload_unregister($ourAutoloader);
}
}