From 23df8e26c1b0ab940a77cd04afdad22c344a02f5 Mon Sep 17 00:00:00 2001
From: Benjamin Franzke <bfr@qbus.de>
Date: Tue, 18 Dec 2018 11:34:24 +0100
Subject: [PATCH] [!!!][TASK] Remove deprecated code from Bootstrap

Remove code that is not needed due to the static bootstrap
and PSR-15 refactoring during v9 phase.

All deprecated methods and state is removed from the Bootstrap class,
which includes the Bootstrap instance itself. Bootstrap is provided as
statically invoked utility now.
The Bootstrap instance was deprecated implictly due to the deprecation
of getInstance() (combined with the protected constructor).
We therefore remove the constructor and all (now unused) class properties
and the method-chaining (which was only useful to reduce calls to the
getInstance() method).

Releases: master
Resolves: #87202
Change-Id: Ie97e824294a03d8de88430772fdab4adaf7e3f1f
Reviewed-on: https://review.typo3.org/59196
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
---
 typo3/sysext/core/Classes/Core/Bootstrap.php  | 360 +-----------------
 ...g-87193-DeprecatedFunctionalityRemoved.rst |  21 +-
 .../Php/MethodCallMatcher.php                 |   6 +
 .../Php/MethodCallStaticMatcher.php           |   8 +
 4 files changed, 36 insertions(+), 359 deletions(-)

