[!!!][TASK] Remove various deprecated arguments and methods 40/64840/5
authorBenni Mack <benni@typo3.org>
Mon, 8 Jun 2020 12:50:32 +0000 (14:50 +0200)
committerDaniel Goerz <daniel.goerz@posteo.de>
Thu, 9 Jul 2020 12:38:52 +0000 (14:38 +0200)
This change removes deprecated functionality:

- ReferenceIndex->updateIndex() is now either ProgressListenerInterface or null
- ExtensionManagementUtility->findService() expects an array as third argument
- BasicFileUtility->setFileExtensionPermissions() removed
- GeneralUtility->callUserFunction now expects object or null as third argument
- DataMapper->__construct does not expect $query to be set anymore
- ObjectAccess->setProperty - fourth argument removed

Resolves: #91613
Related: #91473
Releases: master
Change-Id: I39fa30f84201b0ed837f6ac0e6d27e1ddb15376d

16 files changed:
typo3/sysext/core/Classes/Database/ReferenceIndex.php
typo3/sysext/core/Classes/Utility/ExtensionManagementUtility.php
typo3/sysext/core/Classes/Utility/File/BasicFileUtility.php
typo3/sysext/core/Classes/Utility/GeneralUtility.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-91473-DeprecatedFunctionalityRemoved.rst
typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php
typo3/sysext/extbase/Classes/Reflection/ObjectAccess.php
typo3/sysext/extbase/Configuration/Services.yaml
typo3/sysext/extbase/Tests/Functional/Persistence/QueryLocalizedDataTest.php
typo3/sysext/extbase/Tests/UnitDeprecated/Reflection/ObjectAccessTest.php [deleted file]
typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php
typo3/sysext/install/Classes/Updates/ReferenceIndexUpdatedPrerequisite.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/ConstructorArgumentMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodArgumentDroppedStaticMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/lowlevel/Classes/Controller/DatabaseIntegrityController.php

index 8b47890..94f3ca8 100644 (file)
@@ -1063,29 +1063,14 @@ class ReferenceIndex implements LoggerAwareInterface
      * Updating Index (External API)
      *
      * @param bool $testOnly If set, only a test
-     * @param bool|ProgressListenerInterface|null $cli_echo If set, output CLI status - but can now be of type ProgressListenerInterface, which should be used instead.
+     * @param ProgressListenerInterface|null $progressListener If set, the current progress is added to the listener
      * @return array Header and body status content
      */