diff --git a/typo3/sysext/core/Classes/Core/Bootstrap.php b/typo3/sysext/core/Classes/Core/Bootstrap.php
index 9137ce7e5d77..cbdc7c3edcca 100644
--- a/typo3/sysext/core/Classes/Core/Bootstrap.php
+++ b/typo3/sysext/core/Classes/Core/Bootstrap.php
@@ -48,28 +48,6 @@ use TYPO3\PharStreamWrapper\PharStreamWrapper;
  */
 class Bootstrap
 {
-    /**
-     * @var \TYPO3\CMS\Core\Core\Bootstrap
-     */
-    protected static $instance;
-
-    /**
-     * @var array List of early instances
-     */
-    protected $earlyInstances = [];
-
-    /**
-     * @var bool
-     */
-    protected $limbo = false;
-
-    /**
-     * Disable direct creation of this object.
-     */
-    protected function __construct()
-    {
-    }
-
     /**
      * Bootstrap TYPO3 and return a Container that may be used
      * to initialize an Application class.
@@ -123,15 +101,6 @@ class Bootstrap
         $locales = Locales::initialize();
         static::setMemoryLimit();
 
-        // Create (to be deprecated) bootstrap instance with (to be deprecated) early instances
-        static::$instance = new static();
-        static::$instance->earlyInstances = [
-            ClassLoader::class => $classLoader,
-            ConfigurationManager::class => $configurationManager,
-            CacheManager::class => $cacheManager,
-            PackageManager::class => $packageManager,
-        ];
-
         if (!$failsafe) {
             IconRegistry::setCache($assetsCache);
             PageRenderer::setCache($assetsCache);
@@ -230,85 +199,15 @@ class Bootstrap
         };
     }
 
-    /**
-     * @return bool
-     * @deprecated will be removed in TYPO3 v10.0. Use the Environment API instead.
-     */
-    public static function usesComposerClassLoading()
-    {
-        trigger_error('Bootstrap::usesComposerClassLoading() will be removed in TYPO3 v10.0. Use Environment::isComposerMode() instead.', E_USER_DEPRECATED);
-        return Environment::isComposerMode();
-    }
-
-    /**
-     * Disable direct cloning of this object.
-     */
-    protected function __clone()
-    {
-    }
-
-    /**
-     * Return 'this' as singleton
-     *
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     * @deprecated will be removed in TYPO3 v10.0. Use methods directly or create an instance, depending on your use-case.
-     */
-    public static function getInstance()
-    {
-        if (static::$instance === null) {
-            self::$instance = new static();
-            self::$instance->defineTypo3RequestTypes();
-            $requestId = substr(md5(uniqid('', true)), 0, 13);
-            GeneralUtility::setSingletonInstance(LogManager::class, new LogManager($requestId));
-        }
-        return static::$instance;
-    }
-
-    /**
-     * @return ApplicationContext
-     * @internal This is not a public API method, do not use in own extensions
-     * @deprecated will be removed in TYPO3 v10.0.
-     */
-    public static function createApplicationContext(): ApplicationContext
-    {
-        $applicationContext = getenv('TYPO3_CONTEXT') ?: (getenv('REDIRECT_TYPO3_CONTEXT') ?: 'Production');
-
-        return new ApplicationContext($applicationContext);
-    }
-
     /**
      * Prevent any unwanted output that may corrupt AJAX/compression.
      * This does not interfere with "die()" or "echo"+"exit()" messages!
      *
-     * @return Bootstrap|null
      * @internal This is not a public API method, do not use in own extensions
      */
     public static function startOutputBuffering()
     {
         ob_start();
-        return static::$instance;
-    }
-
-    /**
-     * Main entry point called at every request usually from Global scope. Checks if everything is correct,
-     * and loads the Configuration.
-     *
-     * Make sure that the baseSetup() is called before and the class loader is present
-     *
-     * @return Bootstrap
-     * @deprecated will be removed in TYPO3 v10.0. Use init() method instead.
-     */
-    public function configure()
-    {
-        $this->startOutputBuffering()
-            ->loadConfigurationAndInitialize(true, \TYPO3\CMS\Core\Package\PackageManager::class, true)
-            ->loadTypo3LoadedExtAndExtLocalconf(true)
-            ->setFinalCachingFrameworkCacheConfiguration()
-            ->unsetReservedGlobalVariables()
-            ->loadBaseTca()
-            ->checkEncryptionKey();
-        return $this;
     }
 
     /**
@@ -318,7 +217,6 @@ class Bootstrap
      * Script execution will be aborted if something fails here.
      *
      * @param int $entryPointLevel Number of subdirectories where the entry script is located under the document root.
-     * @return Bootstrap
      * @throws \RuntimeException when TYPO3_REQUESTTYPE was not set before, setRequestType() needs to be called before
      * @internal This is not a public API method, do not use in own extensions
      */
@@ -327,21 +225,15 @@ class Bootstrap
         if (!defined('TYPO3_REQUESTTYPE')) {
             throw new \RuntimeException('No Request Type was set, TYPO3 does not know in which context it is run.', 1450561838);
         }
-        // @deprecated: remove this code block in TYPO3 v10.0
-        if (GeneralUtility::getApplicationContext() === null) {
-            SystemEnvironmentBuilder::run($entryPointLevel ?? 0, PHP_SAPI === 'cli' ? SystemEnvironmentBuilder::REQUESTTYPE_CLI : SystemEnvironmentBuilder::REQUESTTYPE_FE);
-        }
         if (!Environment::isComposerMode() && ClassLoadingInformation::isClassLoadingInformationAvailable()) {
             ClassLoadingInformation::registerClassLoadingInformation();
         }
-        return static::$instance;
     }
 
     /**
      * Sets the class loader to the bootstrap
      *
      * @param ClassLoader $classLoader an instance of the class loader
-     * @return Bootstrap
      * @internal This is not a public API method, do not use in own extensions
      */
     public static function initializeClassLoader(ClassLoader $classLoader)
@@ -373,8 +265,6 @@ class Bootstrap
         // Annotations that control the extension scanner
         AnnotationReader::addGlobalIgnoredName('extensionScannerIgnoreFile');
         AnnotationReader::addGlobalIgnoredName('extensionScannerIgnoreLine');
-
-        return static::$instance;
     }
 
     /**
@@ -385,102 +275,12 @@ class Bootstrap
      * @return bool TRUE when the essential configuration is available, otherwise FALSE
      * @internal This is not a public API method, do not use in own extensions
      */
-    protected static function checkIfEssentialConfigurationExists(ConfigurationManager $configurationManager = null): bool
+    protected static function checkIfEssentialConfigurationExists(ConfigurationManager $configurationManager): bool
     {
-        if ($configurationManager === null) {
-            // @deprecated A configurationManager instance needs to be handed into Bootstrap::checkIfEssentialConfigurationExists and will become mandatory in TYPO3 v10.0
-            $configurationManager = new ConfigurationManager;
-            static::$instance->setEarlyInstance(ConfigurationManager::class, $configurationManager);
-        }
         return file_exists($configurationManager->getLocalConfigurationFileLocation())
             && file_exists(Environment::getLegacyConfigPath() . '/PackageStates.php');
     }
 
-    /**
-     * Registers the instance of the specified object for an early boot stage.
-     * On finalizing the Object Manager initialization, all those instances will
-     * be transferred to the Object Manager's registry.
-     *
-     * @param string $objectName Object name, as later used by the Object Manager
-     * @param object $instance The instance to register
-     * @internal This is not a public API method, do not use in own extensions
-     * @deprecated since TYPO3 9.4, will be removed in TYPO3 v10.0 as this concept of early instances is not needed anymore
-     */
-    public function setEarlyInstance($objectName, $instance)
-    {
-        $this->earlyInstances[$objectName] = $instance;
-    }
-
-    /**
-     * Returns an instance which was registered earlier through setEarlyInstance()
-     *
-     * @param string $objectName Object name of the registered instance
-     * @return object
-     * @throws \TYPO3\CMS\Core\Exception
-     * @internal This is not a public API method, do not use in own extensions
-     * @deprecated since TYPO3 9.4, will be removed in TYPO3 v10.0 as this concept of early instances is not needed anymore
-     */
-    public function getEarlyInstance($objectName)
-    {
-        if (!isset($this->earlyInstances[$objectName])) {
-            throw new \TYPO3\CMS\Core\Exception('Unknown early instance "' . $objectName . '"', 1365167380);
-        }
-        return $this->earlyInstances[$objectName];
-    }
-
-    /**
-     * Returns all registered early instances indexed by object name
-     *
-     * @return array
-     * @internal This is not a public API method, do not use in own extensions
-     * @deprecated since TYPO3 9.4, will be removed in TYPO3 v10.0 as this concept of early instances is not needed anymore
-     */
-    public function getEarlyInstances()
-    {
-        trigger_error('Bootstrap->getEarlyInstances() will be removed in TYPO3 v10.0. Use a simple singleton instance instead.', E_USER_DEPRECATED);
-        return $this->earlyInstances;
-    }
-
-    /**
-     * Includes LocalConfiguration.php and sets several
-     * global settings depending on configuration.
-     * For functional and acceptance tests.
-     *
-     * @param bool $allowCaching Whether to allow caching - affects cache_core (autoloader)
-     * @param string $packageManagerClassName Define an alternative package manager implementation (usually for the installer)
-     * @param bool $isInternalCall Set to true by bootstrap, not by extensions
-     * @return Bootstrap|null
-     * @internal This is not a public API method, do not use in own extensions
-     * @deprecated will be set to removed in TYPO3 v10.0.
-     */
-    public static function loadConfigurationAndInitialize(
-        $allowCaching = true,
-        $packageManagerClassName = \TYPO3\CMS\Core\Package\PackageManager::class,
-        $isInternalCall = false
-    ) {
-        if (!$isInternalCall) {
-            // Suppress duplicate deprecation calls
-            trigger_error('Bootstrap::loadConfigurationAndInitialize() will removed in TYPO3 v10.0.', E_USER_DEPRECATED);
-        }
-
-        $configurationManager = static::createConfigurationManager();
-        static::populateLocalConfiguration($configurationManager);
-        static::initializeErrorHandling();
-
-        $cacheManager = static::createCacheManager(!$allowCaching);
-        $packageManager = static::createPackageManager($packageManagerClassName, $cacheManager->getCache('cache_core'));
-
-        GeneralUtility::setSingletonInstance(CacheManager::class, $cacheManager);
-        GeneralUtility::setSingletonInstance(PackageManager::class, $packageManager);
-        ExtensionManagementUtility::setPackageManager($packageManager);
-
-        static::initializeRuntimeActivatedPackagesFromConfiguration($packageManager);
-        static::setDefaultTimezone();
-        Locales::initialize();
-        static::setMemoryLimit();
-        return static::$instance;
-    }
-
     /**
      * Initializes the package system and loads the package configuration and settings
      * provided by the packages.
@@ -501,29 +301,6 @@ class Bootstrap
         return $packageManager;
     }
 
-    /**
-     * Initializes the package system and loads the package configuration and settings
-     * provided by the packages.
-     *
-     * @param string $packageManagerClassName Define an alternative package manager implementation (usually for the installer)
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     * @deprecated since TYPO3 v9.4, will be removed in TYPO3 v10.0. Use createPackageManager instead.
-     */
-    public function initializePackageManagement($packageManagerClassName)
-    {
-        trigger_error('Bootstrap->initializePackageManagement() will be removed in TYPO3 v10.0. Use createPackageManager() instead.', E_USER_DEPRECATED);
-        $packageManager = static::createPackageManager(
-            $packageManagerClassName,
-            GeneralUtility::makeInstance(CacheManager::class)->getCache('cache_core')
-        );
-        GeneralUtility::setSingletonInstance(PackageManager::class, $packageManager);
-        ExtensionManagementUtility::setPackageManager($packageManager);
-        $this->setEarlyInstance(PackageManager::class, $packageManager);
-
-        return $this;
-    }
-
     /**
      * Activates a package during runtime. This is used in AdditionalConfiguration.php
      * to enable extensions under conditions.
@@ -545,7 +322,6 @@ class Bootstrap
      *
      * @param bool $allowCaching
      * @param FrontendInterface $coreCache
-     * @return Bootstrap|null
      * @internal This is not a public API method, do not use in own extensions
      */
     public static function loadTypo3LoadedExtAndExtLocalconf($allowCaching = true, FrontendInterface $coreCache = null)