-    public function updateIndex($testOnly, $cli_echo = null)
+    public function updateIndex($testOnly, ?ProgressListenerInterface $progressListener = null)
     {
-        $progressListener = null;
-        if ($cli_echo instanceof ProgressListenerInterface) {
-            $progressListener = $cli_echo;
-            $cli_echo = null;
-        }
-        if ($cli_echo !== null) {
-            trigger_error('The second argument of ReferenceIndex->updateIndex() will not work in TYPO3 v11 anymore. Use the ProgressListener to show detailed results', E_USER_DEPRECATED);
-        } else {
-            // default value for now
-            $cli_echo = false;
-        }
         $errors = [];
         $tableNames = [];
         $recCount = 0;
-        $headerContent = $testOnly ? 'Reference Index being TESTED (nothing written, remove the "--check" argument)' : 'Reference Index being Updated';
-        if ($cli_echo) {
-            echo '*******************************************' . LF . $headerContent . LF . '*******************************************' . LF;
-        }
         // Traverse all tables:
         $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
         $refIndexConnectionName = empty($GLOBALS['TYPO3_CONF_VARS']['DB']['TableMapping']['sys_refindex'])
@@ -1141,9 +1126,6 @@ class ReferenceIndex implements LoggerAwareInterface
                     if ($progressListener) {
                         $progressListener->log($error, LogLevel::WARNING);
                     }
-                    if ($cli_echo) {
-                        echo $error . LF;
-                    }
                 }
             }
             if ($progressListener) {
@@ -1192,9 +1174,6 @@ class ReferenceIndex implements LoggerAwareInterface
                 if ($progressListener) {
                     $progressListener->log($error, LogLevel::WARNING);
                 }
-                if ($cli_echo) {
-                    echo $error . LF;
-                }
                 if (!$testOnly) {
                     $queryBuilder = $connectionPool->getQueryBuilderForTable('sys_refindex');
                     $queryBuilder->delete('sys_refindex')
@@ -1218,15 +1197,12 @@ class ReferenceIndex implements LoggerAwareInterface
             if ($progressListener) {
                 $progressListener->log($error, LogLevel::WARNING);
             }
-            if ($cli_echo) {
-                echo $error . LF;
-            }
             if (!$testOnly) {
                 $this->removeReferenceIndexDataFromUnusedDatabaseTables($tableNames);
             }
         }
         $errorCount = count($errors);
-        $recordsCheckedString = $recCount . ' records from ' . count($tableNames) . ' tables were checked/updated.' . LF;
+        $recordsCheckedString = $recCount . ' records from ' . count($tableNames) . ' tables were checked/updated.';
         if ($progressListener) {
             if ($errorCount) {
                 $progressListener->log($recordsCheckedString . 'Updates: ' . $errorCount, LogLevel::WARNING);
@@ -1234,14 +1210,11 @@ class ReferenceIndex implements LoggerAwareInterface
                 $progressListener->log($recordsCheckedString . 'Index Integrity was perfect!', LogLevel::INFO);
             }
         }
-        if ($cli_echo) {
-            echo $recordsCheckedString . ($errorCount ? 'Updates: ' . $errorCount : 'Index Integrity was perfect!') . LF;
-        }
         if (!$testOnly) {
             $registry = GeneralUtility::makeInstance(Registry::class);
             $registry->set('core', 'sys_refindex_lastUpdate', $GLOBALS['EXEC_TIME']);
         }
-        return [$headerContent, trim($recordsCheckedString), $errorCount, $errors];
+        return ['resultText' => trim($recordsCheckedString), 'errors' => $errors];
     }
 
     protected function getAmountOfUnusedTablesInReferenceIndex(array $tableNames): int
index 03417cc..66da1d3 100644 (file)
@@ -1108,19 +1108,15 @@ class ExtensionManagementUtility
      *
      * @param string $serviceType Service type
      * @param string $serviceSubType Service sub type
-     * @param mixed $excludeServiceKeys Service keys that should be excluded in the search for a service. Array or comma list.
+     * @param array $excludeServiceKeys Service keys that should be excluded in the search for a service.
      * @return mixed Service info array if a service was found, FALSE otherwise
      */