@@ -554,7 +330,6 @@ class Bootstrap
             $coreCache = $coreCache ?? GeneralUtility::makeInstance(CacheManager::class)->getCache('cache_core');
         }
         ExtensionManagementUtility::loadExtLocalconf($allowCaching, $coreCache);
-        return static::$instance;
     }
 
     /**
@@ -573,35 +348,11 @@ class Bootstrap
      * Since makeInstance relies on the object configuration, we create it here with new instead.
      *
      * @param ConfigurationManager $configurationManager
-     * @return Bootstrap
      * @internal This is not a public API method, do not use in own extensions
      */
-    protected static function populateLocalConfiguration(ConfigurationManager $configurationManager = null)
+    protected static function populateLocalConfiguration(ConfigurationManager $configurationManager)
     {
-        if ($configurationManager === null) {
-            $configurationManager = new ConfigurationManager();
-            static::$instance->setEarlyInstance(ConfigurationManager::class, $configurationManager);
-        }
-
         $configurationManager->exportConfiguration();
-
-        return static::$instance;
-    }
-
-    /**
-     * Set cache_core to null backend, effectively disabling eg. the cache for ext_localconf and PackageManager etc.
-     * Used in unit tests.
-     *
-     * @return Bootstrap|null
-     * @internal This is not a public API method, do not use in own extensions
-     * @deprecated as this workaround is not needed anymore. Will be removed in TYPO3 v10.0.
-     */
-    public static function disableCoreCache()
-    {
-        $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_core']['backend']
-            = \TYPO3\CMS\Core\Cache\Backend\NullBackend::class;
-        unset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_core']['options']);
-        return static::$instance;
     }
 
     /**
@@ -619,23 +370,6 @@ class Bootstrap
         return $cacheManager;
     }
 
-    /**
-     * Initialize caching framework, and re-initializes it (e.g. in the install tool) by recreating the instances
-     * again despite the Singleton instance
-     *
-     * @param bool $allowCaching
-     * @return Bootstrap
-     * @internal This is not a public API method, do not use in own extensions
-     * @deprecated as this workaround is not needed anymore. Will be removed in TYPO3 v10.0.
-     */
-    public function initializeCachingFramework(bool $allowCaching = true)
-    {
-        $cacheManager = static::createCacheManager(!$allowCaching);
-        GeneralUtility::setSingletonInstance(CacheManager::class, $cacheManager);
-        $this->setEarlyInstance(CacheManager::class, $cacheManager);
-        return $this;
-    }
-
     /**
      * Set default timezone
      */
@@ -739,51 +473,11 @@ class Bootstrap
         }
     }
 
-    /**
-     * Define TYPO3_REQUESTTYPE* constants that can be used for developers to see if any context has been hit
-     * also see setRequestType(). Is done at the very beginning so these parameters are always available.
-     *
-     * Note: The definition of TYPO3_REQUEST_TYPE_* constants has been moved to the SystemEnvironmentBuilder
-     * and is included here for backwards compatibility reasons (as Bootstrap::getInstance() is expected
-     * to implicitly define these constants).
-     *
-     * @deprecated with TYPO3 v9.4, will be removed in TYPO3 v10.0, once Bootstrap::getInstance is removed
-     */
-    protected function defineTypo3RequestTypes()
-    {
-        if (defined('TYPO3_REQUESTTYPE_FE')) {
-            return;
-        }
-        define('TYPO3_REQUESTTYPE_FE', 1);
-        define('TYPO3_REQUESTTYPE_BE', 2);
-        define('TYPO3_REQUESTTYPE_CLI', 4);
-        define('TYPO3_REQUESTTYPE_AJAX', 8);
-        define('TYPO3_REQUESTTYPE_INSTALL', 16);
-    }
-
-    /**
-     * Defines the TYPO3_REQUESTTYPE constant so the environment knows which context the request is running.
-     *
-     * @param int $requestType
-     * @throws \RuntimeException if the method was already called during a request
-     * @return Bootstrap
-     * @deprecated with TYPO3 v9.4, will be removed in TYPO3 v10.0, use SystemEnvironmentBuilder instead.
-     */
-    public function setRequestType($requestType)
-    {
-        if (defined('TYPO3_REQUESTTYPE')) {
-            throw new \RuntimeException('TYPO3_REQUESTTYPE has already been set, cannot be called multiple times', 1450561878);
-        }
-        define('TYPO3_REQUESTTYPE', $requestType);
-        return $this;
-    }
-
     /**
      * Extensions may register new caches, so we set the
      * global cache array to the manager again at this point
      *
      * @param CacheManager $cacheManager
-     * @return Bootstrap|null
      * @internal This is not a public API method, do not use in own extensions
      */
     protected static function setFinalCachingFrameworkCacheConfiguration(CacheManager $cacheManager = null)
@@ -792,14 +486,12 @@ class Bootstrap
             $cacheManager = GeneralUtility::makeInstance(CacheManager::class);
         }
         $cacheManager->setCacheConfigurations($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']);
-        return static::$instance;
     }
 
     /**
      * Unsetting reserved global variables:
      * Those are set in "ext:core/ext_tables.php" file:
      *
-     * @return Bootstrap|null
      * @internal This is not a public API method, do not use in own extensions
      */
     public static function unsetReservedGlobalVariables()
@@ -813,7 +505,6 @@ class Bootstrap
         unset($GLOBALS['TBE_MODULES_EXT']);
         unset($GLOBALS['TCA_DESCR']);
         unset($GLOBALS['LOCAL_LANG']);