-    public static function findService($serviceType, $serviceSubType = '', $excludeServiceKeys = [])
+    public static function findService($serviceType, $serviceSubType = '', array $excludeServiceKeys = [])
     {
         $serviceKey = false;
         $serviceInfo = false;
         $priority = 0;
         $quality = 0;
-        if (!is_array($excludeServiceKeys)) {
-            trigger_error('ExtensionManagementUtility::findService() expects the third method argument to be an array instead of a comma-separated string. TYPO3 v11.0 will only support arrays as third argument for $excludeServiceKeys', E_USER_DEPRECATED);
-            $excludeServiceKeys = GeneralUtility::trimExplode(',', $excludeServiceKeys, true);
-        }
         if (is_array($GLOBALS['T3_SERVICES'][$serviceType])) {
             foreach ($GLOBALS['T3_SERVICES'][$serviceType] as $key => $info) {
                 if (in_array($key, $excludeServiceKeys)) {
index 1f70a09..e2399b7 100644 (file)
@@ -51,23 +51,6 @@ class BasicFileUtility
      */
     public $uniquePrecision = 6;
 
-    /**********************************
-     *
-     * Checking functions
-     *
-     **********************************/
-
-    /**
-     * Sets the file permissions, used in DataHandler e.g.
-     *
-     * @param string $allowedFilePermissions
-     * @param string $deniedFilePermissions
-     */
-    public function setFileExtensionPermissions($allowedFilePermissions, $deniedFilePermissions)
-    {
-        trigger_error('BasicFileUtility->setFileExtensionPermissions() serves no purpose anymore. Any usages can be removed, as the FAL API is handling file permissions.', E_USER_DEPRECATED);
-    }
-
     /**
      * Cleans $theDir for slashes in the end of the string and returns the new path, if it exists on the server.
      *
@@ -139,12 +122,6 @@ class BasicFileUtility
         return null;
     }
 
-    /*********************
-     *
-     * Cleaning functions
-     *
-     *********************/
-
     /**
      * Returns a string where any character not matching [.a-zA-Z0-9_-] is substituted by '_'
      * Trailing dots are removed
index 469c681..7e338a0 100644 (file)
@@ -3060,19 +3060,12 @@ class GeneralUtility
      *
      * @param string $funcName Function/Method reference or Closure.
      * @param mixed $params Parameters to be pass along (typically an array) (REFERENCE!)
-     * @param mixed $ref Reference to be passed along (typically "$this" - being a reference to the calling object) (REFERENCE!)
+     * @param object|null $ref Reference to be passed along (typically "$this" - being a reference to the calling object)
      * @return mixed Content from method/function call
      * @throws \InvalidArgumentException
      */
-    public static function callUserFunction($funcName, &$params, &$ref = null)
+    public static function callUserFunction($funcName, &$params, ?object $ref = null)
     {
-        if (!($ref === null || is_object($ref))) {
-            trigger_error(
-                sprintf('Argument "$ref" is of type "%s" which is deprecated since TYPO3 10.3. "$ref" must be of type "object" or null as of version 11.0', gettype($ref)),
-                E_USER_DEPRECATED
-            );
-        }
-
         // Check if we're using a closure and invoke it directly.
         if (is_object($funcName) && is_a($funcName, \Closure::class)) {
             return call_user_func_array($funcName, [&$params, &$ref]);
@@ -3090,19 +3083,16 @@ class GeneralUtility
                     // Call method:
                     $content = call_user_func_array([&$classObj, $parts[1]], [&$params, &$ref]);
                 } else {
-                    $errorMsg = 'No method name \'' . $parts[1] . '\' in class ' . $parts[0];
-                    throw new \InvalidArgumentException($errorMsg, 1294585865);
+                    throw new \InvalidArgumentException('No method name \'' . $parts[1] . '\' in class ' . $parts[0], 1294585865);
                 }
             } else {
-                $errorMsg = 'No class named ' . $parts[0];
-                throw new \InvalidArgumentException($errorMsg, 1294585866);
+                throw new \InvalidArgumentException('No class named ' . $parts[0], 1294585866);
             }
         } elseif (function_exists($funcName)) {
             // It's a function
             $content = call_user_func_array($funcName, [&$params, &$ref]);
         } else {
-            $errorMsg = 'No function named: ' . $funcName;
-            throw new \InvalidArgumentException($errorMsg, 1294585867);
+            throw new \InvalidArgumentException('No function named: ' . $funcName, 1294585867);
         }
         return $content;
     }
index ed099ce..1f2b8a8 100644 (file)
@@ -78,6 +78,7 @@ The following PHP class methods that have been previously deprecated for v10 hav
 - :php:`\TYPO3\CMS\Core\Resource\Index\FileIndexRepository->findBySearchWordInMetaData`
 - :php:`\TYPO3\CMS\Core\Resource\ResourceFactory->getInstance`
 - :php:`\TYPO3\CMS\Core\Resource\ResourceStorage->checkFileAndFolderNameFilters`
+- :php:`\TYPO3\CMS\Core\Utility\BasicFileUtility->setFileExtensionPermissions`
 - :php:`\TYPO3\CMS\Extbase\Mvc\Controller\ActionController->emitBeforeCallActionMethodSignal`
 - :php:`\TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder->setUseCacheHash`
 - :php:`\TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder->getUseCacheHash`
@@ -125,11 +126,18 @@ The following PHP methods have been additionally deprecated and are a no-op now:
 
 The following methods changed signature according to previous deprecations in v10 at the end of the argument list:
 
+- :php:`\TYPO3\CMS\Core\Database\ReferenceIndex->updateIndex` (argument 2 is now either null or ProgressListenerInterface, not boolean anymore)
 - :php:`\TYPO3\CMS\Core\DataHandling\DataHandler->doesRecordExist` (argument 3 is now an integer)
 - :php:`\TYPO3\CMS\Core\DataHandling\DataHandler->recordInfoWithPermissionCheck` (argument 3 is now an integer)
 - :php:`\TYPO3\CMS\Core\Localization\LanguageService->includeLLFile` (arguments 2 and 3 are dropped)
+- :php:`\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::findService` (arguments 3 :php:`$excludeServiceKeys` is now an array)
+- :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::callUserFunction` (arguments 3 no expects an object or null)
 - :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::getUrl` (arguments 2, 3 and 4 are dropped)
 - :php:`\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstanceService` (arguments 3 :php:`$excludeServiceKeys` is now an array)
+- :php:`\TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper->__construct` (argument :php:`$query` is removed)
+- :php:`\TYPO3\CMS\Extbase\Persistence\Reflection\ObjectAccess->setProperty` (argument :php:`$forceDirectAccess` is removed)
+- :php:`\TYPO3\CMS\Extbase\Persistence\Reflection\ObjectAccess->getProperty` (argument :php:`$forceDirectAccess` is removed)
+- :php:`\TYPO3\CMS\Extbase\Persistence\Reflection\ObjectAccess->getPropertyInternal` (argument :php:`$forceDirectAccess` is removed)
 - :php:`\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->__construct`
 
 The following public class properties have been dropped:
index e5baa4a..52969a3 100644 (file)
@@ -97,7 +97,6 @@ class DataMapper
      * @param \TYPO3\CMS\Extbase\Persistence\Generic\QueryFactoryInterface $queryFactory
      * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
      * @param EventDispatcherInterface $eventDispatcher
-     * @param QueryInterface|null $query
      */
     public function __construct(
         ReflectionService $reflectionService,
@@ -106,10 +105,8 @@ class DataMapper
         DataMapFactory $dataMapFactory,
         QueryFactoryInterface $queryFactory,
         ObjectManagerInterface $objectManager,
-        EventDispatcherInterface $eventDispatcher,
-        ?QueryInterface $query = null
+        EventDispatcherInterface $eventDispatcher
     ) {
-        $this->query = $query;
         $this->reflectionService = $reflectionService;
         $this->qomFactory = $qomFactory;
         $this->persistenceSession = $persistenceSession;
@@ -117,14 +114,6 @@ class DataMapper
         $this->queryFactory = $queryFactory;
         $this->objectManager = $objectManager;
         $this->eventDispatcher = $eventDispatcher;
-
-        if ($query !== null) {
-            trigger_error(
-                'Constructor argument $query will be removed in TYPO3 v11.0, use setQuery method instead.',
-                E_USER_DEPRECATED
-            );
-            $this->query = $query;
-        }
     }
 
     /**
index 3750af1..33453a0 100644 (file)
@@ -45,7 +45,6 @@ class ObjectAccess
      * Get a property of a given object.
      * Tries to get the property the following ways:
      * - if the target is an array, and has this property, we call it.
-     * - if super cow powers should be used, fetch value through reflection
      * - if public getter method exists, call it.
      * - if the target object is an instance of ArrayAccess, it gets the property
      * on it if it exists.
@@ -54,13 +53,12 @@ class ObjectAccess
      *
      * @param mixed $subject Object or array to get the property from
      * @param string $propertyName name of the property to retrieve
-     * @param bool $forceDirectAccess directly access property using reflection(!)
      *
      * @throws \InvalidArgumentException in case $subject was not an object or $propertyName was not a string
      * @throws Exception\PropertyNotAccessibleException
      * @return mixed Value of the property
      */
-    public static function getProperty($subject, string $propertyName, bool $forceDirectAccess = false)
+    public static function getProperty($subject, string $propertyName)
     {
         if (!is_object($subject) && !is_array($subject)) {
             throw new \InvalidArgumentException(
@@ -68,8 +66,7 @@ class ObjectAccess
                 1237301367
             );
         }
-
-        return self::getPropertyInternal($subject, $propertyName, $forceDirectAccess);
+        return self::getPropertyInternal($subject, $propertyName);
     }
 
     /**
@@ -81,19 +78,14 @@ class ObjectAccess
      *
      * @param mixed $subject Object or array to get the property from
      * @param string $propertyName name of the property to retrieve
-     * @param bool $forceDirectAccess directly access property using reflection(!)
      *
      * @throws Exception\PropertyNotAccessibleException
      * @return mixed Value of the property
      * @internal
      */
-    public static function getPropertyInternal($subject, string $propertyName, bool $forceDirectAccess = false)
+    public static function getPropertyInternal($subject, string $propertyName)
     {
-        if ($forceDirectAccess === true) {
-            trigger_error('Argument $forceDirectAccess will be removed in TYPO3 11.0', E_USER_DEPRECATED);
-        }
-
-        if (!$forceDirectAccess && ($subject instanceof \SplObjectStorage || $subject instanceof ObjectStorage)) {
+        if ($subject instanceof \SplObjectStorage || $subject instanceof ObjectStorage) {
             $subject = iterator_to_array(clone $subject, false);
         }
 
@@ -114,7 +106,7 @@ class ObjectAccess
         }
 
         if (is_object($subject)) {
-            return self::getObjectPropertyValue($subject, $propertyPath, $forceDirectAccess);
+            return self::getObjectPropertyValue($subject, $propertyPath);
         }
 
         if (is_array($subject)) {
@@ -163,18 +155,13 @@ class ObjectAccess
      * @param mixed $subject The target object or array
      * @param string $propertyName Name of the property to set
      * @param mixed $propertyValue Value of the property
-     * @param bool $forceDirectAccess directly access property using reflection(!)
      *
      * @throws \InvalidArgumentException in case $object was not an object or $propertyName was not a string
      * @return bool TRUE if the property could be set, FALSE otherwise
      */
-    public static function setProperty(&$subject, string $propertyName, $propertyValue, bool $forceDirectAccess = false): bool
+    public static function setProperty(&$subject, string $propertyName, $propertyValue): bool
     {
-        if ($forceDirectAccess === true) {
-            trigger_error('Argument $forceDirectAccess will be removed in TYPO3 11.0', E_USER_DEPRECATED);
-        }
-
-        if (is_array($subject) || ($subject instanceof \ArrayAccess && !$forceDirectAccess)) {
+        if (is_array($subject) || $subject instanceof \ArrayAccess) {
             $subject[$propertyName] = $propertyValue;
             return true;
         }
@@ -187,19 +174,6 @@ class ObjectAccess
             $accessor->setValue($subject, $propertyName, $propertyValue);
             return true;
         }
-
-        if ($forceDirectAccess) {
-            if (property_exists($subject, $propertyName)) {
-                $propertyReflection = new \ReflectionProperty($subject, $propertyName);
-                $propertyReflection->setAccessible(true);
-                $propertyReflection->setValue($subject, $propertyValue);
-            } else {
-                $subject->{$propertyName} = $propertyValue;
-            }
-
-            return true;
-        }
-
         return false;
     }
 
@@ -379,12 +353,10 @@ class ObjectAccess
     /**
      * @param object $subject
      * @param PropertyPath $propertyPath
-     * @param bool $forceDirectAccess
      * @return mixed
      * @throws Exception\PropertyNotAccessibleException
-     * @throws \ReflectionException
      */
-    private static function getObjectPropertyValue(object $subject, PropertyPath $propertyPath, bool $forceDirectAccess)
+    private static function getObjectPropertyValue(object $subject, PropertyPath $propertyPath)
     {
         $accessor = self::createAccessor();
 
@@ -392,19 +364,7 @@ class ObjectAccess
             return $accessor->getValue($subject, $propertyPath);
         }
 
-        $propertyName = (string)$propertyPath;
-
-        if (!$forceDirectAccess) {
-            throw new PropertyNotAccessibleException('The property "' . $propertyName . '" on the subject does not exist.', 1476109666);
-        }
-
-        if (!property_exists($subject, $propertyName)) {
-            throw new PropertyNotAccessibleException('The property "' . $propertyName . '" on the subject does not exist.', 1302855001);
-        }
-
-        $propertyReflection = new \ReflectionProperty($subject, $propertyName);
-        $propertyReflection->setAccessible(true);
-        return $propertyReflection->getValue($subject);
+        throw new PropertyNotAccessibleException('The property "' . (string)$propertyPath . '" on the subject does not exist.', 1476109666);
     }
 
     /**
index 09e460e..c59a214 100644 (file)
@@ -37,8 +37,6 @@ services:
 
   TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper:
     shared: false
-    arguments:
-      $query: null
 
   cache.extbase:
     class: TYPO3\CMS\Core\Cache\Frontend\FrontendInterface
index 8d863ef..3d6b387 100644 (file)
@@ -1200,7 +1200,7 @@ class QueryLocalizedDataTest extends FunctionalTestCase
     }
 
     /**
-     * This is a copy of the ObjectAccess::getPropertyPath, but with third argument of getPropertyInternal set as true,
+     * This is a copy of the ObjectAccess::getPropertyPath, but with the fallback
      * to access protected properties, and iterator_to_array added.
      *
      * @param mixed $subject Object or array to get the property path from
@@ -1213,13 +1213,16 @@ class QueryLocalizedDataTest extends FunctionalTestCase
         $propertyPathSegments = explode('.', $propertyPath);
         try {
             foreach ($propertyPathSegments as $pathSegment) {
-                $subject = ObjectAccess::getPropertyInternal($subject, $pathSegment, true);
+                $subject = ObjectAccess::getPropertyInternal($subject, $pathSegment);
                 if ($subject instanceof \SplObjectStorage || $subject instanceof ObjectStorage) {
                     $subject = iterator_to_array(clone $subject, false);
                 }
             }
         } catch (PropertyNotAccessibleException $error) {
-            return null;
+            // Workaround for this test
+            $propertyReflection = new \ReflectionProperty($subject, $pathSegment);
+            $propertyReflection->setAccessible(true);
+            return $propertyReflection->getValue($subject);
         }
         return $subject;
     }
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Reflection/ObjectAccessTest.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Reflection/ObjectAccessTest.php
deleted file mode 100644 (file)
index 2a81361..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Reflection;
-
-use TYPO3\CMS\Extbase\Reflection\Exception\PropertyNotAccessibleException;
-use TYPO3\CMS\Extbase\Reflection\ObjectAccess;
-use TYPO3\CMS\Extbase\Tests\Unit\Reflection\Fixture\DummyClassWithGettersAndSetters;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class ObjectAccessTest extends UnitTestCase
-{
-    /**
-     * @var bool Reset singletons created by subject
-     */
-    protected $resetSingletonInstances = true;
-
-    /**
-     * @var DummyClassWithGettersAndSetters
-     */
-    protected $dummyObject;
-
-    /**
-     * Set up
-     */
-    protected function setUp(): void
-    {
-        parent::setUp();
-        $this->dummyObject = new DummyClassWithGettersAndSetters();
-        $this->dummyObject->setProperty('string1');
-        $this->dummyObject->setAnotherProperty(42);
-        $this->dummyObject->shouldNotBePickedUp = true;
-    }
-
-    /**
-     * @test
-     */
-    public function getPropertyReturnsExpectedValueForUnexposedPropertyIfForceDirectAccessIsTrue()
-    {
-        $property = ObjectAccess::getProperty($this->dummyObject, 'unexposedProperty', true);
-        self::assertEquals($property, 'unexposed', 'A property of a given object was not returned correctly.');
-    }
-
-    /**
-     * @test
-     */
-    public function getPropertyReturnsExpectedValueForUnknownPropertyIfForceDirectAccessIsTrue()
-    {
-        $this->dummyObject->unknownProperty = 'unknown';
-        $property = ObjectAccess::getProperty($this->dummyObject, 'unknownProperty', true);
-        self::assertEquals($property, 'unknown', 'A property of a given object was not returned correctly.');
-    }
-
-    /**
-     * @test
-     */
-    public function getPropertyThrowsPropertyNotAccessibleExceptionForNotExistingPropertyIfForceDirectAccessIsTrue()
-    {
-        $this->expectException(PropertyNotAccessibleException::class);
-        $this->expectExceptionCode(1302855001);
-        ObjectAccess::getProperty($this->dummyObject, 'notExistingProperty', true);
-    }
-}
index 55bfd26..ab19b78 100644 (file)
@@ -784,7 +784,7 @@ class TypoScriptFrontendController implements LoggerAwareInterface
             } else {
                 $userGroups = [0, -2];
             }
-            $this->context->setAspect('frontend.user', GeneralUtility::makeInstance(UserAspect::class, $this->fe_user ?: null, $userGroups));
+            $this->context->setAspect('frontend.user', GeneralUtility::makeInstance(UserAspect::class, $this->fe_user, $userGroups));
             // Fetching the id again, now with the preview settings reset.
             $this->fetch_the_id($request);
         }
index 4fcb49b..c756601 100644 (file)
@@ -70,7 +70,7 @@ class ReferenceIndexUpdatedPrerequisite implements PrerequisiteInterface, Chatty
         $progressListener->initialize(new SymfonyStyle(new ArrayInput([]), $this->output));
         $this->referenceIndex->enableRuntimeCache();
         $result = $this->referenceIndex->updateIndex(false, $progressListener);
-        return count($result[3]) === 0;
+        return empty($result['errors']);
     }
 
     /**
@@ -82,7 +82,7 @@ class ReferenceIndexUpdatedPrerequisite implements PrerequisiteInterface, Chatty
     {
         $this->referenceIndex->enableRuntimeCache();
         $result = $this->referenceIndex->updateIndex(true);
-        return count($result[3]) === 0;
+        return empty($result['errors']);
     }
 
     /**
index 2266f49..82a156e 100644 (file)
@@ -35,6 +35,7 @@ return [
             'restFiles' => [
                 'Breaking-87305-UseConstructorInjectionInDataMapper.rst',
                 'Deprecation-87305-UseConstructorInjectionInDataMapper.rst',
+                'Breaking-91473-DeprecatedFunctionalityRemoved.rst'
             ],
         ]
     ],
index f766834..e8d367d 100644 (file)
@@ -52,18 +52,21 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-87332-AvoidRuntimeReflectionCallsInObjectAccess.rst',
+            'Breaking-91473-DeprecatedFunctionalityRemoved.rst'
         ],
     ],
     'TYPO3\CMS\Extbase\Reflection\ObjectAccess::getPropertyInternal' => [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-87332-AvoidRuntimeReflectionCallsInObjectAccess.rst',
+            'Breaking-91473-DeprecatedFunctionalityRemoved.rst'
         ],
     ],
     'TYPO3\CMS\Extbase\Reflection\ObjectAccess::setProperty' => [
         'maximumNumberOfArguments' => 3,
         'restFiles' => [
             'Deprecation-87332-AvoidRuntimeReflectionCallsInObjectAccess.rst',
+            'Breaking-91473-DeprecatedFunctionalityRemoved.rst'
         ],
     ],
     'TYPO3\CMS\Core\Utility\GeneralUtility::getUrl' => [
index a635a8c..deca867 100644 (file)
@@ -4416,6 +4416,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Important-90020-LegacyBasicFileUtilityAndExtendedFileUtilityClassesMarkedAsInternal.rst',
+            'Breaking-91473-DeprecatedFunctionalityRemoved.rst'
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Controller\ActionController->emitBeforeCallActionMethodSignal' => [
index e4dbb9f..493dd7e 100644 (file)
@@ -303,7 +303,9 @@ class DatabaseIntegrityController
             $testOnly = (bool)GeneralUtility::_GP('_check');
             $refIndexObj = GeneralUtility::makeInstance(ReferenceIndex::class);
             $refIndexObj->enableRuntimeCache();
-            [, $recordsCheckedString, , $errors] = $refIndexObj->updateIndex($testOnly);
+            $result = $refIndexObj->updateIndex($testOnly);
+            $recordsCheckedString = $result['resultText'];
+            $errors = $result['errors'];
             $flashMessage = GeneralUtility::makeInstance(
                 FlashMessage::class,
                 !empty($errors) ? implode("\n", $errors) : 'Index Integrity was perfect!',