-        return static::$instance;
     }
 
     /**
@@ -823,7 +514,6 @@ class Bootstrap
      *
      * @param bool $allowCaching True, if loading TCA from cache is allowed
      * @param FrontendInterface $coreCache
-     * @return Bootstrap|null
      * @internal This is not a public API method, do not use in own extensions
      */
     public static function loadBaseTca(bool $allowCaching = true, FrontendInterface $coreCache = null)
@@ -832,7 +522,6 @@ class Bootstrap
             $coreCache = $coreCache ?? GeneralUtility::makeInstance(CacheManager::class)->getCache('cache_core');
         }
         ExtensionManagementUtility::loadBaseTca($allowCaching, $coreCache);
-        return static::$instance;
     }
 
     /**
@@ -855,14 +544,12 @@ class Bootstrap
      * or the according cache file if exists.
      *
      * @param bool $allowCaching True, if reading compiled ext_tables file from cache is allowed
-     * @return Bootstrap|null
      * @internal This is not a public API method, do not use in own extensions
      */
     public static function loadExtTables(bool $allowCaching = true)
     {
         ExtensionManagementUtility::loadExtTables($allowCaching);
         static::runExtTablesPostProcessingHooks();
-        return static::$instance;
     }
 
     /**
@@ -889,7 +576,6 @@ class Bootstrap
      * Initialize the Routing for the TYPO3 Backend
      * Loads all routes registered inside all packages and stores them inside the Router
      *
-     * @return Bootstrap|null
      * @internal This is not a public API method, do not use in own extensions
      */
     public static function initializeBackendRouter()
@@ -940,14 +626,12 @@ class Bootstrap
             $route = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Routing\Route::class, $path, $options);
             $router->addRoute($name, $route);
         }
-        return static::$instance;
     }
 
     /**
      * Initialize backend user object in globals
      *
      * @param string $className usually \TYPO3\CMS\Core\Authentication\BackendUserAuthentication::class but can be used for CLI
-     * @return Bootstrap|null
      * @internal This is not a public API method, do not use in own extensions
      */
     public static function initializeBackendUser($className = \TYPO3\CMS\Core\Authentication\BackendUserAuthentication::class)
@@ -958,7 +642,6 @@ class Bootstrap
         // might trigger code which relies on it. See: #45625
         $GLOBALS['BE_USER'] = $backendUser;
         $backendUser->start();
-        return static::$instance;
     }
 
     /**
@@ -966,18 +649,15 @@ class Bootstrap
      *
      * @internal This is not a public API method, do not use in own extensions
      * @param bool $proceedIfNoUserIsLoggedIn if set to TRUE, no forced redirect to the login page will be done
-     * @return Bootstrap|null
      */
     public static function initializeBackendAuthentication($proceedIfNoUserIsLoggedIn = false)
     {
         $GLOBALS['BE_USER']->backendCheckLogin($proceedIfNoUserIsLoggedIn);
-        return static::$instance;
     }
 
     /**
      * Initialize language object
      *
-     * @return Bootstrap|null
      * @internal This is not a public API method, do not use in own extensions
      */
     public static function initializeLanguageObject()
@@ -985,41 +665,5 @@ class Bootstrap
         /** @var $GLOBALS['LANG'] \TYPO3\CMS\Core\Localization\LanguageService */
         $GLOBALS['LANG'] = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Localization\LanguageService::class);
         $GLOBALS['LANG']->init($GLOBALS['BE_USER']->uc['lang']);
-        return static::$instance;
-    }
-
-    /**
-     * Backwards compatibility for usages of now protected methods
-     *
-     * @param $methodName
-     * @param array $arguments
-     * @throws \Error
-     * @deprecated Will be removed in TYPO3 v10.0
-     * @return mixed
-     */
-    public static function __callStatic($methodName, array $arguments)
-    {
-        switch ($methodName) {
-            case 'checkIfEssentialConfigurationExists':
-            case 'setFinalCachingFrameworkCacheConfiguration':
-            case 'populateLocalConfiguration':
-                return call_user_func_array([self::class, $methodName], $arguments);
-            default:
-                throw new \Error(sprintf('Call to undefined method "%s"', $methodName), 1534156090);
-        }
-    }
-
-    /**
-     * Backwards compatibility for usages of now protected methods
-     *
-     * @param string $methodName
-     * @param array $arguments
-     * @throws \Error
-     * @deprecated Will be removed in TYPO3 v10.0
-     * @return mixed
-     */
-    public function __call($methodName, array $arguments)
-    {
-        return self::__callStatic($methodName, $arguments);
     }
 }
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst
index 13a52d4271ae..efe6a268ff47 100644
--- a/typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst
+++ b/typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst
@@ -57,6 +57,23 @@ The following PHP class methods that have been previously deprecated for v9 have
 * :php:`TYPO3\CMS\Core\Charset\CharsetConverter->parse_charset()`
 * :php:`TYPO3\CMS\Core\Charset\CharsetConverter->utf8_char2byte_pos()`
 * :php:`TYPO3\CMS\Core\Charset\CharsetConverter->utf8_to_entities()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->__construct()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->configure()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->createApplicationContext()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->checkIfEssentialConfigurationExists()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->defineTypo3RequestTypes()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->disableCoreCaches()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->getEarlyInstance()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->getEarlyInstances()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->getInstance()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->initializeCachingFramework()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->initializePackageManagement()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->loadConfigurationAndInitialize()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->populateLocalConfiguration()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->setEarlyInstance()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->setFinalCachingFrameworkCacheConfiguration()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->setRequestType()`
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->usesComposerClassLoading()`
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\Argon2iPasswordHash->getOptions()`
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\Argon2iPasswordHash->setOptions()`
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\BcryptPasswordHash->getOptions()`
@@ -117,8 +134,10 @@ The following PHP static class methods that have been previously deprecated for
 
 The following methods changed signature according to previous deprecations in v9 at the end of the argument list:
 
-* :php:`TYPO3\CMS\Core\Charset\CharsetConverter->conv()` - Fourth argument dropped
 * :php:`TYPO3\CMS\Backend\Utility\BackendUtility::getPagesTSconfig()` - Second and third argument dropped
+* :php:`TYPO3\CMS\Core\Charset\CharsetConverter->conv()` - Fourth argument dropped
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->checkIfEssentialConfigurationExists()` - First argument mandatory
+* :php:`TYPO3\CMS\Core\Core\Bootstrap->populateLocalConfiguration()` - First argument mandatory
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\BlowfishPasswordHash->getHashedPassword()` - Second argument dropped
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\Md5PasswordHash->getHashedPassword()` - Second argument dropped
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\Pbkdf2PasswordHash->getHashedPassword()` - Second argument dropped
diff --git a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
index 79f252f173fa..5252423eb275 100644
--- a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
+++ b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
@@ -3107,6 +3107,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap->setEarlyInstance' => [
@@ -3114,6 +3115,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap->getEarlyInstance' => [
@@ -3121,6 +3123,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap->getEarlyInstances' => [
@@ -3128,6 +3131,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap->initializePackageManagement' => [
@@ -3135,6 +3139,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap->setRequestType' => [
@@ -3142,6 +3147,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->initFEuser' => [
diff --git a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php
index 1ad4c31b617c..2c4ad2ccee2a 100644
--- a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php
+++ b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php
@@ -681,6 +681,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap::getInstance' => [
@@ -688,6 +689,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap::checkIfEssentialConfigurationExists' => [
@@ -695,6 +697,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap::loadConfigurationAndInitialize' => [
@@ -702,6 +705,7 @@ return [
         'maximumNumberOfArguments' => 3,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap::populateLocalConfiguration' => [
@@ -709,6 +713,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap::disableCoreCache' => [
@@ -716,6 +721,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap::initializeCachingFramework' => [
@@ -723,6 +729,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Core\Bootstrap::setFinalCachingFrameworkCacheConfiguration' => [
@@ -730,6 +737,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85821-BootstrapMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\Page\PageGenerator::renderContent' => [
-- 
GitLab