diff --git a/Build/UnitTests.xml b/Build/UnitTests.xml deleted file mode 100644 index 9825de0b..00000000 --- a/Build/UnitTests.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - ../Tests/Unit/ - - - - - ../Classes/ - - - ../Classes/Widgets - - - diff --git a/Build/UnitTestsBootstrap.php b/Build/UnitTestsBootstrap.php index d2cd5570..26a03f23 100644 --- a/Build/UnitTestsBootstrap.php +++ b/Build/UnitTestsBootstrap.php @@ -1,5 +1,18 @@ defineSitePath(); - $requestType = \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_BE | \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_CLI; + $requestType = SystemEnvironmentBuilder::REQUESTTYPE_BE | SystemEnvironmentBuilder::REQUESTTYPE_CLI; \TYPO3\TestingFramework\Core\SystemEnvironmentBuilder::run(0, $requestType); - $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3conf/ext'); - $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/assets'); - $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/var/tests'); - $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/var/transient'); + $testbase->createDirectory(Environment::getPublicPath() . '/typo3conf/ext'); + $testbase->createDirectory(Environment::getPublicPath() . '/typo3temp/assets'); + $testbase->createDirectory(Environment::getPublicPath() . '/typo3temp/var/tests'); + $testbase->createDirectory(Environment::getPublicPath() . '/typo3temp/var/transient'); // Retrieve an instance of class loader and inject to core bootstrap $classLoader = require $testbase->getPackagesPath() . '/autoload.php'; - \TYPO3\CMS\Core\Core\Bootstrap::initializeClassLoader($classLoader); + Bootstrap::initializeClassLoader($classLoader); // Initialize default TYPO3_CONF_VARS - $configurationManager = new \TYPO3\CMS\Core\Configuration\ConfigurationManager(); + $configurationManager = new ConfigurationManager(); $GLOBALS['TYPO3_CONF_VARS'] = $configurationManager->getDefaultConfiguration(); - $cache = new \TYPO3\CMS\Core\Cache\Frontend\PhpFrontend( + $cache = new PhpFrontend( 'core', - new \TYPO3\CMS\Core\Cache\Backend\NullBackend('production', []) + new NullBackend('production', []) ); // Set all packages to active - if (interface_exists(\TYPO3\CMS\Core\Package\Cache\PackageCacheInterface::class)) { - $packageManager = \TYPO3\CMS\Core\Core\Bootstrap::createPackageManager(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class, \TYPO3\CMS\Core\Core\Bootstrap::createPackageCache($cache)); + if (interface_exists(PackageCacheInterface::class)) { + $packageManager = Bootstrap::createPackageManager(UnitTestPackageManager::class, Bootstrap::createPackageCache($cache)); } else { // v10 compatibility layer // @deprecated Will be removed when v10 compat is dropped from testing-framework - $packageManager = \TYPO3\CMS\Core\Core\Bootstrap::createPackageManager(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class, $cache); + $packageManager = Bootstrap::createPackageManager(UnitTestPackageManager::class, $cache); } - \TYPO3\CMS\Core\Utility\GeneralUtility::setSingletonInstance(\TYPO3\CMS\Core\Package\PackageManager::class, $packageManager); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::setPackageManager($packageManager); + GeneralUtility::setSingletonInstance(PackageManager::class, $packageManager); + ExtensionManagementUtility::setPackageManager($packageManager); $testbase->dumpClassLoadingInformation(); - \TYPO3\CMS\Core\Utility\GeneralUtility::purgeInstances(); + GeneralUtility::purgeInstances(); })(); diff --git a/Build/phpstan-baseline.neon b/Build/phpstan-baseline.neon index 3cfb689d..1878ea93 100644 --- a/Build/phpstan-baseline.neon +++ b/Build/phpstan-baseline.neon @@ -1,21 +1,5629 @@ parameters: ignoreErrors: - - message: "#^Call to an undefined method Extcode\\\\Cart\\\\Service\\\\PaymentMethodsServiceInterface\\:\\:getConfigurationsForType\\(\\)\\.$#" + message: '#^Parameter \#3 \$view of class Extcode\\Cart\\Event\\View\\ModifyViewEvent constructor expects TYPO3Fluid\\Fluid\\View\\ViewInterface, TYPO3\\CMS\\Core\\View\\ViewInterface given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/ActionController.php + + - + message: '#^Cannot call method getPagePermsClause\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Backend/ActionController.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/Controller/Backend/ActionController.php + + - + message: '#^Parameter \#2 \$perms_clause of static method TYPO3\\CMS\\Backend\\Utility\\BackendUtility\:\:readPageAccess\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/ActionController.php + + - + message: '#^Property Extcode\\Cart\\Controller\\Backend\\ActionController\:\:\$pluginSettings type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Backend/ActionController.php + + - + message: '#^Binary operation "\." between ''attachment;…'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Cannot call method getContents\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Cannot call method getName\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Cannot call method getOriginalResource\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Cannot call method getSize\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Cannot call method toArray\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Parameter \#1 \$array of function end expects array\|object, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Parameter \#1 \$content of method Psr\\Http\\Message\\StreamFactoryInterface\:\:createStream\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/DocumentController.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Binary operation "\." between ''LLL\:EXT\:cart…'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''columns'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''config'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''group'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''icon'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''items'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''label'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''link'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''showLabel'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''status'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''title'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''tx_cart_domain_model_order_payment'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''tx_cart_domain_model_order_shipping'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Cannot access offset ''value'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:dispatchModifyButtonBarEvent\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:getLanguageService\(\) should return TYPO3\\CMS\\Core\\Localization\\LanguageService but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:getPaymentStatus\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:getShippingStatus\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:setDocHeader\(\) has parameter \$buttons with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Parameter \#1 \$href of method TYPO3\\CMS\\Backend\\Template\\Components\\Buttons\\LinkButton\:\:setHref\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Parameter \#1 \$identifier of method TYPO3\\CMS\\Core\\Imaging\\IconFactory\:\:getIcon\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Parameter \#1 \$key of static method TYPO3\\CMS\\Extbase\\Utility\\LocalizationUtility\:\:translate\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Parameter \#1 \$queryResult of class TYPO3\\CMS\\Extbase\\Pagination\\QueryResultPaginator constructor expects TYPO3\\CMS\\Extbase\\Persistence\\QueryResultInterface, array\|TYPO3\\CMS\\Extbase\\Persistence\\QueryResultInterface given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Parameter \#1 \$showLabelText of method TYPO3\\CMS\\Backend\\Template\\Components\\Buttons\\AbstractButton\:\:setShowLabelText\(\) expects bool, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Parameter \#3 \$buttonGroup of method TYPO3\\CMS\\Backend\\Template\\Components\\ButtonBar\:\:addButton\(\) expects int, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Possibly invalid array key type mixed\.$#' + identifier: offsetAccess.invalidOffset + count: 2 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Property Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:\$searchArguments \(array\) does not accept mixed\.$#' + identifier: assign.propertyType + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Property Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:\$searchArguments type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Backend/Order/OrderController.php + + - + message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/PaymentController.php + + - + message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Backend/Order/ShippingController.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Cart/ActionController.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/Controller/Cart/ActionController.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:restoreCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/ActionController.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/ActionController.php + + - + message: '#^Property Extcode\\Cart\\Controller\\Cart\\ActionController\:\:\$configurations type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Cart/ActionController.php + + - + message: '#^Property Extcode\\Cart\\Controller\\Cart\\ActionController\:\:\$payments type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Cart/ActionController.php + + - + message: '#^Property Extcode\\Cart\\Controller\\Cart\\ActionController\:\:\$shippings type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Cart/ActionController.php + + - + message: '#^Property Extcode\\Cart\\Controller\\Cart\\ActionController\:\:\$specials type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Cart/ActionController.php + + - + message: '#^Binary operation "\." between ''billing_address_'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 2 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Binary operation "\." between ''shipping_address_'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 2 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 8 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Cannot access offset ''shippingSameAsBilling'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Cannot access offset ''steps'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 4 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 4 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Parameter \#2 \$messageTitle of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Parameter \#3 \$severity of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects TYPO3\\CMS\\Core\\Type\\ContextualFeedbackSeverity, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CartController.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/CountryController.php + + - + message: '#^Cannot call method getId\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Controller/Cart/CountryController.php + + - + message: '#^Cannot call method isPreset\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Controller/Cart/CountryController.php + + - + message: '#^Parameter \#1 \$cartSettings of method Extcode\\Cart\\Utility\\CartUtility\:\:updateCountry\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CountryController.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CountryController.php + + - + message: '#^Parameter \#1 \$payment of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setPayment\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Controller/Cart/CountryController.php + + - + message: '#^Parameter \#1 \$shipping of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setShipping\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Controller/Cart/CountryController.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Cart/CouponController.php + + - + message: '#^Cannot call method getCode\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/CouponController.php + + - + message: '#^Cannot call method isUseable\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/CouponController.php + + - + message: '#^Parameter \#1 \$className of static method TYPO3\\CMS\\Core\\Utility\\GeneralUtility\:\:makeInstance\(\) expects class\-string\, string given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CouponController.php + + - + message: '#^Parameter \#1 \$coupon of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:addCoupon\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\CartCouponInterface, object given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CouponController.php + + - + message: '#^Parameter \#1 \$couponCode of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:removeCoupon\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CouponController.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Controller/Cart/CouponController.php + + - + message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#' + identifier: argument.type + count: 8 + path: ../Classes/Controller/Cart/CouponController.php + + - + message: '#^Unable to resolve the template type T in call to static method TYPO3\\CMS\\Core\\Utility\\GeneralUtility\:\:makeInstance\(\)$#' + identifier: argument.templateType + count: 1 + path: ../Classes/Controller/Cart/CouponController.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/CurrencyController.php + + - + message: '#^Cannot call method getAttribute\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/CurrencyController.php + + - + message: '#^Cannot call method getPageType\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/CurrencyController.php + + - + message: '#^Parameter \#1 \$cartSettings of method Extcode\\Cart\\Utility\\CurrencyUtility\:\:updateCurrency\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CurrencyController.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/CurrencyController.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 1 path: ../Classes/Controller/Cart/OrderController.php - - message: "#^Call to an undefined method Extcode\\\\Cart\\\\Domain\\\\Model\\\\Cart\\\\CartCouponInterface\\:\\:getTaxClass\\(\\)\\.$#" + message: '#^Binary operation "\." between ''billing_address_'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 2 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Binary operation "\." between ''shipping_address_'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 2 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset ''fields'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset ''options'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 6 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset ''redirects'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset ''success'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset ''url'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset ''validator'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset int on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset string on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot call method getId\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 2 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Cart\\OrderController\:\:setDynamicValidation\(\) has parameter \$validatorConf with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Parameter \#1 \$uri of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:redirectToUri\(\) expects Psr\\Http\\Message\\UriInterface\|string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Parameter \#1 \$validatorType of method TYPO3\\CMS\\Extbase\\Validation\\ValidatorResolver\:\:createValidator\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Parameter \#2 \$propertyName of method Extcode\\Cart\\Controller\\Cart\\OrderController\:\:setDynamicValidation\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Parameter \#2 \$validator of method TYPO3\\CMS\\Extbase\\Validation\\Validator\\AbstractGenericObjectValidator\:\:addPropertyValidator\(\) expects TYPO3\\CMS\\Extbase\\Validation\\Validator\\ValidatorInterface, TYPO3\\CMS\\Extbase\\Validation\\Validator\\ValidatorInterface\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Parameter \#2 \$validatorOptions of method TYPO3\\CMS\\Extbase\\Validation\\ValidatorResolver\:\:createValidator\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/OrderController.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/PaymentController.php + + - + message: '#^Cannot call method getAttribute\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/PaymentController.php + + - + message: '#^Cannot call method getPageType\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/PaymentController.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/PaymentController.php + + - + message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/PaymentController.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Cannot call method getAttribute\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Cannot call method getPageType\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Cannot call method getQuantity\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Cannot call method getSeverity\(\) on TYPO3\\CMS\\Core\\Messaging\\FlashMessage\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Cannot call method toArray\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Cart\\ProductController\:\:addProductsToCart\(\) has parameter \$products with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Cart\\ProductController\:\:getChangedProducts\(\) has parameter \$products with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Cart\\ProductController\:\:getChangedProducts\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Method Extcode\\Cart\\Controller\\Cart\\ProductController\:\:getErrorWithHighestSeverity\(\) should return TYPO3\\CMS\\Core\\Messaging\\FlashMessage but returns TYPO3\\CMS\\Core\\Messaging\\FlashMessage\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Parameter \#1 \$cartProducts of method Extcode\\Cart\\Controller\\Cart\\ProductController\:\:responseForAddAction\(\) expects array\, array given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Parameter \#1 \$json of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:jsonResponse\(\) expects string\|null, string\|false given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Parameter \#1 \$productId of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:removeProductById\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Parameter \#2 \$product of class Extcode\\Cart\\Event\\CheckProductAvailabilityEvent constructor expects Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Possibly invalid array key type mixed\.$#' + identifier: array.invalidKey + count: 2 + path: ../Classes/Controller/Cart/ProductController.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Cart/ShippingController.php + + - + message: '#^Cannot call method getAttribute\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/ShippingController.php + + - + message: '#^Cannot call method getPageType\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Cart/ShippingController.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/ShippingController.php + + - + message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Controller/Cart/ShippingController.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 2 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Cannot access offset ''columns'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Cannot access offset ''config'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Cannot access offset ''items'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Cannot access offset ''label'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Cannot access offset ''status'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Cannot access offset ''tx_cart_domain_model_order_payment'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Cannot access offset ''tx_cart_domain_model_order_shipping'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Cannot access offset ''value'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Cannot call method getUid\(\) on Extcode\\Cart\\Domain\\Model\\FrontendUser\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Parameter \#1 \$key of static method TYPO3\\CMS\\Extbase\\Utility\\LocalizationUtility\:\:translate\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Possibly invalid array key type mixed\.$#' + identifier: offsetAccess.invalidOffset + count: 2 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Property Extcode\\Cart\\Controller\\Order\\OrderController\:\:\$pluginSettings type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Property Extcode\\Cart\\Controller\\Order\\OrderController\:\:\$searchArguments type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Controller/Order/OrderController.php + + - + message: '#^Binary operation "\." between ''tx_cart\.add_to_cart…'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 4 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Binary operation "\." between non\-falsy\-string and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 2 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot access offset ''cart'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot access offset ''jsonResponseForPageTypes'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot call method addProduct\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot call method getAttribute\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot call method getCount\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot call method getGross\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot call method getNet\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot call method getPageType\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Finisher\\Form\\AddToCartFinisher\:\:addProductsToCart\(\) has parameter \$products with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Finisher\\Form\\AddToCartFinisher\:\:getFormValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Finisher\\Form\\AddToCartFinisher\:\:getStatusMessageBody\(\) has parameter \$formValues with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Finisher\\Form\\AddToCartFinisher\:\:getStatusMessageBody\(\) has parameter \$status with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Finisher\\Form\\AddToCartFinisher\:\:getStatusMessageTitle\(\) has parameter \$formValues with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Finisher\\Form\\AddToCartFinisher\:\:getStatusMessageTitle\(\) has parameter \$status with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Parameter \#1 \$cart of method Extcode\\Cart\\Utility\\CartUtility\:\:updateService\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\Cart, Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Parameter \#1 \$content of method TYPO3\\CMS\\Core\\Http\\StreamFactory\:\:createStream\(\) expects string, string\|false given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:restoreCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Parameter \#2 \$cart of class Extcode\\Cart\\Event\\Form\\AddToCartFinisherEvent constructor expects Extcode\\Cart\\Domain\\Model\\Cart\\Cart, Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Parameter \#2 \$cart of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\Cart, Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Parameter \#2 \$haystack of function in_array expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Property Extcode\\Cart\\Domain\\Finisher\\Form\\AddToCartFinisher\:\:\$configurations type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisher.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Finisher\\Form\\AddToCartFinisherInterface\:\:getProductFromForm\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisherInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Finisher\\Form\\AddToCartFinisherInterface\:\:getProductFromForm\(\) has parameter \$formValues with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Finisher/Form/AddToCartFinisherInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\:\:getCart\(\) should return Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart.php + + - + message: '#^Parameter \#1 \$data of function unserialize expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart.php + + - + message: '#^Cannot call method getGross\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/AbstractCartCoupon.php + + - + message: '#^Binary operation "\+" between mixed and int results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Binary operation "\+\=" between \(float\|int\) and mixed results in an error\.$#' + identifier: assignOp.invalid + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Binary operation "\+\=" between float and mixed results in an error\.$#' + identifier: assignOp.invalid + count: 2 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method addBeVariants\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method changeQuantity\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method changeVariantsQuantity\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method getBeVariants\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method getGross\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method getId\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method getNet\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method getQuantity\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method removeBeVariants\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method setQuantity\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Cannot call method toArray\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:addBeVariants\(\) has parameter \$newVariants with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:changeVariantsQuantity\(\) has parameter \$variantQuantityArray with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:getBeVariantById\(\) should return Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface\|null but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:getBeVariants\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:getParentPrice\(\) should return float but returns float\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:getPriceCalculated\(\) should return float but returns float\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:removeBeVariants\(\) has parameter \$beVariantsArray with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Parameter \#1 \$newBeVariant of method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:addBeVariant\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Possibly invalid array key type mixed\.$#' + identifier: array.invalidKey + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Property Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant\:\:\$beVariants type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface\:\:addBeVariants\(\) has parameter \$newVariants with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariantInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface\:\:changeVariantsQuantity\(\) has parameter \$variantQuantityArray with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariantInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface\:\:getBeVariants\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariantInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface\:\:removeBeVariants\(\) has parameter \$beVariantsArray with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariantInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/BeVariantInterface.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Binary operation "\*" between \-1 and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Binary operation "\+\=" between \(float\|int\) and mixed results in an error\.$#' + identifier: assignOp.invalid + count: 3 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Binary operation "\+\=" between mixed and float results in an error\.$#' + identifier: assignOp.invalid + count: 2 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Binary operation "\+\=" between mixed and mixed results in an error\.$#' + identifier: assignOp.invalid + count: 2 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Binary operation "\-\=" between mixed and float results in an error\.$#' + identifier: assignOp.invalid + count: 2 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Binary operation "\-\=" between mixed and mixed results in an error\.$#' + identifier: assignOp.invalid + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Cannot access offset ''tax'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Cannot access offset ''taxClassId'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 6 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:__construct\(\) has parameter \$taxClasses with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:changeProductsQuantity\(\) has parameter \$productQuantityArray with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getCouponTaxes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getCoupons\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getDiscountTaxes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getServiceTaxes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getSpecials\(\) should return array\ but returns array\\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getSubtotalTaxes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getTaxClass\(\) should return Extcode\\Cart\\Domain\\Model\\Cart\\TaxClass but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getTaxClasses\(\) should return array\ but returns array\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getTaxes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:getTotalTaxes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:removeProduct\(\) has parameter \$productVariantIds with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:removeProductByIds\(\) has parameter \$products with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:toJson\(\) should return string but returns string\|false\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Parameter \#1 \$key of function array_key_exists expects int\|string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Parameter \#1 \$newQuantity of method Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\:\:changeQuantity\(\) expects int, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Parameter \#1 \$variantsArray of method Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\:\:removeBeVariants\(\) expects array\, array given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Parameter \#2 \$productVariantIds of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:removeProduct\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Possibly invalid array key type mixed\.$#' + identifier: offsetAccess.invalidOffset + count: 7 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Property Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:\$taxes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Cart.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\CartCouponFix\:\:getTranslatedDiscount\(\) should return float but returns float\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/CartCouponFix.php + + - + message: '#^Binary operation "\*" between mixed and float results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/Domain/Model/Cart/CartCouponPercentage.php + + - + message: '#^Binary operation "\-\=" between float and mixed results in an error\.$#' + identifier: assignOp.invalid + count: 1 + path: ../Classes/Domain/Model/Cart/CartCouponPercentage.php + + - + message: '#^Cannot call method getGross\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/CartCouponPercentage.php + + - + message: '#^Cannot call method getTaxes\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/CartCouponPercentage.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\CartCouponPercentage\:\:getTaxes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/CartCouponPercentage.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\CartCouponPercentage\:\:getTranslatedDiscount\(\) should return float but returns float\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/CartCouponPercentage.php + + - + message: '#^Binary operation "\*" between float and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 4 + path: ../Classes/Domain/Model/Cart/Extra.php + + - + message: '#^Cannot call method getCart\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 4 + path: ../Classes/Domain/Model/Cart/Extra.php + + - + message: '#^Cannot call method getTaxClass\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 10 + path: ../Classes/Domain/Model/Cart/Extra.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Extra\:\:getTax\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Extra.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Extra\:\:getTaxClassDistributionOverCart\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Extra.php + + - + message: '#^Cannot access offset ''sku'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Model/Cart/FeVariant.php + + - + message: '#^Cannot access offset ''title'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Model/Cart/FeVariant.php + + - + message: '#^Cannot access offset ''value'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Model/Cart/FeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\FeVariant\:\:__construct\(\) has parameter \$variantData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/FeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\FeVariant\:\:getVariantData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/FeVariant.php + + - + message: '#^Parameter \#1 \$string of function sha1 expects string, string\|false given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/FeVariant.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\FeVariantFactory\:\:create\(\) has parameter \$variantData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/FeVariantFactory.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\FeVariantFactoryInterface\:\:create\(\) has parameter \$variantData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/FeVariantFactoryInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\FeVariantInterface\:\:getVariantData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/FeVariantInterface.php + + - + message: '#^Cannot access offset ''price'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Cannot access offset ''quantity'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Cannot call method removeProduct\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Cannot call method setQuantity\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Product\:\:changeQuantities\(\) has parameter \$newQuantities with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Product\:\:changeVariantsQuantity\(\) has parameter \$variantQuantity with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Product\:\:getQuantityDiscountPrice\(\) should return float but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Product\:\:getQuantityDiscounts\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Product\:\:getTranslatedPrice\(\) should return float but returns float\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Product\:\:setQuantityDiscounts\(\) has parameter \$quantityDiscounts with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Product\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Product\:\:toJson\(\) should return string but returns string\|false\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Property Extcode\\Cart\\Domain\\Model\\Cart\\Product\:\:\$quantityDiscounts type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\:\:changeQuantities\(\) has parameter \$newQuantities with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/ProductInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\:\:changeVariantsQuantity\(\) has parameter \$variantQuantity with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/ProductInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\:\:getQuantityDiscounts\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/ProductInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\:\:setQuantityDiscounts\(\) has parameter \$quantityDiscounts with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/ProductInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/ProductInterface.php + + - + message: '#^Cannot access offset ''from'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Cannot access offset ''until'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Cannot call method getCalc\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\TaxClass\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Cannot cast mixed to float\.$#' + identifier: cast.double + count: 9 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 7 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:__construct\(\) has parameter \$config with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getConfig\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getExtra\(\) should return Extcode\\Cart\\Domain\\Model\\Cart\\Extra but returns Extcode\\Cart\\Domain\\Model\\Cart\\Extra\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getGross\(\) should return float but returns float\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getName\(\) should return string but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getNet\(\) should return float but returns float\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getProcessOrderCreateEvent\(\) should return string but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getProvider\(\) should return string but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getStatus\(\) should return string but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getTax\(\) should return float but returns float\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getTaxClass\(\) should return Extcode\\Cart\\Domain\\Model\\Cart\\TaxClass but returns Extcode\\Cart\\Domain\\Model\\Cart\\TaxClass\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getTaxes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Parameter \#1 \$extraType of method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:getConditionValueFromCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Parameter \#1 \$price of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:translatePrice\(\) expects float\|null, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Parameter \#6 \$extraType of class Extcode\\Cart\\Domain\\Model\\Cart\\Extra constructor expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/Service.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceFactory\:\:getService\(\) has parameter \$serviceConfig with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/ServiceFactory.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\:\:__construct\(\) has parameter \$config with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/ServiceInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\:\:getConfig\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/ServiceInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\:\:getTaxes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/ServiceInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\:\:setCart\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: ../Classes/Domain/Model/Cart/ServiceInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\:\:setPreset\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: ../Classes/Domain/Model/Cart/ServiceInterface.php + + - + message: '#^Cannot cast mixed to float\.$#' + identifier: cast.double + count: 1 + path: ../Classes/Domain/Model/Cart/TaxClassFactory.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\TaxClassFactory\:\:getTaxClass\(\) has parameter \$taxClassValue with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/TaxClassFactory.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\TaxClassFactory\:\:isValidTaxClassConfig\(\) has parameter \$value with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/TaxClassFactory.php + + - + message: '#^Parameter \#2 \$value of class Extcode\\Cart\\Domain\\Model\\Cart\\TaxClass constructor expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/TaxClassFactory.php + + - + message: '#^Parameter \#4 \$title of class Extcode\\Cart\\Domain\\Model\\Cart\\TaxClass constructor expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Cart/TaxClassFactory.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Cart\\TaxClassFactoryInterface\:\:getTaxClass\(\) has parameter \$taxClassValue with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Cart/TaxClassFactoryInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AbstractAddress\:\:getAdditional\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/AbstractAddress.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AbstractAddress\:\:getAdditional\(\) should return array but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/AbstractAddress.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AbstractAddress\:\:getItem\(\) should return Extcode\\Cart\\Domain\\Model\\Order\\Item\|null but returns Extcode\\Cart\\Domain\\Model\\Order\\Item\|TYPO3\\CMS\\Extbase\\Persistence\\Generic\\LazyLoadingProxy\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/AbstractAddress.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AbstractAddress\:\:setAdditional\(\) has parameter \$additional with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/AbstractAddress.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AbstractAddress\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/AbstractAddress.php + + - + message: '#^Property Extcode\\Cart\\Domain\\Model\\Order\\AbstractAddress\:\:\$additional \(string\) does not accept string\|false\.$#' + identifier: assign.propertyType + count: 1 + path: ../Classes/Domain/Model/Order/AbstractAddress.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AbstractService\:\:getItem\(\) should return Extcode\\Cart\\Domain\\Model\\Order\\Item\|null but returns Extcode\\Cart\\Domain\\Model\\Order\\Item\|TYPO3\\CMS\\Extbase\\Persistence\\Generic\\LazyLoadingProxy\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/AbstractService.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AbstractService\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/AbstractService.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AddressInterface\:\:getAdditional\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/AddressInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AddressInterface\:\:setAdditional\(\) has parameter \$additional with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/AddressInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\AddressInterface\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/AddressInterface.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Discount\:\:getItem\(\) should return Extcode\\Cart\\Domain\\Model\\Order\\Item\|null but returns Extcode\\Cart\\Domain\\Model\\Order\\Item\|TYPO3\\CMS\\Extbase\\Persistence\\Generic\\LazyLoadingProxy\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/Discount.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Item\:\:addTotalTax\(\) has parameter \$tax with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Classes/Domain/Model/Order/Item.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Item\:\:getAdditional\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/Item.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Item\:\:getAdditional\(\) should return array but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/Item.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Item\:\:removeTotalTax\(\) has parameter \$tax with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Classes/Domain/Model/Order/Item.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Item\:\:setAdditional\(\) has parameter \$additional with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/Item.php + + - + message: '#^Parameter \#1 \$object of method TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage\\:\:attach\(\) expects Extcode\\Cart\\Domain\\Model\\Order\\Tax, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Order/Item.php + + - + message: '#^Parameter \#1 \$object of method TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage\\:\:detach\(\) expects Extcode\\Cart\\Domain\\Model\\Order\\Tax, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Model/Order/Item.php + + - + message: '#^Property Extcode\\Cart\\Domain\\Model\\Order\\Item\:\:\$additional \(string\) does not accept string\|false\.$#' + identifier: assign.propertyType + count: 1 + path: ../Classes/Domain/Model/Order/Item.php + + - + message: '#^Cannot call method attach\(\) on TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage\\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Order/Payment.php + + - + message: '#^Cannot call method detach\(\) on TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage\\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Domain/Model/Order/Payment.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Payment\:\:getTransactions\(\) should return TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage\ but returns TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage\\|null\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/Payment.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Payment\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/Payment.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Product\:\:getAdditional\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Product\:\:getAdditional\(\) should return array but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Product\:\:getItem\(\) should return Extcode\\Cart\\Domain\\Model\\Order\\Item\|null but returns Extcode\\Cart\\Domain\\Model\\Order\\Item\|TYPO3\\CMS\\Extbase\\Persistence\\Generic\\LazyLoadingProxy\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Product\:\:setAdditional\(\) has parameter \$additional with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/Product.php + + - + message: '#^Property Extcode\\Cart\\Domain\\Model\\Order\\Product\:\:\$additional \(string\) does not accept string\|false\.$#' + identifier: assign.propertyType + count: 1 + path: ../Classes/Domain/Model/Order/Product.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\ProductAdditional\:\:getAdditional\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/ProductAdditional.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\ProductAdditional\:\:getAdditional\(\) should return array but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/ProductAdditional.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\ProductAdditional\:\:setAdditional\(\) has parameter \$additional with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/ProductAdditional.php + + - + message: '#^Property Extcode\\Cart\\Domain\\Model\\Order\\ProductAdditional\:\:\$additional \(string\) does not accept string\|false\.$#' + identifier: assign.propertyType + count: 1 + path: ../Classes/Domain/Model/Order/ProductAdditional.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\TaxClass\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Model/Order/TaxClass.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Model\\Order\\Transaction\:\:getTxnId\(\) should return string but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Domain/Model/Order/Transaction.php + + - + message: '#^Property Extcode\\Cart\\Domain\\Model\\Order\\Transaction\:\:\$txnId has no type specified\.$#' + identifier: missingType.property + count: 1 + path: ../Classes/Domain/Model/Order/Transaction.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\CartRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/CartRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\CouponRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/CouponRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\FrontendUserGroupRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/FrontendUserGroupRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\FrontendUserRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/FrontendUserRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\BillingAddressRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/BillingAddressRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\DiscountRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/DiscountRepository.php + + - + message: '#^Binary operation "\." between ''%%'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 3 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 4 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\ItemRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ItemRepository\:\:findAll\(\) has parameter \$searchArguments with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ItemRepository\:\:findAll\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ItemRepository\:\:findAll\(\) return type has no value type specified in iterable type array\|TYPO3\\CMS\\Extbase\\Persistence\\QueryResultInterface\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ItemRepository\:\:findAll\(\) return type with generic interface TYPO3\\CMS\\Extbase\\Persistence\\QueryResultInterface does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ItemRepository\:\:getFilterConstraints\(\) has parameter \$query with generic interface TYPO3\\CMS\\Extbase\\Persistence\\QueryInterface but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ItemRepository\:\:getFilterConstraints\(\) has parameter \$searchArguments with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ItemRepository\:\:getFilterConstraints\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Parameter \#1 \.\.\.\$constraints of method TYPO3\\CMS\\Extbase\\Persistence\\QueryInterface\\:\:logicalAnd\(\) expects TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Qom\\ConstraintInterface, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Parameter \#2 \$operand of method TYPO3\\CMS\\Extbase\\Persistence\\QueryInterface\\:\:like\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Domain/Repository/Order/ItemRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\PaymentRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/PaymentRepository.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 2 + path: ../Classes/Domain/Repository/Order/ProductAdditionalRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\ProductAdditionalRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ProductAdditionalRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ProductAdditionalRepository\:\:findAllByAdditionalType\(\) has parameter \$arguments with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ProductAdditionalRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ProductAdditionalRepository\:\:findAllByAdditionalType\(\) return type with generic interface TYPO3\\CMS\\Extbase\\Persistence\\QueryResultInterface does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ProductAdditionalRepository.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 2 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\ProductRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ProductRepository\:\:findAll\(\) has parameter \$searchArguments with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ProductRepository\:\:findAll\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ProductRepository\:\:findAll\(\) return type has no value type specified in iterable type array\|TYPO3\\CMS\\Extbase\\Persistence\\QueryResultInterface\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ProductRepository\:\:findAll\(\) return type with generic interface TYPO3\\CMS\\Extbase\\Persistence\\QueryResultInterface does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ProductRepository\:\:getFilterConstraints\(\) has parameter \$query with generic interface TYPO3\\CMS\\Extbase\\Persistence\\QueryInterface but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ProductRepository\:\:getFilterConstraints\(\) has parameter \$searchArguments with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Method Extcode\\Cart\\Domain\\Repository\\Order\\ProductRepository\:\:getFilterConstraints\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Parameter \#1 \.\.\.\$constraints of method TYPO3\\CMS\\Extbase\\Persistence\\QueryInterface\\:\:logicalAnd\(\) expects TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Qom\\ConstraintInterface, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Repository/Order/ProductRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\ShippingAddressRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ShippingAddressRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\ShippingRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/ShippingRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\TaxClassRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/TaxClassRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\TaxRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/TaxRepository.php + + - + message: '#^Class Extcode\\Cart\\Domain\\Repository\\Order\\TransactionRepository extends generic class TYPO3\\CMS\\Extbase\\Persistence\\Repository but does not specify its types\: T$#' + identifier: missingType.generics + count: 1 + path: ../Classes/Domain/Repository/Order/TransactionRepository.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Classes/Domain/Validator/OrderItemValidator.php + + - + message: '#^Cannot access offset ''name'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Validator/OrderItemValidator.php + + - + message: '#^Cannot access offset ''size'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Validator/OrderItemValidator.php + + - + message: '#^Cannot access offset ''tmp_name'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Validator/OrderItemValidator.php + + - + message: '#^Cannot access offset ''type'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Validator/OrderItemValidator.php + + - + message: '#^Cannot access offset 0 on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Domain/Validator/OrderItemValidator.php + + - + message: '#^Parameter \#1 \$object of method Extcode\\Cart\\Domain\\Validator\\OrderItemValidator\:\:getPropertyValue\(\) expects object, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Domain/Validator/OrderItemValidator.php + + - + message: '#^Property TYPO3\\CMS\\Extbase\\Validation\\Validator\\AbstractGenericObjectValidator\:\:\$propertyValidators \(array\&SplObjectStorage\>\) does not accept array\&SplObjectStorage\)\|SplObjectStorage\\>\.$#' + identifier: assign.propertyType + count: 1 + path: ../Classes/Domain/Validator/OrderItemValidator.php + + - + message: '#^Method Extcode\\Cart\\Event\\Cart\\UpdateCurrencyEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Cart/UpdateCurrencyEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Cart\\UpdateCurrencyEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Cart/UpdateCurrencyEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Cart\\UpdateCurrencyEventInterface\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Cart/UpdateCurrencyEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Cart\\UpdateCurrencyEventInterface\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Cart/UpdateCurrencyEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\CheckProductAvailabilityEvent\:\:getQuantity\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: ../Classes/Event/CheckProductAvailabilityEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\CheckProductAvailabilityEventInterface\:\:__construct\(\) has parameter \$quantity with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Classes/Event/CheckProductAvailabilityEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\CheckProductAvailabilityEventInterface\:\:getQuantity\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: ../Classes/Event/CheckProductAvailabilityEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Form\\AddToCartFinisherEvent\:\:__construct\(\) has parameter \$formValues with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Form/AddToCartFinisherEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Form\\AddToCartFinisherEvent\:\:getCartProducts\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Form/AddToCartFinisherEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Form\\AddToCartFinisherEvent\:\:getErrors\(\) should return array\ but returns array\.$#' + identifier: return.type + count: 1 + path: ../Classes/Event/Form/AddToCartFinisherEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Form\\AddToCartFinisherEvent\:\:getFormValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Form/AddToCartFinisherEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Form\\AddToCartFinisherEvent\:\:setCartProducts\(\) has parameter \$cartProducts with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Form/AddToCartFinisherEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Form\\AddToCartFinisherEvent\:\:setErrors\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Form/AddToCartFinisherEvent.php + + - + message: '#^Property Extcode\\Cart\\Event\\Form\\AddToCartFinisherEvent\:\:\$cartProducts \(array\\) does not accept array\.$#' + identifier: assign.propertyType + count: 1 + path: ../Classes/Event/Form/AddToCartFinisherEvent.php + + - + message: '#^Property Extcode\\Cart\\Event\\Form\\AddToCartFinisherEvent\:\:\$errors type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Form/AddToCartFinisherEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Mail\\AttachmentEvent\:\:getAttachments\(\) should return array\ but returns array\.$#' + identifier: return.type + count: 1 + path: ../Classes/Event/Mail/AttachmentEvent.php + + - + message: '#^Property Extcode\\Cart\\Event\\Mail\\AttachmentEvent\:\:\$attachments type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Mail/AttachmentEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\CreateEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/CreateEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\CreateEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/CreateEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\CreateEvent\:\:setSettings\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/CreateEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\EventInterface\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/EventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\EventInterface\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/EventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\FinishEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/FinishEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\FinishEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/FinishEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\FinishEvent\:\:setSettings\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/FinishEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\NumberGeneratorEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/NumberGeneratorEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\NumberGeneratorEvent\:\:getOnlyGenerateNumberOfType\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/NumberGeneratorEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\NumberGeneratorEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/NumberGeneratorEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\NumberGeneratorEvent\:\:setOnlyGenerateNumberOfType\(\) has parameter \$onlyGenerateNumberOfType with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/NumberGeneratorEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\NumberGeneratorEvent\:\:setSettings\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/NumberGeneratorEvent.php + + - + message: '#^Property Extcode\\Cart\\Event\\Order\\NumberGeneratorEvent\:\:\$onlyGenerateNumberOfType type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/NumberGeneratorEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\NumberGeneratorEventInterface\:\:getOnlyGenerateNumberOfType\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/NumberGeneratorEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\NumberGeneratorEventInterface\:\:setOnlyGenerateNumberOfType\(\) has parameter \$onlyGenerateNumberOfType with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/NumberGeneratorEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PaymentEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PaymentEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PaymentEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PaymentEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PaymentEvent\:\:setSettings\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PaymentEvent.php + + - + message: '#^Cannot access offset ''order'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Event/Order/PersistOrderEvent.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Event/Order/PersistOrderEvent.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/Event/Order/PersistOrderEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PersistOrderEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PersistOrderEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PersistOrderEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PersistOrderEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PersistOrderEvent\:\:getTaxClasses\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PersistOrderEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PersistOrderEvent\:\:setSettings\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PersistOrderEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PersistOrderEvent\:\:setTaxClasses\(\) has parameter \$taxClasses with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PersistOrderEvent.php + + - + message: '#^Property Extcode\\Cart\\Event\\Order\\PersistOrderEvent\:\:\$taxClasses type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PersistOrderEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PersistOrderEventInterface\:\:getTaxClasses\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PersistOrderEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PersistOrderEventInterface\:\:setSettings\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PersistOrderEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\PersistOrderEventInterface\:\:setTaxClasses\(\) has parameter \$taxClasses with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/PersistOrderEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\StockEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/StockEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\StockEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/StockEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Order\\StockEvent\:\:setSettings\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Order/StockEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\ProcessOrderCreateEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/ProcessOrderCreateEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\ProcessOrderCreateEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/ProcessOrderCreateEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\ProcessOrderCreateEvent\:\:setSettings\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/ProcessOrderCreateEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\RetrieveProductsFromRequestEvent\:\:getProducts\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/RetrieveProductsFromRequestEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\RetrieveProductsFromRequestEvent\:\:setErrors\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/RetrieveProductsFromRequestEvent.php + + - + message: '#^Property Extcode\\Cart\\Event\\RetrieveProductsFromRequestEvent\:\:\$errors \(array\\) does not accept array\.$#' + identifier: assign.propertyType + count: 1 + path: ../Classes/Event/RetrieveProductsFromRequestEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\RetrieveProductsFromRequestEventInterface\:\:getErrors\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/RetrieveProductsFromRequestEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\RetrieveProductsFromRequestEventInterface\:\:getProducts\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/RetrieveProductsFromRequestEventInterface.php + + - + message: '#^Method Extcode\\Cart\\Event\\Template\\Components\\ModifyButtonBarEvent\:\:__construct\(\) has parameter \$searchArguments with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Template/Components/ModifyButtonBarEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Template\\Components\\ModifyButtonBarEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Template/Components/ModifyButtonBarEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Template\\Components\\ModifyButtonBarEvent\:\:getButtons\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Template/Components/ModifyButtonBarEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Template\\Components\\ModifyButtonBarEvent\:\:getSearchArguments\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Template/Components/ModifyButtonBarEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Template\\Components\\ModifyButtonBarEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Template/Components/ModifyButtonBarEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Template\\Components\\ModifyButtonBarEvent\:\:setButtons\(\) has parameter \$buttons with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Template/Components/ModifyButtonBarEvent.php + + - + message: '#^Property Extcode\\Cart\\Event\\Template\\Components\\ModifyButtonBarEvent\:\:\$buttons type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Template/Components/ModifyButtonBarEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Template\\Components\\ModifyModuleTemplateEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Template/Components/ModifyModuleTemplateEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\Template\\Components\\ModifyModuleTemplateEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/Template/Components/ModifyModuleTemplateEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\View\\ModifyViewEvent\:\:__construct\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/View/ModifyViewEvent.php + + - + message: '#^Method Extcode\\Cart\\Event\\View\\ModifyViewEvent\:\:getSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Event/View/ModifyViewEvent.php + + - + message: '#^Parameter \#1 \$billingCountry of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setBillingCountry\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Cart/UpdateCountry.php + + - + message: '#^Parameter \#1 \$shippingCountry of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setShippingCountry\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Cart/UpdateCountry.php + + - + message: '#^Cannot access offset ''sign'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Cart/UpdateCurrency.php + + - + message: '#^Cannot access offset ''translation'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Cart/UpdateCurrency.php + + - + message: '#^Cannot access offset int\\|int\<1, max\> on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/EventListener/Cart/UpdateCurrency.php + + - + message: '#^Cannot cast mixed to float\.$#' + identifier: cast.double + count: 1 + path: ../Classes/EventListener/Cart/UpdateCurrency.php + + - + message: '#^Method Extcode\\Cart\\EventListener\\Cart\\UpdateCurrency\:\:getCurrencyConfigId\(\) has parameter \$currencyOptions with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/EventListener/Cart/UpdateCurrency.php + + - + message: '#^Parameter \#1 \$currencyCode of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setCurrencyCode\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Cart/UpdateCurrency.php + + - + message: '#^Parameter \#1 \$currencyCode of method Extcode\\Cart\\EventListener\\Cart\\UpdateCurrency\:\:getCurrencyConfigId\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Cart/UpdateCurrency.php + + - + message: '#^Parameter \#1 \$currencySign of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setCurrencySign\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Cart/UpdateCurrency.php + + - + message: '#^Parameter \#2 \$currencyOptions of method Extcode\\Cart\\EventListener\\Cart\\UpdateCurrency\:\:getCurrencyConfigId\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Cart/UpdateCurrency.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromOrderItem.php + + - + message: '#^Call to an undefined method object\:\:getOriginalResource\(\)\.$#' + identifier: method.notFound + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromOrderItem.php + + - + message: '#^Cannot access offset ''attachDocuments'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromOrderItem.php + + - + message: '#^Cannot access offset string on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromOrderItem.php + + - + message: '#^Cannot call method getForLocalProcessing\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromOrderItem.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromOrderItem.php + + - + message: '#^Parameter \#1 \$attachment of method Extcode\\Cart\\Event\\Mail\\AttachmentEvent\:\:addAttachment\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromOrderItem.php + + - + message: '#^Parameter \#1 \$filename of function is_file expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromOrderItem.php + + - + message: '#^Property Extcode\\Cart\\EventListener\\Mail\\AttachmentFromOrderItem\:\:\$settings type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromOrderItem.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromTypoScript.php + + - + message: '#^Cannot access offset ''attachments'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromTypoScript.php + + - + message: '#^Cannot access offset string on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromTypoScript.php + + - + message: '#^Parameter \#1 \$fileName of static method TYPO3\\CMS\\Core\\Utility\\GeneralUtility\:\:getFileAbsFileName\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromTypoScript.php + + - + message: '#^Property Extcode\\Cart\\EventListener\\Mail\\AttachmentFromTypoScript\:\:\$settings type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/EventListener/Mail/AttachmentFromTypoScript.php + + - + message: '#^Binary operation "\+" between mixed and 1 results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/EventListener/Order/Create/Number.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/EventListener/Order/Create/Number.php + + - + message: '#^Method Extcode\\Cart\\EventListener\\Order\\Create\\Number\:\:__construct\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/EventListener/Order/Create/Number.php + + - + message: '#^Parameter \#1 \$format of function sprintf expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/Number.php + + - + message: '#^Parameter \#1 \$orderId of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setOrderId\(\) expects int, int\<1, max\>\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/OrderNumber.php + + - + message: '#^Parameter \#1 \$orderNumber of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setOrderNumber\(\) expects string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/OrderNumber.php + + - + message: '#^Cannot call method getCode\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/EventListener/Order/Create/PersistOrder/Coupons.php + + - + message: '#^Cannot call method getGross\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Coupons.php + + - + message: '#^Cannot call method getNet\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Coupons.php + + - + message: '#^Cannot call method getTax\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Coupons.php + + - + message: '#^Cannot call method getTaxClass\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Coupons.php + + - + message: '#^Cannot call method getTitle\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Coupons.php + + - + message: '#^Cannot call method isUseable\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Coupons.php + + - + message: '#^Parameter \#1 \$pid of method TYPO3\\CMS\\Extbase\\DomainObject\\AbstractDomainObject\:\:setPid\(\) expects int\<0, max\>, int given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Coupons.php + + - + message: '#^Cannot access offset ''currency'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Item.php + + - + message: '#^Cannot access offset ''currencySign'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Item.php + + - + message: '#^Cannot access offset ''format'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Item.php + + - + message: '#^Parameter \#1 \$currency of method Extcode\\Cart\\Domain\\Model\\Order\\Item\:\:setCurrency\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Item.php + + - + message: '#^Parameter \#1 \$feUser of method Extcode\\Cart\\Domain\\Model\\Order\\Item\:\:setFeUser\(\) expects Extcode\\Cart\\Domain\\Model\\FrontendUser, TYPO3\\CMS\\Extbase\\DomainObject\\DomainObjectInterface given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Item.php + + - + message: '#^Parameter \#1 \$object of method TYPO3\\CMS\\Extbase\\Persistence\\Repository\\:\:add\(\) expects TYPO3\\CMS\\Extbase\\DomainObject\\DomainObjectInterface, Extcode\\Cart\\Domain\\Model\\Order\\AddressInterface given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/EventListener/Order/Create/PersistOrder/Item.php + + - + message: '#^Parameter \#1 \$pid of method TYPO3\\CMS\\Extbase\\DomainObject\\AbstractDomainObject\:\:setPid\(\) expects int\<0, max\>, int given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Item.php + + - + message: '#^Parameter \#1 \$uid of method TYPO3\\CMS\\Extbase\\Persistence\\Repository\\:\:findByUid\(\) expects int, array\|bool\|int\|string given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Item.php + + - + message: '#^Cannot call method getGross\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Cannot call method getId\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Cannot call method getName\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Cannot call method getNet\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Cannot call method getStatus\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Cannot call method getTax\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Cannot call method getTaxClass\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Parameter \#1 \$note of method Extcode\\Cart\\Domain\\Model\\Order\\AbstractService\:\:setNote\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Parameter \#1 \$object_or_class of function method_exists expects object\|string, Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Parameter \#1 \$pid of method TYPO3\\CMS\\Extbase\\DomainObject\\AbstractDomainObject\:\:setPid\(\) expects int\<0, max\>, int given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Parameter \#1 \$taxClass of method Extcode\\Cart\\Domain\\Model\\Order\\AbstractService\:\:setTaxClass\(\) expects Extcode\\Cart\\Domain\\Model\\Order\\TaxClass, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Payment.php + + - + message: '#^Call to an undefined method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface\|Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\:\:getCompleteSku\(\)\.$#' + identifier: method.notFound + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Call to an undefined method Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface\|Extcode\\Cart\\Domain\\Model\\Cart\\ProductInterface\:\:getParent\(\)\.$#' + identifier: method.notFound + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Cannot call method getBeVariants\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Method Extcode\\Cart\\EventListener\\Order\\Create\\PersistOrder\\Products\:\:addProductAdditional\(\) has parameter \$feVariant with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Parameter \#1 \$pid of method TYPO3\\CMS\\Extbase\\DomainObject\\AbstractDomainObject\:\:setPid\(\) expects int\<0, max\>, int given\.$#' + identifier: argument.type + count: 4 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Parameter \#1 \$taxClass of method Extcode\\Cart\\Domain\\Model\\Order\\Product\:\:setTaxClass\(\) expects Extcode\\Cart\\Domain\\Model\\Order\\TaxClass, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Parameter \#1 \$variant of method Extcode\\Cart\\EventListener\\Order\\Create\\PersistOrder\\Products\:\:addBeVariant\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Parameter \#1 \$variant of method Extcode\\Cart\\EventListener\\Order\\Create\\PersistOrder\\Products\:\:addVariantsOfVariant\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\BeVariantInterface, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Parameter \#3 \$feVariant of method Extcode\\Cart\\EventListener\\Order\\Create\\PersistOrder\\Products\:\:addProductAdditional\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Property Extcode\\Cart\\EventListener\\Order\\Create\\PersistOrder\\Products\:\:\$taxClasses type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Products.php + + - + message: '#^Cannot call method getGross\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Cannot call method getId\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Cannot call method getName\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Cannot call method getNet\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Cannot call method getStatus\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Cannot call method getTax\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Cannot call method getTaxClass\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Parameter \#1 \$note of method Extcode\\Cart\\Domain\\Model\\Order\\AbstractService\:\:setNote\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Parameter \#1 \$object_or_class of function method_exists expects object\|string, Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Parameter \#1 \$pid of method TYPO3\\CMS\\Extbase\\DomainObject\\AbstractDomainObject\:\:setPid\(\) expects int\<0, max\>, int given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Parameter \#1 \$taxClass of method Extcode\\Cart\\Domain\\Model\\Order\\AbstractService\:\:setTaxClass\(\) expects Extcode\\Cart\\Domain\\Model\\Order\\TaxClass, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Shipping.php + + - + message: '#^Parameter \#1 \$pid of method TYPO3\\CMS\\Extbase\\DomainObject\\AbstractDomainObject\:\:setPid\(\) expects int\<0, max\>, int given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/TaxClasses.php + + - + message: '#^Parameter \#1 \$pid of method TYPO3\\CMS\\Extbase\\DomainObject\\AbstractDomainObject\:\:setPid\(\) expects int\<0, max\>, int given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Create/PersistOrder/Taxes.php + + - + message: '#^Binary operation "\." between ''billing_address_'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/EventListener/Order/Finish/ClearCart.php + + - + message: '#^Binary operation "\." between ''shipping_address_'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/EventListener/Order/Finish/ClearCart.php + + - + message: '#^Cannot access offset ''cart'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Order/Finish/ClearCart.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Order/Finish/ClearCart.php + + - + message: '#^Cannot access offset ''preventClearCart'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Order/Finish/ClearCart.php + + - + message: '#^Cannot access offset int on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/EventListener/Order/Finish/ClearCart.php + + - + message: '#^Cannot call method getId\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Finish/ClearCart.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/EventListener/Order/Finish/ClearCart.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/EventListener/Order/Finish/ClearCart.php + + - + message: '#^Cannot call method getServiceId\(\) on Extcode\\Cart\\Domain\\Model\\Order\\Payment\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Order/Finish/Email.php + + - + message: '#^Parameter \#1 \$object_or_class of function method_exists expects object\|string, Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/EventListener/Order/Finish/Email.php + + - + message: '#^Cannot call method current\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/EventListener/Template/Components/ModifyButtonBar.php + + - + message: '#^Method Extcode\\Cart\\EventListener\\Template\\Components\\ModifyButtonBar\:\:getDocumentButtons\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/EventListener/Template/Components/ModifyButtonBar.php + + - + message: '#^Cannot access an offset on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Hooks/FormDefinitions.php + + - + message: '#^Cannot access offset ''itemsProcFuncConfig'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Hooks/FormDefinitions.php + + - + message: '#^Cannot access offset ''name'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Hooks/FormDefinitions.php + + - + message: '#^Cannot access offset ''persistenceIdentifier'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Hooks/FormDefinitions.php + + - + message: '#^Method Extcode\\Cart\\Hooks\\FormDefinitions\:\:getFormSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Hooks/FormDefinitions.php + + - + message: '#^Method Extcode\\Cart\\Hooks\\FormDefinitions\:\:getItems\(\) has parameter \$config with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Hooks/FormDefinitions.php + + - + message: '#^Method TYPO3\\CMS\\Form\\Mvc\\Persistence\\FormPersistenceManagerInterface\:\:listForms\(\) invoked with 1 parameter, 2 required\.$#' + identifier: arguments.count + count: 1 + path: ../Classes/Hooks/FormDefinitions.php + + - + message: '#^Parameter \#1 \$persistenceIdentifier of method TYPO3\\CMS\\Form\\Mvc\\Persistence\\FormPersistenceManagerInterface\:\:load\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Hooks/FormDefinitions.php + + - + message: '#^Parameter \#3 \$request of method TYPO3\\CMS\\Form\\Mvc\\Persistence\\FormPersistenceManagerInterface\:\:load\(\) expects Psr\\Http\\Message\\ServerRequestInterface\|null, array given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Hooks/FormDefinitions.php + + - + message: '#^Cannot access offset ''colPos'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Cannot access offset ''extKey'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Cannot access offset ''pid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Cannot access offset ''pluginName'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Cannot access offset 0 on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Cannot access offset 1 on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 2 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Method Extcode\\Cart\\Hooks\\ItemsProcFunc\:\:getLanguageService\(\) should return TYPO3\\CMS\\Core\\Localization\\LanguageService but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Method Extcode\\Cart\\Hooks\\ItemsProcFunc\:\:getPageId\(\) should return int but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Method Extcode\\Cart\\Hooks\\ItemsProcFunc\:\:reduceTemplateLayouts\(\) has parameter \$templateLayouts with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Method Extcode\\Cart\\Hooks\\ItemsProcFunc\:\:reduceTemplateLayouts\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Method Extcode\\Cart\\Hooks\\ItemsProcFunc\:\:user_templateLayout\(\) has parameter \$config with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Offset ''pid'' might not exist on array\|null\.$#' + identifier: offsetAccess.notFound + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Parameter \#1 \$array of function array_push expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Parameter \#1 \$input of method TYPO3\\CMS\\Core\\Localization\\LanguageService\:\:sL\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Parameter \#1 \$pid of method Extcode\\Cart\\Hooks\\ItemsProcFunc\:\:getPageId\(\) expects int, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Parameter \#2 \$currentColPos of method Extcode\\Cart\\Hooks\\ItemsProcFunc\:\:reduceTemplateLayouts\(\) expects int, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Parameter \#2 \$extKey of method Extcode\\Cart\\Utility\\TemplateLayout\:\:getAvailableTemplateLayouts\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Parameter \#2 \$string of static method TYPO3\\CMS\\Core\\Utility\\GeneralUtility\:\:intExplode\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Parameter \#3 \$pluginName of method Extcode\\Cart\\Utility\\TemplateLayout\:\:getAvailableTemplateLayouts\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Hooks/ItemsProcFunc.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Cannot access offset ''code'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Cannot access offset ''countries'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 4 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Cannot access offset ''options'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Cannot access offset ''preset'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Cannot access offset ''settings'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Cannot access offset ''zones'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Cannot access offset mixed on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:getConfigurationsForType\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:getConfigurationsForType\(\) should return array\|null but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:getServices\(\) has parameter \$configurations with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:getServices\(\) has parameter \$services with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:getServices\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:getTypeZonesPluginSettings\(\) has parameter \$zoneSettings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:getTypeZonesPluginSettings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:getTypeZonesPluginSettings\(\) should return array but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Parameter \#1 \$serviceKey of method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceFactory\:\:getService\(\) expects int, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Parameter \#2 \$country of method Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:getTypeZonesPluginSettings\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Parameter \#2 \$serviceConfig of method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceFactory\:\:getService\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Parameter \#2 \$string of static method TYPO3\\CMS\\Core\\Utility\\GeneralUtility\:\:trimExplode\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Possibly invalid array key type mixed\.$#' + identifier: offsetAccess.invalidOffset + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Property Extcode\\Cart\\Service\\AbstractConfigurationFromTypoScriptService\:\:\$configurations type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/AbstractConfigurationFromTypoScriptService.php + + - + message: '#^Cannot access offset ''bccAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''buyer'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 10 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''ccAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''emailBccAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''emailCcAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''emailFromAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''emailFromName'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''emailReplyToAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''emailToAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''fromAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''fromName'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''replyToAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''seller'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 10 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot access offset ''toAddress'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot call method getEmail\(\) on Extcode\\Cart\\Domain\\Model\\Order\\AddressInterface\|null\.$#' + identifier: method.nonObject + count: 4 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Cannot call method getStatus\(\) on Extcode\\Cart\\Domain\\Model\\Order\\Payment\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$buyerEmailBcc of method Extcode\\Cart\\Service\\MailHandler\:\:setBuyerEmailBcc\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$buyerEmailCc of method Extcode\\Cart\\Service\\MailHandler\:\:setBuyerEmailCc\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$buyerEmailReplyTo of method Extcode\\Cart\\Service\\MailHandler\:\:setBuyerEmailReplyTo\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$email of method Extcode\\Cart\\Service\\MailHandler\:\:setBuyerEmailFrom\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$email of method Extcode\\Cart\\Service\\MailHandler\:\:setSellerEmailFrom\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$email of method Extcode\\Cart\\Service\\MailHandler\:\:setSellerEmailTo\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$name of method Extcode\\Cart\\Service\\MailHandler\:\:setBuyerEmailName\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$name of method Extcode\\Cart\\Service\\MailHandler\:\:setSellerEmailName\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$sellerEmailBcc of method Extcode\\Cart\\Service\\MailHandler\:\:setSellerEmailBcc\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Parameter \#1 \$sellerEmailCc of method Extcode\\Cart\\Service\\MailHandler\:\:setSellerEmailCc\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Property Extcode\\Cart\\Service\\MailHandler\:\:\$pluginSettings type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/MailHandler.php + + - + message: '#^Method Extcode\\Cart\\Service\\OrderItemCleanupService\:\:deleteRecordsFromTable\(\) has parameter \$recordUids with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/OrderItemCleanupService.php + + - + message: '#^Method Extcode\\Cart\\Service\\OrderItemCleanupService\:\:getRecordUidsToDelete\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/OrderItemCleanupService.php + + - + message: '#^Method Extcode\\Cart\\Service\\PaymentMethodsFromTypoScriptService\:\:getPaymentMethods\(\) should return array\ but returns array\.$#' + identifier: return.type + count: 1 + path: ../Classes/Service/PaymentMethodsFromTypoScriptService.php + + - + message: '#^Binary operation "\." between mixed and string results in an error\.$#' + identifier: binaryOp.invalid + count: 5 + path: ../Classes/Service/SessionHandler.php + + - + message: '#^Cannot call method getAttribute\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Service/SessionHandler.php + + - + message: '#^Property Extcode\\Cart\\Service\\SessionHandler\:\:\$frontendUserAuthentication \(TYPO3\\CMS\\Frontend\\Authentication\\FrontendUserAuthentication\) does not accept mixed\.$#' + identifier: assign.propertyType + count: 1 + path: ../Classes/Service/SessionHandler.php + + - + message: '#^Property Extcode\\Cart\\Service\\SessionHandler\:\:\$prefixKey has no type specified\.$#' + identifier: missingType.property + count: 1 + path: ../Classes/Service/SessionHandler.php + + - + message: '#^Method Extcode\\Cart\\Service\\ShippingMethodsFromTypoScriptService\:\:getShippingMethods\(\) should return array\ but returns array\.$#' + identifier: return.type + count: 1 + path: ../Classes/Service/ShippingMethodsFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\SpecialOptionsFromTypoScriptService\:\:getSpecialOptions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/SpecialOptionsFromTypoScriptService.php + + - + message: '#^Method Extcode\\Cart\\Service\\SpecialOptionsServiceInterface\:\:getSpecialOptions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/SpecialOptionsServiceInterface.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Classes/Service/TaxClassService.php + + - + message: '#^Parameter \#1 \$key of function array_key_exists expects int\|string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Service/TaxClassService.php + + - + message: '#^Parameter \#1 \$taxClassKey of method Extcode\\Cart\\Domain\\Model\\Cart\\TaxClassFactoryInterface\:\:getTaxClass\(\) expects int, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Service/TaxClassService.php + + - + message: '#^Parameter \#2 \$array of function array_key_exists expects array, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Service/TaxClassService.php + + - + message: '#^Parameter \#2 \$taxClassValue of method Extcode\\Cart\\Domain\\Model\\Cart\\TaxClassFactoryInterface\:\:getTaxClass\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Service/TaxClassService.php + + - + message: '#^Possibly invalid array key type mixed\.$#' + identifier: offsetAccess.invalidOffset + count: 1 + path: ../Classes/Service/TaxClassService.php + + - + message: '#^Property Extcode\\Cart\\Service\\TaxClassService\:\:\$settings type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Service/TaxClassService.php + + - + message: '#^Cannot access offset ''cart'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot access offset ''code'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot access offset ''countries'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot access offset ''currencies'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot access offset ''isNetCart'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot access offset ''options'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot access offset ''preset'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot access offset mixed on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot call method getFallBackId\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot call method getId\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot call method isAvailable\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot call method setCart\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot cast mixed to float\.$#' + identifier: cast.double + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Method Extcode\\Cart\\Utility\\CartUtility\:\:getNewCart\(\) has parameter \$configurations with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Method Extcode\\Cart\\Utility\\CartUtility\:\:getServiceById\(\) has parameter \$services with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Method Extcode\\Cart\\Utility\\CartUtility\:\:updateCountry\(\) has parameter \$cartSettings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Method Extcode\\Cart\\Utility\\CartUtility\:\:updateCountry\(\) has parameter \$pluginSettings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Parameter \#1 \$billingCountry of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setBillingCountry\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Parameter \#1 \$cart of class Extcode\\Cart\\Event\\Cart\\UpdateCountryEvent constructor expects Extcode\\Cart\\Domain\\Model\\Cart\\Cart, Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Parameter \#1 \$countryCode of method Extcode\\Cart\\Service\\TaxClassServiceInterface\:\:getTaxClasses\(\) expects string\|null, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:restoreCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Parameter \#1 \$payment of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setPayment\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Parameter \#1 \$shipping of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setShipping\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Parameter \#1 \$shippingCountry of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setShippingCountry\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Parameter \#2 \$serviceId of method Extcode\\Cart\\Utility\\CartUtility\:\:getServiceById\(\) expects int, int\|null given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/Utility/CartUtility.php + + - + message: '#^Cannot access offset ''currencies'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/Utility/CurrencyUtility.php + + - + message: '#^Method Extcode\\Cart\\Utility\\CurrencyUtility\:\:updateCurrency\(\) has parameter \$cartSettings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Utility/CurrencyUtility.php + + - + message: '#^Method Extcode\\Cart\\Utility\\CurrencyUtility\:\:updateCurrency\(\) has parameter \$pluginSettings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Utility/CurrencyUtility.php + + - + message: '#^Parameter \#1 \$cart of class Extcode\\Cart\\Event\\Cart\\UpdateCurrencyEvent constructor expects Extcode\\Cart\\Domain\\Model\\Cart\\Cart, Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|null given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CurrencyUtility.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:restoreCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CurrencyUtility.php + + - + message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CurrencyUtility.php + + - + message: '#^Parameter \#3 \$settings of class Extcode\\Cart\\Event\\Cart\\UpdateCurrencyEvent constructor expects array, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/CurrencyUtility.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 1 + path: ../Classes/Utility/EvalPrice.php + + - + message: '#^Method Extcode\\Cart\\Utility\\EvalPrice\:\:evaluateFieldValue\(\) has parameter \$is_in with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Classes/Utility/EvalPrice.php + + - + message: '#^Method Extcode\\Cart\\Utility\\EvalPrice\:\:evaluateFieldValue\(\) has parameter \$set with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Classes/Utility/EvalPrice.php + + - + message: '#^Method Extcode\\Cart\\Utility\\EvalPrice\:\:evaluateFieldValue\(\) has parameter \$value with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Classes/Utility/EvalPrice.php + + - + message: '#^Method Extcode\\Cart\\Utility\\EvalPrice\:\:evaluateFieldValue\(\) should return string but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Utility/EvalPrice.php + + - + message: '#^Cannot access offset ''EXT'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Utility/TemplateLayout.php + + - + message: '#^Cannot access offset ''templateLayouts'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Utility/TemplateLayout.php + + - + message: '#^Cannot access offset ''templateLayouts\.'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Utility/TemplateLayout.php + + - + message: '#^Cannot access offset non\-falsy\-string on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Utility/TemplateLayout.php + + - + message: '#^Cannot access offset string on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Classes/Utility/TemplateLayout.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 1 + path: ../Classes/Utility/TemplateLayout.php + + - + message: '#^Method Extcode\\Cart\\Utility\\TemplateLayout\:\:getAvailableTemplateLayouts\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Utility/TemplateLayout.php + + - + message: '#^Method Extcode\\Cart\\Utility\\TemplateLayout\:\:getTemplateLayoutsFromTsConfig\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Utility/TemplateLayout.php + + - + message: '#^Parameter \#2 \$string of static method TYPO3\\CMS\\Core\\Utility\\GeneralUtility\:\:trimExplode\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Utility/TemplateLayout.php + + - + message: '#^Binary operation "\." between ''Globals BE_USER was…'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/Utility/Typo3GlobalsUtility.php + + - + message: '#^Method Extcode\\Cart\\ViewHelpers\\AdditionalJsonViewHelper\:\:getValue\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/ViewHelpers/AdditionalJsonViewHelper.php + + - + message: '#^Method Extcode\\Cart\\ViewHelpers\\AdditionalJsonViewHelper\:\:getValue\(\) should return string but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/ViewHelpers/AdditionalJsonViewHelper.php + + - + message: '#^Parameter \#1 \$data of method Extcode\\Cart\\ViewHelpers\\AdditionalJsonViewHelper\:\:getValue\(\) expects array, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Classes/ViewHelpers/AdditionalJsonViewHelper.php + + - + message: '#^Parameter \#2 \$key of method Extcode\\Cart\\ViewHelpers\\AdditionalJsonViewHelper\:\:getValue\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/AdditionalJsonViewHelper.php + + - + message: '#^Parameter \#2 \$delim of static method TYPO3\\CMS\\Core\\Utility\\CsvUtility\:\:csvValues\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/CsvHeaderViewHelper.php + + - + message: '#^Parameter \#3 \$quote of static method TYPO3\\CMS\\Core\\Utility\\CsvUtility\:\:csvValues\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/CsvHeaderViewHelper.php + + - + message: '#^Cannot call method format\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Cannot call method getBillingAddress\(\) on mixed\.$#' + identifier: method.nonObject + count: 4 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Cannot call method getFirstName\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Cannot call method getInvoiceDate\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Cannot call method getInvoiceNumber\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Cannot call method getLastName\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Cannot call method getOrderDate\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Cannot call method getOrderNumber\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Cannot call method getSalutation\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Cannot call method getTitle\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Parameter \#1 \$row of static method TYPO3\\CMS\\Core\\Utility\\CsvUtility\:\:csvValues\(\) expects array\, array\ given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Parameter \#2 \$delim of static method TYPO3\\CMS\\Core\\Utility\\CsvUtility\:\:csvValues\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Parameter \#3 \$quote of static method TYPO3\\CMS\\Core\\Utility\\CsvUtility\:\:csvValues\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/CsvValuesViewHelper.php + + - + message: '#^Binary operation "\." between ''\['' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/ViewHelpers/FieldNameViewHelper.php + + - + message: '#^Cannot call method getId\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/FieldNameViewHelper.php + + - + message: '#^Parameter \#1 \$variant of method Extcode\\Cart\\ViewHelpers\\FieldNameViewHelper\:\:getVariantFieldName\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\BeVariant, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/FieldNameViewHelper.php + + - + message: '#^Cannot call method isAvailable\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/Form/IsServiceAvailableAtPriceViewHelper.php + + - + message: '#^Method Extcode\\Cart\\ViewHelpers\\Form\\IsServiceAvailableAtPriceViewHelper\:\:evaluateCondition\(\) has parameter \$arguments with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/ViewHelpers/Form/IsServiceAvailableAtPriceViewHelper.php + + - + message: '#^Offset ''price'' might not exist on array\|null\.$#' + identifier: offsetAccess.notFound + count: 1 + path: ../Classes/ViewHelpers/Form/IsServiceAvailableAtPriceViewHelper.php + + - + message: '#^Offset ''service'' might not exist on array\|null\.$#' + identifier: offsetAccess.notFound + count: 1 + path: ../Classes/ViewHelpers/Form/IsServiceAvailableAtPriceViewHelper.php + + - + message: '#^Binary operation "\." between mixed and ''''\|'' '' results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Binary operation "\." between string and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Binary operation "/" between float and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Cannot access offset ''currency'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Cannot access offset ''format'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Cannot call method get\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Cannot cast mixed to float\.$#' + identifier: cast.double + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Parameter \#2 \$decimals of function number_format expects int, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Parameter \#3 \$decimal_separator of function number_format expects string\|null, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Parameter \#4 \$thousands_separator of function number_format expects string\|null, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/Format/CurrencyViewHelper.php + + - + message: '#^Call to method sanitize\(\) of deprecated class TYPO3\\CMS\\Frontend\\Resource\\FilePathSanitizer\.$#' + identifier: method.deprecatedClass + count: 1 + path: ../Classes/ViewHelpers/IncludeFileViewHelper.php + + - + message: '#^Cannot access property \$tmpl on mixed\.$#' + identifier: property.nonObject + count: 1 + path: ../Classes/ViewHelpers/IncludeFileViewHelper.php + + - + message: '#^Cannot access property \$tt_track on mixed\.$#' + identifier: property.nonObject + count: 1 + path: ../Classes/ViewHelpers/IncludeFileViewHelper.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 3 + path: ../Classes/ViewHelpers/IncludeFileViewHelper.php + + - + message: '#^Parameter \#1 \$file of method TYPO3\\CMS\\Core\\Page\\PageRenderer\:\:addCssFile\(\) expects string\|TYPO3\\CMS\\Core\\SystemResource\\Type\\StaticResourceInterface, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/IncludeFileViewHelper.php + + - + message: '#^Parameter \#1 \$file of method TYPO3\\CMS\\Core\\Page\\PageRenderer\:\:addJsFile\(\) expects string\|TYPO3\\CMS\\Core\\SystemResource\\Type\\StaticResourceInterface, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/IncludeFileViewHelper.php + + - + message: '#^Parameter \#1 \$request of static method TYPO3\\CMS\\Core\\Http\\ApplicationType\:\:fromRequest\(\) expects Psr\\Http\\Message\\ServerRequestInterface, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/IncludeFileViewHelper.php + + - + message: '#^Parameter \$filePathSanitizer of method Extcode\\Cart\\ViewHelpers\\IncludeFileViewHelper\:\:__construct\(\) has typehint with deprecated class TYPO3\\CMS\\Frontend\\Resource\\FilePathSanitizer\.$#' + identifier: parameter.deprecatedClass + count: 1 + path: ../Classes/ViewHelpers/IncludeFileViewHelper.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Cannot access offset ''classes'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Cannot access offset ''columns'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Cannot access offset ''mapOnProperty'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Cannot access offset ''mapping'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Cannot access offset ''tableName'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Cannot access offset mixed on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Method Extcode\\Cart\\ViewHelpers\\MapModelPropertiesToTableColumnsViewHelper\:\:render\(\) should return array\ but returns array\.$#' + identifier: return.type + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Method Extcode\\Cart\\ViewHelpers\\MapModelPropertiesToTableColumnsViewHelper\:\:render\(\) should return array\ but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Parameter \#1 \$object of static method TYPO3\\CMS\\Extbase\\Reflection\\ObjectAccess\:\:getGettableProperties\(\) expects object, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Possibly invalid array key type mixed\.$#' + identifier: offsetAccess.invalidOffset + count: 2 + path: ../Classes/ViewHelpers/MapModelPropertiesToTableColumnsViewHelper.php + + - + message: '#^Parameter \#1 \$property of method TYPO3\\CMS\\Core\\MetaTag\\MetaTagManagerInterface\:\:addProperty\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/MetaTagViewHelper.php + + - + message: '#^Parameter \#1 \$property of method TYPO3\\CMS\\Core\\MetaTag\\MetaTagManagerRegistry\:\:getManagerForProperty\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/MetaTagViewHelper.php + + - + message: '#^Parameter \#2 \$content of method TYPO3\\CMS\\Core\\MetaTag\\MetaTagManagerInterface\:\:addProperty\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/MetaTagViewHelper.php + + - + message: '#^Strict comparison using \!\=\= between '''' and '''' will always evaluate to false\.$#' + identifier: notIdentical.alwaysFalse + count: 1 + path: ../Classes/ViewHelpers/TitleTagViewHelper.php + + - + message: '#^Variable \$arguments on left side of \?\? is never defined\.$#' + identifier: nullCoalesce.variable + count: 1 + path: ../Classes/ViewHelpers/TitleTagViewHelper.php + + - + message: '#^Cannot access offset string on array\\|Traversable\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Classes/ViewHelpers/Traversable/ExtractViewHelper.php + + - + message: '#^Cannot call method add\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/Traversable/ExtractViewHelper.php + + - + message: '#^Cannot call method exists\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/Traversable/ExtractViewHelper.php + + - + message: '#^Cannot call method get\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/Traversable/ExtractViewHelper.php + + - + message: '#^Cannot call method remove\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/Traversable/ExtractViewHelper.php + + - + message: '#^Method Extcode\\Cart\\ViewHelpers\\Traversable\\ExtractViewHelper\:\:extractByKey\(\) has parameter \$iterator with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Classes/ViewHelpers/Traversable/ExtractViewHelper.php + + - + message: '#^Method Extcode\\Cart\\ViewHelpers\\Traversable\\ExtractViewHelper\:\:render\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/ViewHelpers/Traversable/ExtractViewHelper.php + + - + message: '#^Method Extcode\\Cart\\ViewHelpers\\Traversable\\ExtractViewHelper\:\:render\(\) should return array but returns mixed\.$#' + identifier: return.type + count: 2 + path: ../Classes/ViewHelpers/Traversable/ExtractViewHelper.php + + - + message: '#^Parameter \#2 \$key of method Extcode\\Cart\\ViewHelpers\\Traversable\\ExtractViewHelper\:\:extractByKey\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/Traversable/ExtractViewHelper.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Classes/ViewHelpers/Variable/GetViewHelper.php + + - + message: '#^Cannot call method exists\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/Variable/GetViewHelper.php + + - + message: '#^Cannot call method get\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/Variable/GetViewHelper.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 2 + path: ../Classes/ViewHelpers/Variable/GetViewHelper.php + + - + message: '#^Parameter \#1 \$subject of static method TYPO3\\CMS\\Extbase\\Reflection\\ObjectAccess\:\:getProperty\(\) expects array\|object, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/Variable/GetViewHelper.php + + - + message: '#^Parameter \#1 \$subject of static method TYPO3\\CMS\\Extbase\\Reflection\\ObjectAccess\:\:getPropertyPath\(\) expects array\|object, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/Variable/GetViewHelper.php + + - + message: '#^Cannot call method add\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/Variable/SetViewHelper.php + + - + message: '#^Cannot call method exists\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/Variable/SetViewHelper.php + + - + message: '#^Cannot call method get\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 1 + path: ../Classes/ViewHelpers/Variable/SetViewHelper.php + + - + message: '#^Cannot call method remove\(\) on TYPO3Fluid\\Fluid\\Core\\Variables\\VariableProviderInterface\|null\.$#' + identifier: method.nonObject + count: 2 + path: ../Classes/ViewHelpers/Variable/SetViewHelper.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 3 + path: ../Classes/ViewHelpers/Variable/SetViewHelper.php + + - + message: '#^Parameter \#1 \$subject of static method TYPO3\\CMS\\Extbase\\Reflection\\ObjectAccess\:\:setProperty\(\) expects array\|object, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/ViewHelpers/Variable/SetViewHelper.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\PaymentPaidShippingOpen\:\:__construct\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/PaymentPaidShippingOpen.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\PaymentPaidShippingOpen\:\:getOptions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/PaymentPaidShippingOpen.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\OrderItemsProvider\:\:__construct\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/OrderItemsProvider.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\OrderItemsProvider\:\:getItems\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/OrderItemsProvider.php + + - + message: '#^Parameter \#1 \$fieldName of method TYPO3\\CMS\\Core\\Database\\Query\\QueryBuilder\:\:orderBy\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Widgets/Provider/OrderItemsProvider.php + + - + message: '#^Parameter \#1 \$maxResults of method TYPO3\\CMS\\Core\\Database\\Query\\QueryBuilder\:\:setMaxResults\(\) expects int\|null, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Widgets/Provider/OrderItemsProvider.php + + - + message: '#^Parameter \#2 \$order of method TYPO3\\CMS\\Core\\Database\\Query\\QueryBuilder\:\:orderBy\(\) expects string\|null, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Widgets/Provider/OrderItemsProvider.php + + - + message: '#^Property Extcode\\Cart\\Widgets\\Provider\\OrderItemsProvider\:\:\$options type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/OrderItemsProvider.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/Widgets/Provider/OrdersPerDayProvider.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\OrdersPerDayProvider\:\:__construct\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/OrdersPerDayProvider.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\OrdersPerDayProvider\:\:calculateData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/OrdersPerDayProvider.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\OrdersPerDayProvider\:\:getChartData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/OrdersPerDayProvider.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\OrdersPerDayProvider\:\:getOrderItemsInPeriod\(\) should return int but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Widgets/Provider/OrdersPerDayProvider.php + + - + message: '#^Parameter \#1 \$fieldName of method TYPO3\\CMS\\Core\\Database\\Query\\Expression\\ExpressionBuilder\:\:gte\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Widgets/Provider/OrdersPerDayProvider.php + + - + message: '#^Parameter \#1 \$fieldName of method TYPO3\\CMS\\Core\\Database\\Query\\Expression\\ExpressionBuilder\:\:lte\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Widgets/Provider/OrdersPerDayProvider.php + + - + message: '#^Parameter \#1 \$user of method TYPO3\\CMS\\Core\\Localization\\LanguageServiceFactory\:\:createFromUserPreferences\(\) expects TYPO3\\CMS\\Core\\Authentication\\AbstractUserAuthentication\|null, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Widgets/Provider/OrdersPerDayProvider.php + + - + message: '#^Property Extcode\\Cart\\Widgets\\Provider\\OrdersPerDayProvider\:\:\$options type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/OrdersPerDayProvider.php + + - + message: '#^Binary operation "\." between ''tx_cart_domain…'' and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\TurnoverPerDayProvider\:\:__construct\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\TurnoverPerDayProvider\:\:calculateData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\TurnoverPerDayProvider\:\:getChartData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Method Extcode\\Cart\\Widgets\\Provider\\TurnoverPerDayProvider\:\:getOrderItemsInPeriod\(\) should return float but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Parameter \#1 \$fieldName of method TYPO3\\CMS\\Core\\Database\\Query\\Expression\\ExpressionBuilder\:\:gte\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Parameter \#1 \$fieldName of method TYPO3\\CMS\\Core\\Database\\Query\\Expression\\ExpressionBuilder\:\:lte\(\) expects string, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Parameter \#1 \$user of method TYPO3\\CMS\\Core\\Localization\\LanguageServiceFactory\:\:createFromUserPreferences\(\) expects TYPO3\\CMS\\Core\\Authentication\\AbstractUserAuthentication\|null, mixed given\.$#' + identifier: argument.type + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Property Extcode\\Cart\\Widgets\\Provider\\TurnoverPerDayProvider\:\:\$options type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Classes/Widgets/Provider/TurnoverPerDayProvider.php + + - + message: '#^Cannot access an offset on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''columns'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''config'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''contains\-coupons'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''contains\-orders'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''ctrl'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''doktype'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''items'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''module'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''pages'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset ''typeicon_classes'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot access offset 181 on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../Configuration/TCA/Overrides/pages.php + + - + message: '#^Cannot call method create\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Functional/Command/AbstractCommandTestCase.php + + - + message: '#^Cannot access offset ''deleted'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 33 + path: ../Tests/Functional/Command/OrderItemCleanupCommandTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Functional\\Command\\OrderItemCleanupCommandTest\:\:wrongCutOffDateDataProvider\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: ../Tests/Functional/Command/OrderItemCleanupCommandTest.php + + - + message: '#^Parameter \#1 \$command of class Symfony\\Component\\Console\\Tester\\CommandTester constructor expects \(callable\(\)\: mixed\)\|Symfony\\Component\\Console\\Command\\Command, mixed given\.$#' + identifier: argument.type + count: 6 + path: ../Tests/Functional/Command/OrderItemCleanupCommandTest.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Tests/Functional/EventListener/Mail/AttachmentFromOrderItemTest.php + + - + message: '#^Cannot access constant class on mixed\.$#' + identifier: classConstant.nonObject + count: 1 + path: ../Tests/Functional/EventListener/Mail/AttachmentFromOrderItemTest.php + + - + message: '#^Cannot call method getListenersForEvent\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Functional/EventListener/Mail/AttachmentFromOrderItemTest.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../Tests/Functional/EventListener/Mail/AttachmentFromTypoScriptTest.php + + - + message: '#^Cannot access constant class on mixed\.$#' + identifier: classConstant.nonObject + count: 1 + path: ../Tests/Functional/EventListener/Mail/AttachmentFromTypoScriptTest.php + + - + message: '#^Cannot call method getListenersForEvent\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Functional/EventListener/Mail/AttachmentFromTypoScriptTest.php + + - + message: '#^Cannot call method getMessage\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Controller/ProductControllerTest.php + + - + message: '#^Cannot call method getSeverity\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Controller/ProductControllerTest.php + + - + message: '#^Cannot call method getTitle\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Controller/ProductControllerTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Controller\\ProductControllerTest\:\:getHighestSeverity\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Controller/ProductControllerTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Controller\\ProductControllerTest\:\:getHighestSeverityDataProvider\(\) return type has no value type specified in iterable type Traversable\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Controller/ProductControllerTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Controller\\ProductControllerTest\:\:getLastHighestSeverity\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Controller/ProductControllerTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Controller\\ProductControllerTest\:\:getLastHighestSeverityDataProvider\(\) return type has no value type specified in iterable type Traversable\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Controller/ProductControllerTest.php + + - + message: '#^Call to an undefined method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|PHPUnit\\Framework\\MockObject\\MockObject\:\:method\(\)\.$#' + identifier: method.notFound + count: 4 + path: ../Tests/Unit/Domain/Model/Cart/CartCouponFixTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Cart\\CartCouponFixTest\:\:createCartMock\(\) has parameter \$methods with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Domain/Model/Cart/CartCouponFixTest.php + + - + message: '#^Parameter \#1 \$cart of method Extcode\\Cart\\Domain\\Model\\Cart\\AbstractCartCoupon\:\:setCart\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\Cart, Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|PHPUnit\\Framework\\MockObject\\MockObject given\.$#' + identifier: argument.type + count: 4 + path: ../Tests/Unit/Domain/Model/Cart/CartCouponFixTest.php + + - + message: '#^Parameter \#1 \$methods of method PHPUnit\\Framework\\MockObject\\TestDoubleBuilder\:\:onlyMethods\(\) expects list\, array given\.$#' + identifier: argument.type + count: 1 + path: ../Tests/Unit/Domain/Model/Cart/CartCouponFixTest.php + + - + message: '#^Call to an undefined method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|PHPUnit\\Framework\\MockObject\\MockObject\:\:method\(\)\.$#' + identifier: method.notFound + count: 12 + path: ../Tests/Unit/Domain/Model/Cart/CartCouponPercentageTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Cart\\CartCouponPercentageTest\:\:createCartMock\(\) has parameter \$methods with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Domain/Model/Cart/CartCouponPercentageTest.php + + - + message: '#^Parameter \#1 \$cart of method Extcode\\Cart\\Domain\\Model\\Cart\\AbstractCartCoupon\:\:setCart\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\Cart, Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|PHPUnit\\Framework\\MockObject\\MockObject given\.$#' + identifier: argument.type + count: 9 + path: ../Tests/Unit/Domain/Model/Cart/CartCouponPercentageTest.php + + - + message: '#^Parameter \#1 \$methods of method PHPUnit\\Framework\\MockObject\\TestDoubleBuilder\:\:onlyMethods\(\) expects list\, array given\.$#' + identifier: argument.type + count: 1 + path: ../Tests/Unit/Domain/Model/Cart/CartCouponPercentageTest.php + + - + message: '#^Property Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Cart\\CartTest\:\:\$taxClasses type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Domain/Model/Cart/CartTest.php + + - + message: '#^Call to an undefined method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|PHPUnit\\Framework\\MockObject\\MockObject\:\:addProduct\(\)\.$#' + identifier: method.notFound count: 2 - path: ../Classes/Domain/Model/Cart/Cart.php + path: ../Tests/Unit/Domain/Model/Cart/ServiceTest.php + + - + message: '#^Call to an undefined method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|PHPUnit\\Framework\\MockObject\\MockObject\:\:method\(\)\.$#' + identifier: method.notFound + count: 12 + path: ../Tests/Unit/Domain/Model/Cart/ServiceTest.php - - message: "#^Call to an undefined method Extcode\\\\Cart\\\\Domain\\\\Model\\\\Cart\\\\CartCouponInterface\\:\\:setCart\\(\\)\\.$#" + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Cart\\ServiceTest\:\:createCartMock\(\) has parameter \$methods with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 - path: ../Classes/Domain/Model/Cart/Cart.php + path: ../Tests/Unit/Domain/Model/Cart/ServiceTest.php - - message: "#^Call to an undefined method Extcode\\\\Cart\\\\Service\\\\PaymentMethodsServiceInterface\\:\\:getConfigurationsForType\\(\\)\\.$#" + message: '#^Parameter \#1 \$cart of method Extcode\\Cart\\Domain\\Model\\Cart\\Service\:\:setCart\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\Cart, Extcode\\Cart\\Domain\\Model\\Cart\\Cart\|PHPUnit\\Framework\\MockObject\\MockObject given\.$#' + identifier: argument.type + count: 14 + path: ../Tests/Unit/Domain/Model/Cart/ServiceTest.php + + - + message: '#^Parameter \#1 \$methods of method PHPUnit\\Framework\\MockObject\\TestDoubleBuilder\:\:onlyMethods\(\) expects list\, array given\.$#' + identifier: argument.type count: 1 - path: ../Classes/EventListener/Order/Finish/ClearCart.php + path: ../Tests/Unit/Domain/Model/Cart/ServiceTest.php + + - + message: '#^Property Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Cart\\ServiceTest\:\:\$config type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Domain/Model/Cart/ServiceTest.php + + - + message: '#^Property Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Cart\\ServiceTest\:\:\$taxClasses type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Domain/Model/Cart/ServiceTest.php + + - + message: '#^Parameter \#1 \$transactions of method Extcode\\Cart\\Domain\\Model\\Order\\Payment\:\:setTransactions\(\) expects TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage\, TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage\ given\.$#' + identifier: argument.type + count: 1 + path: ../Tests/Unit/Domain/Model/Order/PaymentTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\CategoryTraitStub\:\:getCategories\(\) return type with generic class TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage does not specify its types\: TEntity$#' + identifier: missingType.generics + count: 1 + path: ../Tests/Unit/Domain/Model/Product/CategoryTraitStub.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\CategoryTraitStub\:\:setCategories\(\) has parameter \$categories with generic class TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage but does not specify its types\: TEntity$#' + identifier: missingType.generics + count: 1 + path: ../Tests/Unit/Domain/Model/Product/CategoryTraitStub.php + + - + message: '#^Cannot call method count\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/CategoryTraitTest.php + + - + message: '#^Cannot call method getCategories\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/CategoryTraitTest.php + + - + message: '#^Cannot call method getCategory\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/CategoryTraitTest.php + + - + message: '#^Cannot call method setCategory\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/CategoryTraitTest.php + + - + message: '#^Property Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\CategoryTraitTest\:\:\$trait has no type specified\.$#' + identifier: missingType.property + count: 1 + path: ../Tests/Unit/Domain/Model/Product/CategoryTraitTest.php + + - + message: '#^Binary operation "/" between 1\.0 and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitStub.php + + - + message: '#^Binary operation "/" between float and mixed results in an error\.$#' + identifier: binaryOp.invalid + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitStub.php + + - + message: '#^Cannot access offset string on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitStub.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitStub\:\:getMeasureUnits\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitStub.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitStub\:\:setMeasureUnits\(\) has parameter \$measureUnits with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitStub.php + + - + message: '#^Parameter \#2 \$array of function array_key_exists expects array, mixed given\.$#' + identifier: argument.type + count: 2 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitStub.php + + - + message: '#^Property Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitStub\:\:\$measureUnits type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitStub.php + + - + message: '#^Cannot call method getBasePriceMeasureUnit\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method getIsMeasureUnitCompatibility\(\) on mixed\.$#' + identifier: method.nonObject + count: 4 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method getMeasureUnitFactor\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method getMeasureUnits\(\) on mixed\.$#' + identifier: method.nonObject + count: 5 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method getPriceMeasure\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method getPriceMeasureUnit\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method setBasePriceMeasureUnit\(\) on mixed\.$#' + identifier: method.nonObject + count: 5 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method setMeasureUnits\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method setPriceMeasure\(\) on mixed\.$#' + identifier: method.nonObject + count: 3 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method setPriceMeasureUnit\(\) on mixed\.$#' + identifier: method.nonObject + count: 4 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getCalculatedBasePriceForGivenPriceMeasureUnitAndBasePriceMeasureUnitRetrunsPrice\(\) has parameter \$calculatedBasePrice with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getCalculatedBasePriceForGivenPriceMeasureUnitAndBasePriceMeasureUnitRetrunsPrice\(\) has parameter \$factor with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getCalculatedBasePriceForGivenPriceMeasureUnitAndBasePriceMeasureUnitRetrunsPrice\(\) has parameter \$priceMeasure with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getCalculatedBasePriceForGivenPriceMeasureUnitAndBasePriceMeasureUnitRetrunsPrice\(\) has parameter \$sourceMeasureUnit with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getCalculatedBasePriceForGivenPriceMeasureUnitAndBasePriceMeasureUnitRetrunsPrice\(\) has parameter \$targetMeasureUnit with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getIsMeasureUnitCompatibilityRetrunsTrueOnSameTypeOfMeasureUnit\(\) has parameter \$calculatedBasePrice with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getIsMeasureUnitCompatibilityRetrunsTrueOnSameTypeOfMeasureUnit\(\) has parameter \$factor with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getIsMeasureUnitCompatibilityRetrunsTrueOnSameTypeOfMeasureUnit\(\) has parameter \$priceMeasure with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getIsMeasureUnitCompatibilityRetrunsTrueOnSameTypeOfMeasureUnit\(\) has parameter \$sourceMeasureUnit with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getIsMeasureUnitCompatibilityRetrunsTrueOnSameTypeOfMeasureUnit\(\) has parameter \$targetMeasureUnit with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getMeasureUnitFactorForGivenPriceMeasureUnitAndBasePriceMeasureUnitReturnsFactor\(\) has parameter \$calculatedBasePrice with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getMeasureUnitFactorForGivenPriceMeasureUnitAndBasePriceMeasureUnitReturnsFactor\(\) has parameter \$factor with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getMeasureUnitFactorForGivenPriceMeasureUnitAndBasePriceMeasureUnitReturnsFactor\(\) has parameter \$priceMeasure with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getMeasureUnitFactorForGivenPriceMeasureUnitAndBasePriceMeasureUnitReturnsFactor\(\) has parameter \$sourceMeasureUnit with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:getMeasureUnitFactorForGivenPriceMeasureUnitAndBasePriceMeasureUnitReturnsFactor\(\) has parameter \$targetMeasureUnit with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:measureUnitsProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Property Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\MeasureTraitTest\:\:\$trait has no type specified\.$#' + identifier: missingType.property + count: 1 + path: ../Tests/Unit/Domain/Model/Product/MeasureTraitTest.php + + - + message: '#^Cannot call method getServiceAttribute1\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/ServiceAttributeTraitTest.php + + - + message: '#^Cannot call method getServiceAttribute2\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/ServiceAttributeTraitTest.php + + - + message: '#^Cannot call method getServiceAttribute3\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/ServiceAttributeTraitTest.php + + - + message: '#^Cannot call method setServiceAttribute1\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/ServiceAttributeTraitTest.php + + - + message: '#^Cannot call method setServiceAttribute2\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/ServiceAttributeTraitTest.php + + - + message: '#^Cannot call method setServiceAttribute3\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/ServiceAttributeTraitTest.php + + - + message: '#^Property Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\ServiceAttributeTraitTest\:\:\$trait has no type specified\.$#' + identifier: missingType.property + count: 1 + path: ../Tests/Unit/Domain/Model/Product/ServiceAttributeTraitTest.php + + - + message: '#^Cannot call method getStock\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/StockTraitTest.php + + - + message: '#^Cannot call method isHandleStock\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/StockTraitTest.php + + - + message: '#^Cannot call method setIsHandleStock\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/StockTraitTest.php + + - + message: '#^Cannot call method setStock\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/StockTraitTest.php + + - + message: '#^Property Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\StockTraitTest\:\:\$trait has no type specified\.$#' + identifier: missingType.property + count: 1 + path: ../Tests/Unit/Domain/Model/Product/StockTraitTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\TagTraitStub\:\:getTags\(\) return type with generic class TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage does not specify its types\: TEntity$#' + identifier: missingType.generics + count: 1 + path: ../Tests/Unit/Domain/Model/Product/TagTraitStub.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\TagTraitStub\:\:setTags\(\) has parameter \$tags with generic class TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage but does not specify its types\: TEntity$#' + identifier: missingType.generics + count: 1 + path: ../Tests/Unit/Domain/Model/Product/TagTraitStub.php + + - + message: '#^Cannot call method addTag\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/TagTraitTest.php + + - + message: '#^Cannot call method attach\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/TagTraitTest.php + + - + message: '#^Cannot call method count\(\) on mixed\.$#' + identifier: method.nonObject + count: 4 + path: ../Tests/Unit/Domain/Model/Product/TagTraitTest.php + + - + message: '#^Cannot call method getTags\(\) on mixed\.$#' + identifier: method.nonObject + count: 8 + path: ../Tests/Unit/Domain/Model/Product/TagTraitTest.php + + - + message: '#^Cannot call method removeTag\(\) on mixed\.$#' + identifier: method.nonObject + count: 1 + path: ../Tests/Unit/Domain/Model/Product/TagTraitTest.php + + - + message: '#^Cannot call method setTags\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Domain/Model/Product/TagTraitTest.php + + - + message: '#^Property Extcode\\Cart\\Tests\\Unit\\Domain\\Model\\Product\\TagTraitTest\:\:\$trait has no type specified\.$#' + identifier: missingType.property + count: 1 + path: ../Tests/Unit/Domain/Model/Product/TagTraitTest.php + + - + message: '#^Cannot call method getConfigurationsForType\(\) on mixed\.$#' + identifier: method.nonObject + count: 2 + path: ../Tests/Unit/Service/AbstractConfigurationFromTypoScriptServiceTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Service\\AbstractConfigurationFromTypoScriptServiceTest\:\:createSubject\(\) has no return type specified\.$#' + identifier: missingType.return + count: 1 + path: ../Tests/Unit/Service/AbstractConfigurationFromTypoScriptServiceTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Service\\AbstractConfigurationFromTypoScriptServiceTest\:\:createSubject\(\) has parameter \$configurations with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Service/AbstractConfigurationFromTypoScriptServiceTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Service\\TaxClassServiceTest\:\:createSubject\(\) has parameter \$settings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Service/TaxClassServiceTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Validation\\Validator\\EmptyValidatorTest\:\:getValidator\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Validation/Validator/EmptyValidatorTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Validation\\Validator\\EmptyValidatorTest\:\:getValidator\(\) should return TYPO3\\CMS\\Extbase\\Validation\\Validator\\ValidatorInterface but returns object\.$#' + identifier: return.type + count: 1 + path: ../Tests/Unit/Validation/Validator/EmptyValidatorTest.php + + - + message: '#^Method Extcode\\Cart\\Tests\\Unit\\Validation\\Validator\\EmptyValidatorTest\:\:validatorOptions\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../Tests/Unit/Validation/Validator/EmptyValidatorTest.php + + - + message: '#^Parameter \#1 \$className of method PHPUnit\\Framework\\TestCase\:\:getMockBuilder\(\) expects class\-string\, string given\.$#' + identifier: argument.type + count: 1 + path: ../Tests/Unit/Validation/Validator/EmptyValidatorTest.php + + - + message: '#^Unable to resolve the template type T in call to method PHPUnit\\Framework\\TestCase\:\:getMockBuilder\(\)$#' + identifier: argument.templateType + count: 1 + path: ../Tests/Unit/Validation/Validator/EmptyValidatorTest.php + + - + message: '#^Cannot access offset ''cart'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../ext_emconf.php + + - + message: '#^Cannot access an offset on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../ext_localconf.php + + - + message: '#^Cannot access offset ''1588829280'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 + path: ../ext_localconf.php + + - + message: '#^Cannot access offset ''MAIL'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../ext_localconf.php + + - + message: '#^Cannot access offset ''SYS'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../ext_localconf.php + + - + message: '#^Cannot access offset ''cart'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../ext_localconf.php + + - + message: '#^Cannot access offset ''fluid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../ext_localconf.php + + - + message: '#^Cannot access offset ''namespaces'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../ext_localconf.php + + - + message: '#^Cannot access offset ''partialRootPaths'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../ext_localconf.php + + - + message: '#^Cannot access offset ''templateRootPaths'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 1 + path: ../ext_localconf.php diff --git a/Build/phpstan.neon b/Build/phpstan.neon index 13c67700..06ce5b1c 100644 --- a/Build/phpstan.neon +++ b/Build/phpstan.neon @@ -1,10 +1,36 @@ includes: - - phpstan-baseline.neon + - 'phpstan-baseline.neon' + parameters: - level: 4 + level: 'max' + paths: - ../Classes - ../Configuration - ../Tests - ../ext_emconf.php - ../ext_localconf.php + + disallowedFunctionCalls: + - + function: + - 'var_dump()' + - 'xdebug_break()' + message: 'Do not add debugging' + - + function: 'header()' + message: 'Use API instead' + + disallowedStaticCalls: + - + method: 'TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump()' + message: 'Do not add debugging' + + disallowedSuperglobals: + - + superglobal: + - '$_GET' + - '$_POST' + - '$_FILES' + - '$_SERVER' + message: 'Use API instead' diff --git a/Build/FunctionalTests.xml b/Build/phpunit.xml.dist similarity index 88% rename from Build/FunctionalTests.xml rename to Build/phpunit.xml.dist index c381bae5..d6e33ac2 100644 --- a/Build/FunctionalTests.xml +++ b/Build/phpunit.xml.dist @@ -18,9 +18,12 @@ > - + ../Tests/Functional/ + + ../Tests/Unit/ + diff --git a/Classes/Controller/Backend/ActionController.php b/Classes/Controller/Backend/ActionController.php index 75ab8d30..bc5dd35c 100644 --- a/Classes/Controller/Backend/ActionController.php +++ b/Classes/Controller/Backend/ActionController.php @@ -12,12 +12,15 @@ */ use TYPO3\CMS\Backend\Utility\BackendUtility; -use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Configuration\ConfigurationManager; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; class ActionController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController { protected array $pluginSettings = []; + public function __construct( + protected ConfigurationManagerInterface $configurationManager + ) {} protected function initializeAction(): void { @@ -33,9 +36,7 @@ protected function initializeAction(): void $GLOBALS['BE_USER']->getPagePermsClause(1) ); - $configurationManager = GeneralUtility::makeInstance( - ConfigurationManager::class - ); + $configurationManager = $this->configurationManager; $frameworkConf = $configurationManager->getConfiguration( diff --git a/Classes/Controller/Backend/Order/DocumentController.php b/Classes/Controller/Backend/Order/DocumentController.php index 3df52aa9..4bddb8dc 100644 --- a/Classes/Controller/Backend/Order/DocumentController.php +++ b/Classes/Controller/Backend/Order/DocumentController.php @@ -18,7 +18,6 @@ use Extcode\Cart\Event\Order\NumberGeneratorEvent; use Extcode\CartPdf\Service\PdfService; use Psr\Http\Message\ResponseInterface; -use TYPO3\CMS\Core\Resource\File; use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager; diff --git a/Classes/Controller/Backend/Order/OrderController.php b/Classes/Controller/Backend/Order/OrderController.php index 15cefc8b..556ecb91 100644 --- a/Classes/Controller/Backend/Order/OrderController.php +++ b/Classes/Controller/Backend/Order/OrderController.php @@ -10,7 +10,6 @@ * For the full copyright and license information, please read the * LICENSE file that was distributed with this source code. */ - use Extcode\Cart\Controller\Backend\ActionController; use Extcode\Cart\Domain\Model\Cart\Cart; use Extcode\Cart\Domain\Model\Order\Item; @@ -20,6 +19,7 @@ use Extcode\Cart\Event\Template\Components\ModifyModuleTemplateEvent; use Psr\Http\Message\ResponseInterface; use TYPO3\CMS\Backend\Template\Components\ButtonBar; +use TYPO3\CMS\Backend\Template\Components\ComponentFactory; use TYPO3\CMS\Backend\Template\ModuleTemplate; use TYPO3\CMS\Backend\Template\ModuleTemplateFactory; use TYPO3\CMS\Core\Imaging\IconFactory; @@ -47,7 +47,8 @@ public function __construct( protected readonly IconFactory $iconFactory, protected readonly PersistenceManager $persistenceManager, protected readonly ItemRepository $itemRepository, - private readonly PageRenderer $pageRenderer + private readonly PageRenderer $pageRenderer, + private readonly ComponentFactory $componentFactory ) {} protected function initializeAction(): void @@ -275,9 +276,9 @@ private function setDocHeader(array $buttons): void foreach ($buttons as $button) { $title = $this->getLanguageService()->sL(self::LANG_FILE . $button['title']); - $icon = $this->iconFactory->getIcon($button['icon'], IconSize::SMALL->value); + $icon = $this->iconFactory->getIcon($button['icon'], IconSize::SMALL); - $viewButton = $buttonBar->makeLinkButton() + $viewButton = $this->componentFactory->createLinkButton() ->setHref($button['link']) ->setTitle($title) ->setShowLabelText($button['showLabel']) diff --git a/Classes/Controller/Cart/CartController.php b/Classes/Controller/Cart/CartController.php index 0eac82bd..77138efe 100755 --- a/Classes/Controller/Cart/CartController.php +++ b/Classes/Controller/Cart/CartController.php @@ -11,6 +11,7 @@ * LICENSE file that was distributed with this source code. */ +use Extcode\Cart\Domain\Model\Order\AddressInterface; use Extcode\Cart\Domain\Model\Order\BillingAddress; use Extcode\Cart\Domain\Model\Order\Item; use Extcode\Cart\Domain\Model\Order\ShippingAddress; @@ -24,8 +25,8 @@ class CartController extends ActionController { public function showAction( ?Item $orderItem = null, - ?BillingAddress $billingAddress = null, - ?ShippingAddress $shippingAddress = null + ?AddressInterface $billingAddress = null, + ?AddressInterface $shippingAddress = null ): ResponseInterface { $this->restoreSession(); @@ -69,7 +70,12 @@ public function showAction( $this->sessionHandler->writeCart($this->settings['cart']['pid'], $this->cart); } - $beforeShowCartEvent = new BeforeShowCartEvent($this->cart, $orderItem, $billingAddress, $shippingAddress); + $beforeShowCartEvent = new BeforeShowCartEvent( + $this->cart, + $orderItem, + $billingAddress, + $shippingAddress + ); $this->eventDispatcher->dispatch($beforeShowCartEvent); $orderItem = $beforeShowCartEvent->getOrderItem(); diff --git a/Classes/Controller/Cart/CountryController.php b/Classes/Controller/Cart/CountryController.php index 6c03cb26..2f7fce13 100644 --- a/Classes/Controller/Cart/CountryController.php +++ b/Classes/Controller/Cart/CountryController.php @@ -23,7 +23,11 @@ public function updateAction(): ResponseInterface { //ToDo check country is allowed by TypoScript - $this->cartUtility->updateCountry($this->settings['cart'], $this->configurations, $this->request); + $this->cartUtility->updateCountry( + $this->settings['cart'], + $this->configurations, + $this->request + ); $this->restoreSession(); diff --git a/Classes/Controller/Cart/CurrencyController.php b/Classes/Controller/Cart/CurrencyController.php index a0868958..4cf44a0a 100644 --- a/Classes/Controller/Cart/CurrencyController.php +++ b/Classes/Controller/Cart/CurrencyController.php @@ -24,7 +24,11 @@ public function __construct( public function updateAction(): ResponseInterface { - $this->currencyUtility->updateCurrency($this->settings['cart'], $this->configurations, $this->request); + $this->currencyUtility->updateCurrency( + $this->settings['cart'], + $this->configurations, + $this->request + ); $this->restoreSession(); diff --git a/Classes/Controller/Cart/OrderController.php b/Classes/Controller/Cart/OrderController.php index fb01571d..7828dc52 100644 --- a/Classes/Controller/Cart/OrderController.php +++ b/Classes/Controller/Cart/OrderController.php @@ -10,7 +10,8 @@ * For the full copyright and license information, please read the * LICENSE file that was distributed with this source code. */ -use Extcode\Cart\Domain\Model\Order\BillingAddress; + +use Extcode\Cart\Domain\Model\Order\AddressInterface; use Extcode\Cart\Domain\Model\Order\Item; use Extcode\Cart\Domain\Model\Order\ShippingAddress; use Extcode\Cart\Domain\Validator\OrderItemValidator; @@ -21,15 +22,12 @@ use Extcode\Cart\Event\Order\StockEvent; use Extcode\Cart\Event\ProcessOrderCheckStockEvent; use Extcode\Cart\Validation\Validator\EmptyValidator; -use Psr\EventDispatcher\StoppableEventInterface; use Psr\Http\Message\ResponseInterface; -use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Annotation\IgnoreValidation; use TYPO3\CMS\Extbase\Utility\LocalizationUtility; use TYPO3\CMS\Extbase\Validation\Validator\AbstractGenericObjectValidator; use TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator; use TYPO3\CMS\Extbase\Validation\Validator\GenericObjectValidator; -use TYPO3\CMS\Extbase\Validation\ValidatorResolver; class OrderController extends ActionController { @@ -58,8 +56,8 @@ public function initializeCreateAction(): void #[IgnoreValidation(['value' => 'shippingAddress'])] public function createAction( ?Item $orderItem = null, - ?BillingAddress $billingAddress = null, - ?ShippingAddress $shippingAddress = null + ?AddressInterface $billingAddress = null, + ?AddressInterface $shippingAddress = null ): ResponseInterface { $this->restoreSession(); @@ -122,10 +120,14 @@ public function createAction( $this->view->assign('orderItem', $orderItem); $paymentId = $this->cart->getPayment()->getId(); - $paymentSettings = $this->paymentMethodsService->getConfigurationsForType('payments', $this->cart->getBillingCountry()); + $paymentSettings = $this->paymentMethodsService->getPaymentMethods($this->cart); if (isset($paymentSettings['options'][$paymentId]['redirects']['success']['url'])) { - $this->redirectToUri($paymentSettings['options'][$paymentId]['redirects']['success']['url'], 0, 200); + return $this->redirectToUri( + $paymentSettings['options'][$paymentId]['redirects']['success']['url'], + null, + 200 + ); } $this->dispatchModifyViewEvent(); @@ -171,9 +173,7 @@ protected function setDynamicValidation( array $validatorConf ): void { // build custom validation chain - $validatorResolver = GeneralUtility::makeInstance( - ValidatorResolver::class - ); + $validatorResolver = $this->validatorResolver; if ($validatorConf['validator'] === 'Empty') { $validatorConf['validator'] = EmptyValidator::class; @@ -209,36 +209,36 @@ protected function dispatchOrderCreateEvents(Item $orderItem): bool { $createEvent = new CreateEvent($this->cart, $orderItem, $this->configurations); $this->eventDispatcher->dispatch($createEvent); - if ($createEvent instanceof StoppableEventInterface && $createEvent->isPropagationStopped()) { + if ($createEvent->isPropagationStopped()) { return true; } $onlyGenerateNumberOfType = []; if (!empty($this->configurations['autoGenerateNumbers'])) { - $onlyGenerateNumberOfType = array_map('trim', explode(',', (string)$this->configurations['autoGenerateNumbers'])); + $onlyGenerateNumberOfType = array_map(trim(...), explode(',', (string)$this->configurations['autoGenerateNumbers'])); } $generateNumbersEvent = new NumberGeneratorEvent($this->cart, $orderItem, $this->configurations); $generateNumbersEvent->setOnlyGenerateNumberOfType($onlyGenerateNumberOfType); $this->eventDispatcher->dispatch($generateNumbersEvent); - if ($generateNumbersEvent instanceof StoppableEventInterface && $generateNumbersEvent->isPropagationStopped()) { + if ($generateNumbersEvent->isPropagationStopped()) { return true; } $stockEvent = new StockEvent($this->cart, $orderItem, $this->configurations); $this->eventDispatcher->dispatch($stockEvent); - if ($stockEvent instanceof StoppableEventInterface && $stockEvent->isPropagationStopped()) { + if ($stockEvent->isPropagationStopped()) { return true; } $paymentEvent = new PaymentEvent($this->cart, $orderItem, $this->configurations); $this->eventDispatcher->dispatch($paymentEvent); - if ($paymentEvent instanceof StoppableEventInterface && $paymentEvent->isPropagationStopped()) { + if ($paymentEvent->isPropagationStopped()) { return true; } $finishEvent = new FinishEvent($this->cart, $orderItem, $this->configurations); $this->eventDispatcher->dispatch($finishEvent); - if ($finishEvent instanceof StoppableEventInterface && $finishEvent->isPropagationStopped()) { + if ($finishEvent->isPropagationStopped()) { return true; } diff --git a/Classes/Controller/Cart/ProductController.php b/Classes/Controller/Cart/ProductController.php index b93dc4b5..13c7e959 100644 --- a/Classes/Controller/Cart/ProductController.php +++ b/Classes/Controller/Cart/ProductController.php @@ -27,7 +27,7 @@ public function addAction(): ResponseInterface { if (!$this->request->hasArgument('productType')) { // TODO: add own Exception - throw new \Exception('productType is needed'); + throw new \Exception('productType is needed', 5200281451); } $this->restoreSession(); diff --git a/Classes/Domain/Finisher/Form/AddToCartFinisher.php b/Classes/Domain/Finisher/Form/AddToCartFinisher.php index 864c68b3..2b49858c 100644 --- a/Classes/Domain/Finisher/Form/AddToCartFinisher.php +++ b/Classes/Domain/Finisher/Form/AddToCartFinisher.php @@ -37,7 +37,9 @@ public function __construct( protected ConfigurationManagerInterface $configurationManager, protected SessionHandler $sessionHandler, protected CartUtility $cartUtility, - protected EventDispatcherInterface $eventDispatcher + protected EventDispatcherInterface $eventDispatcher, + private readonly ExtensionService $extensionService, + private readonly FlashMessageService $flashMessageService ) { $this->configurations = $this->configurationManager->getConfiguration( ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK, @@ -109,8 +111,8 @@ protected function executeInternal(): ?string true ); - $extensionService = GeneralUtility::makeInstance(ExtensionService::class); - $flashMessageService = GeneralUtility::makeInstance(FlashMessageService::class); + $extensionService = $this->extensionService; + $flashMessageService = $this->flashMessageService; // todo: this value has to be taken from the request directly in the future $pluginNamespace = $extensionService->getPluginNamespace( diff --git a/Classes/Domain/Model/Cart/AbstractCartCoupon.php b/Classes/Domain/Model/Cart/AbstractCartCoupon.php index 1aa937eb..7035f8b9 100644 --- a/Classes/Domain/Model/Cart/AbstractCartCoupon.php +++ b/Classes/Domain/Model/Cart/AbstractCartCoupon.php @@ -25,8 +25,6 @@ abstract class AbstractCartCoupon implements CartCouponInterface protected bool $isCombinable = false; - protected bool $isRelativeDiscount = false; - public function setCart(Cart $cart): void { $this->cart = $cart; @@ -42,11 +40,6 @@ public function getCode(): string return $this->code; } - public function getCouponType(): string - { - return $this->couponType; - } - public function getCartMinPrice(): float { return $this->cartMinPrice; @@ -57,11 +50,6 @@ public function isCombinable(): bool return $this->isCombinable; } - public function isRelativeDiscount(): bool - { - return $this->isRelativeDiscount; - } - public function isUseable(): bool { return $this->cartMinPrice <= $this->cart->getGross(); diff --git a/Classes/Domain/Model/Cart/BeVariant.php b/Classes/Domain/Model/Cart/BeVariant.php index 98748db6..bdcdf84d 100644 --- a/Classes/Domain/Model/Cart/BeVariant.php +++ b/Classes/Domain/Model/Cart/BeVariant.php @@ -125,11 +125,9 @@ public function getTitle(): string public function getCompleteTitle(): string { - $title = ''; - if ($this->parent instanceof BeVariantInterface) { $title = $this->parent->getCompleteTitle(); - } elseif ($this->parent instanceof ProductInterface) { + } else { $title = $this->parent->getTitle(); } @@ -215,10 +213,8 @@ public function getPriceCalculated(): float if ($this->parent instanceof BeVariantInterface) { $parentPrice = $this->parent->getBestPrice(); - } elseif ($this->parent instanceof ProductInterface) { - $parentPrice = $this->parent->getBestPrice($this->getQuantity()); } else { - $parentPrice = 0.0; + $parentPrice = $this->parent->getBestPrice($this->getQuantity()); } if ($this->priceCalcMethod === 0) { @@ -295,11 +291,9 @@ public function getSku(): string public function getCompleteSku(): string { - $sku = ''; - if ($this->parent instanceof BeVariantInterface) { $sku = $this->parent->getCompleteSku(); - } elseif ($this->parent instanceof ProductInterface) { + } else { $sku = $this->parent->getSku(); } diff --git a/Classes/Domain/Model/Cart/Cart.php b/Classes/Domain/Model/Cart/Cart.php index e635b3aa..2b71d3d6 100644 --- a/Classes/Domain/Model/Cart/Cart.php +++ b/Classes/Domain/Model/Cart/Cart.php @@ -29,7 +29,7 @@ class Cart implements AdditionalDataInterface protected int $count; /** - * @var Product[] + * @var ProductInterface[] */ protected array $products = []; @@ -484,14 +484,14 @@ public function getServiceGross(): float } /** - * @return Product[] + * @return ProductInterface[] */ public function getProducts(): array { return $this->products; } - public function getProductById(string $productId): ?Product + public function getProductById(string $productId): ?ProductInterface { return $this->products[$productId] ?? null; } @@ -678,7 +678,7 @@ public function getDiscountTaxes(): array return $taxes; } - public function addProduct(Product $newProduct): void + public function addProduct(ProductInterface $newProduct): void { $id = $newProduct->getId(); @@ -695,7 +695,7 @@ public function addProduct(Product $newProduct): void } } - public function changeProduct(Product $product, Product $newProduct): void + public function changeProduct(ProductInterface $product, ProductInterface $newProduct): void { $newQuantity = $product->getQuantity() + $newProduct->getQuantity(); @@ -725,34 +725,32 @@ public function changeProductsQuantity(array $productQuantityArray): void foreach ($productQuantityArray as $productPuid => $quantity) { $product = $this->products[$productPuid]; - if ($product instanceof Product) { - if (is_array($quantity)) { + if (is_array($quantity)) { + $this->subCount($product->getQuantity()); + $this->subGross($product->getGross()); + $this->subNet($product->getNet()); + $this->subTax($product->getTax(), $product->getTaxClass()); + + $product->changeVariantsQuantity($quantity); + + $this->addCount($product->getQuantity()); + $this->addGross($product->getGross()); + $this->addNet($product->getNet()); + $this->addTax($product->getTax(), $product->getTaxClass()); + } else { + // only run, if quantity was realy changed + if ($product->getQuantity() != $quantity) { $this->subCount($product->getQuantity()); $this->subGross($product->getGross()); $this->subNet($product->getNet()); $this->subTax($product->getTax(), $product->getTaxClass()); - $product->changeVariantsQuantity($quantity); + $product->changeQuantity($quantity); $this->addCount($product->getQuantity()); $this->addGross($product->getGross()); $this->addNet($product->getNet()); $this->addTax($product->getTax(), $product->getTaxClass()); - } else { - // only run, if quantity was realy changed - if ($product->getQuantity() != $quantity) { - $this->subCount($product->getQuantity()); - $this->subGross($product->getGross()); - $this->subNet($product->getNet()); - $this->subTax($product->getTax(), $product->getTaxClass()); - - $product->changeQuantity($quantity); - - $this->addCount($product->getQuantity()); - $this->addGross($product->getGross()); - $this->addNet($product->getNet()); - $this->addTax($product->getTax(), $product->getTaxClass()); - } } } @@ -789,9 +787,9 @@ public function removeProductById(string $productId): bool return true; } - public function removeProduct(Product $product, array $productVariantIds = []): bool + public function removeProduct(ProductInterface $product, array $productVariantIds = []): bool { - if (is_array($productVariantIds) && !empty($productVariantIds)) { + if (!empty($productVariantIds)) { $product->removeBeVariants($productVariantIds); if (!$product->getBeVariants()) { @@ -811,7 +809,7 @@ public function removeProduct(Product $product, array $productVariantIds = []): return true; } - protected function addServiceAttributes(Product $newProduct): void + protected function addServiceAttributes(ProductInterface $newProduct): void { if ($this->maxServiceAttr1 < $newProduct->getServiceAttribute1()) { $this->maxServiceAttr1 = $newProduct->getServiceAttribute1(); diff --git a/Classes/Domain/Model/Cart/CartCouponInterface.php b/Classes/Domain/Model/Cart/CartCouponInterface.php index f1d0681a..3e9c3c7d 100644 --- a/Classes/Domain/Model/Cart/CartCouponInterface.php +++ b/Classes/Domain/Model/Cart/CartCouponInterface.php @@ -13,16 +13,14 @@ interface CartCouponInterface { - /** - * Returns the coupon title. - */ public function getTitle(): string; - /** - * Returns the coupon code. - */ public function getCode(): string; + public function getTaxClass(): TaxClass; + + public function setCart(Cart $cart): void; + /** * Returns true if a coupon can be combined with other coupons. */ diff --git a/Classes/Domain/Model/Cart/Product.php b/Classes/Domain/Model/Cart/Product.php index 58d9a08b..fd963f86 100644 --- a/Classes/Domain/Model/Cart/Product.php +++ b/Classes/Domain/Model/Cart/Product.php @@ -312,7 +312,7 @@ public function setQuantityDiscounts(array $quantityDiscounts): void /** * Returns Best Price (min of Price and Special Price) */ - public function getBestPrice(?int $quantity = null): ?float + public function getBestPrice(?int $quantity = null): float { $bestPrice = $this->getQuantityDiscountPrice($quantity); diff --git a/Classes/Domain/Model/Cart/Service.php b/Classes/Domain/Model/Cart/Service.php index ab39b10c..fd3dd0b9 100644 --- a/Classes/Domain/Model/Cart/Service.php +++ b/Classes/Domain/Model/Cart/Service.php @@ -202,12 +202,16 @@ public function getFallBackId(): ?int public function isAvailable(): bool { if (isset($this->config['available'])) { - $availableFrom = $this->config['available']['from']; - if (isset($availableFrom) && $this->cart->getGross() < (float)$availableFrom) { + if (isset($this->config['available']['from']) + && is_numeric($this->config['available']['from']) + && $this->cart->getGross() < (float)$this->config['available']['from'] + ) { return false; } - $availableUntil = $this->config['available']['until']; - if (isset($availableUntil) && $this->cart->getGross() > (float)$availableUntil) { + if (isset($this->config['available']['until']) + && is_numeric($this->config['available']['until']) + && $this->cart->getGross() > (float)$this->config['available']['until'] + ) { return false; } } diff --git a/Classes/Domain/Model/Order/AbstractAddress.php b/Classes/Domain/Model/Order/AbstractAddress.php index 8906247b..75dc3c22 100755 --- a/Classes/Domain/Model/Order/AbstractAddress.php +++ b/Classes/Domain/Model/Order/AbstractAddress.php @@ -15,7 +15,7 @@ use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; use TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy; -abstract class AbstractAddress extends AbstractEntity +abstract class AbstractAddress extends AbstractEntity implements AddressInterface { #[Lazy] protected LazyLoadingProxy|Item|null $item = null; diff --git a/Classes/Domain/Model/Order/AddressInterface.php b/Classes/Domain/Model/Order/AddressInterface.php new file mode 100644 index 00000000..648adb89 --- /dev/null +++ b/Classes/Domain/Model/Order/AddressInterface.php @@ -0,0 +1,90 @@ +shippingSameAsBilling = $shippingSameAsBilling; } - public function getBillingAddress(): ?BillingAddress + public function getBillingAddress(): ?AddressInterface { return $this->billingAddress; } - public function setBillingAddress(BillingAddress $billingAddress): void + public function setBillingAddress(AddressInterface $billingAddress): void { $this->billingAddress = $billingAddress; } - public function getShippingAddress(): ?ShippingAddress + public function getShippingAddress(): ?AddressInterface { return $this->shippingAddress; } - public function setShippingAddress(ShippingAddress $shippingAddress): void + public function setShippingAddress(AddressInterface $shippingAddress): void { $this->shippingAddress = $shippingAddress; } diff --git a/Classes/Domain/Model/Product/CategoryTrait.php b/Classes/Domain/Model/Product/CategoryTrait.php index cc0df96b..88dd1ca0 100644 --- a/Classes/Domain/Model/Product/CategoryTrait.php +++ b/Classes/Domain/Model/Product/CategoryTrait.php @@ -14,7 +14,7 @@ use TYPO3\CMS\Extbase\Domain\Model\Category; use TYPO3\CMS\Extbase\Persistence\ObjectStorage; -trait CategoryTrait +trait CategoryTrait // @phpstan-ignore trait.unused (provided for product extensions) { protected ?Category $category = null; diff --git a/Classes/Domain/Model/Product/FileAndImageTrait.php b/Classes/Domain/Model/Product/FileAndImageTrait.php index b5447e49..ff5ae5ba 100644 --- a/Classes/Domain/Model/Product/FileAndImageTrait.php +++ b/Classes/Domain/Model/Product/FileAndImageTrait.php @@ -13,7 +13,7 @@ use TYPO3\CMS\Extbase\Domain\Model\FileReference; use TYPO3\CMS\Extbase\Persistence\ObjectStorage; -trait FileAndImageTrait +trait FileAndImageTrait // @phpstan-ignore trait.unused (provided for product extensions) { /** * @var ObjectStorage diff --git a/Classes/Domain/Model/Product/MeasureTrait.php b/Classes/Domain/Model/Product/MeasureTrait.php index fb1931f7..eb5cac3a 100644 --- a/Classes/Domain/Model/Product/MeasureTrait.php +++ b/Classes/Domain/Model/Product/MeasureTrait.php @@ -9,7 +9,7 @@ * LICENSE file that was distributed with this source code. */ -trait MeasureTrait +trait MeasureTrait // @phpstan-ignore trait.unused (provided for product extensions) { protected float $priceMeasure = 0.0; diff --git a/Classes/Domain/Model/Product/ServiceAttributeTrait.php b/Classes/Domain/Model/Product/ServiceAttributeTrait.php index cf1face1..039c6e33 100644 --- a/Classes/Domain/Model/Product/ServiceAttributeTrait.php +++ b/Classes/Domain/Model/Product/ServiceAttributeTrait.php @@ -9,7 +9,7 @@ * LICENSE file that was distributed with this source code. */ -trait ServiceAttributeTrait +trait ServiceAttributeTrait // @phpstan-ignore trait.unused (provided for product extensions) { protected float $serviceAttribute1 = 0.0; diff --git a/Classes/Domain/Model/Product/StockTrait.php b/Classes/Domain/Model/Product/StockTrait.php index ffae62dc..b2e7c44f 100644 --- a/Classes/Domain/Model/Product/StockTrait.php +++ b/Classes/Domain/Model/Product/StockTrait.php @@ -11,7 +11,7 @@ * LICENSE file that was distributed with this source code. */ -trait StockTrait +trait StockTrait // @phpstan-ignore trait.unused (provided for product extensions) { protected bool $handleStock = false; diff --git a/Classes/Domain/Model/Product/TagTrait.php b/Classes/Domain/Model/Product/TagTrait.php index 23e238d3..22301e13 100644 --- a/Classes/Domain/Model/Product/TagTrait.php +++ b/Classes/Domain/Model/Product/TagTrait.php @@ -14,7 +14,7 @@ use Extcode\Cart\Domain\Model\Tag; use TYPO3\CMS\Extbase\Persistence\ObjectStorage; -trait TagTrait +trait TagTrait // @phpstan-ignore trait.unused (provided for product extensions) { /** * @var ObjectStorage diff --git a/Classes/Domain/Repository/Order/ProductAdditionalRepository.php b/Classes/Domain/Repository/Order/ProductAdditionalRepository.php index 56b65baa..e26778e1 100644 --- a/Classes/Domain/Repository/Order/ProductAdditionalRepository.php +++ b/Classes/Domain/Repository/Order/ProductAdditionalRepository.php @@ -33,7 +33,7 @@ public function findAllByAdditionalType(array $arguments = [], string $additiona } } - $constraint = $query->logicalAnd($and); + $constraint = $query->logicalAnd(...$and); $query->matching($constraint); return $query->execute(); diff --git a/Classes/Event/Cart/BeforeShowCartEvent.php b/Classes/Event/Cart/BeforeShowCartEvent.php index 88bc36d9..b18f091c 100644 --- a/Classes/Event/Cart/BeforeShowCartEvent.php +++ b/Classes/Event/Cart/BeforeShowCartEvent.php @@ -12,9 +12,8 @@ */ use Extcode\Cart\Domain\Model\Cart\Cart; -use Extcode\Cart\Domain\Model\Order\BillingAddress; +use Extcode\Cart\Domain\Model\Order\AddressInterface; use Extcode\Cart\Domain\Model\Order\Item; -use Extcode\Cart\Domain\Model\Order\ShippingAddress; use Psr\EventDispatcher\StoppableEventInterface; final class BeforeShowCartEvent implements StoppableEventInterface @@ -24,8 +23,8 @@ final class BeforeShowCartEvent implements StoppableEventInterface public function __construct( private Cart $cart, private ?Item $orderItem = null, - private ?BillingAddress $billingAddress = null, - private ?ShippingAddress $shippingAddress = null + private ?AddressInterface $billingAddress = null, + private ?AddressInterface $shippingAddress = null ) {} public function getCart(): Cart @@ -48,22 +47,22 @@ public function setOrderItem(Item $orderItem): void $this->orderItem = $orderItem; } - public function getBillingAddress(): ?BillingAddress + public function getBillingAddress(): ?AddressInterface { return $this->billingAddress; } - public function setBillingAddress(BillingAddress $billingAddress): void + public function setBillingAddress(AddressInterface $billingAddress): void { $this->billingAddress = $billingAddress; } - public function getShippingAddress(): ?ShippingAddress + public function getShippingAddress(): ?AddressInterface { return $this->shippingAddress; } - public function setShippingAddress(ShippingAddress $shippingAddress): void + public function setShippingAddress(AddressInterface $shippingAddress): void { $this->shippingAddress = $shippingAddress; } diff --git a/Classes/Event/Cart/UpdateCountryEvent.php b/Classes/Event/Cart/UpdateCountryEvent.php index 92bb889b..cf381e5b 100644 --- a/Classes/Event/Cart/UpdateCountryEvent.php +++ b/Classes/Event/Cart/UpdateCountryEvent.php @@ -12,13 +12,13 @@ */ use Extcode\Cart\Domain\Model\Cart\Cart; -use TYPO3\CMS\Extbase\Mvc\Request; +use TYPO3\CMS\Extbase\Mvc\RequestInterface; final readonly class UpdateCountryEvent implements UpdateCountryEventInterface { public function __construct( private Cart $cart, - private Request $request + private RequestInterface $request ) {} public function getCart(): Cart @@ -26,7 +26,7 @@ public function getCart(): Cart return $this->cart; } - public function getRequest(): Request + public function getRequest(): RequestInterface { return $this->request; } diff --git a/Classes/Event/Cart/UpdateCountryEventInterface.php b/Classes/Event/Cart/UpdateCountryEventInterface.php index 3fca882c..f6ea0adf 100644 --- a/Classes/Event/Cart/UpdateCountryEventInterface.php +++ b/Classes/Event/Cart/UpdateCountryEventInterface.php @@ -3,13 +3,13 @@ namespace Extcode\Cart\Event\Cart; use Extcode\Cart\Domain\Model\Cart\Cart; -use TYPO3\CMS\Extbase\Mvc\Request; +use TYPO3\CMS\Extbase\Mvc\RequestInterface; interface UpdateCountryEventInterface { - public function __construct(Cart $cart, Request $request); + public function __construct(Cart $cart, RequestInterface $request); public function getCart(): Cart; - public function getRequest(): Request; + public function getRequest(): RequestInterface; } diff --git a/Classes/Event/Cart/UpdateCurrencyEvent.php b/Classes/Event/Cart/UpdateCurrencyEvent.php index a9bdb2b4..481e6ca3 100644 --- a/Classes/Event/Cart/UpdateCurrencyEvent.php +++ b/Classes/Event/Cart/UpdateCurrencyEvent.php @@ -12,13 +12,13 @@ */ use Extcode\Cart\Domain\Model\Cart\Cart; -use TYPO3\CMS\Extbase\Mvc\Request; +use TYPO3\CMS\Extbase\Mvc\RequestInterface; final readonly class UpdateCurrencyEvent implements UpdateCurrencyEventInterface { public function __construct( private Cart $cart, - private Request $request, + private RequestInterface $request, private array $settings = [] ) {} @@ -27,7 +27,7 @@ public function getCart(): Cart return $this->cart; } - public function getRequest(): Request + public function getRequest(): RequestInterface { return $this->request; } diff --git a/Classes/Event/Cart/UpdateCurrencyEventInterface.php b/Classes/Event/Cart/UpdateCurrencyEventInterface.php index df64be90..f6118a66 100644 --- a/Classes/Event/Cart/UpdateCurrencyEventInterface.php +++ b/Classes/Event/Cart/UpdateCurrencyEventInterface.php @@ -3,15 +3,15 @@ namespace Extcode\Cart\Event\Cart; use Extcode\Cart\Domain\Model\Cart\Cart; -use TYPO3\CMS\Extbase\Mvc\Request; +use TYPO3\CMS\Extbase\Mvc\RequestInterface; interface UpdateCurrencyEventInterface { - public function __construct(Cart $cart, Request $request, array $settings); + public function __construct(Cart $cart, RequestInterface $request, array $settings); public function getCart(): Cart; - public function getRequest(): Request; + public function getRequest(): RequestInterface; public function getSettings(): array; } diff --git a/Classes/Event/CheckProductAvailabilityEvent.php b/Classes/Event/CheckProductAvailabilityEvent.php index 5d23c297..2c85e502 100644 --- a/Classes/Event/CheckProductAvailabilityEvent.php +++ b/Classes/Event/CheckProductAvailabilityEvent.php @@ -12,7 +12,7 @@ */ use Extcode\Cart\Domain\Model\Cart\Cart; -use Extcode\Cart\Domain\Model\Cart\Product; +use Extcode\Cart\Domain\Model\Cart\ProductInterface; use TYPO3\CMS\Core\Messaging\FlashMessage; class CheckProductAvailabilityEvent implements CheckProductAvailabilityEventInterface @@ -26,7 +26,7 @@ class CheckProductAvailabilityEvent implements CheckProductAvailabilityEventInte public function __construct( private readonly Cart $cart, - private readonly Product $product, + private readonly ProductInterface $product, private readonly mixed $quantity, private readonly string $mode = 'update' ) {} @@ -36,7 +36,7 @@ public function getCart(): Cart return $this->cart; } - public function getProduct(): Product + public function getProduct(): ProductInterface { return $this->product; } diff --git a/Classes/Event/CheckProductAvailabilityEventInterface.php b/Classes/Event/CheckProductAvailabilityEventInterface.php index b57bdaef..7ae61422 100644 --- a/Classes/Event/CheckProductAvailabilityEventInterface.php +++ b/Classes/Event/CheckProductAvailabilityEventInterface.php @@ -12,16 +12,21 @@ */ use Extcode\Cart\Domain\Model\Cart\Cart; -use Extcode\Cart\Domain\Model\Cart\Product; +use Extcode\Cart\Domain\Model\Cart\ProductInterface; use TYPO3\CMS\Core\Messaging\FlashMessage; interface CheckProductAvailabilityEventInterface { - public function __construct(Cart $cart, Product $product, $quantity, string $mode = 'update'); + public function __construct( + Cart $cart, + ProductInterface $product, + $quantity, + string $mode = 'update' + ); public function getCart(): Cart; - public function getProduct(): Product; + public function getProduct(): ProductInterface; public function getQuantity(); diff --git a/Classes/Event/RetrieveProductsFromRequestEvent.php b/Classes/Event/RetrieveProductsFromRequestEvent.php index b296b4b6..5ad1d5b5 100644 --- a/Classes/Event/RetrieveProductsFromRequestEvent.php +++ b/Classes/Event/RetrieveProductsFromRequestEvent.php @@ -14,7 +14,7 @@ use Extcode\Cart\Domain\Model\Cart\Cart; use Extcode\Cart\Domain\Model\Cart\Product; use TYPO3\CMS\Core\Messaging\FlashMessage; -use TYPO3\CMS\Extbase\Mvc\Request; +use TYPO3\CMS\Extbase\Mvc\RequestInterface; final class RetrieveProductsFromRequestEvent implements RetrieveProductsFromRequestEventInterface { @@ -31,7 +31,7 @@ final class RetrieveProductsFromRequestEvent implements RetrieveProductsFromRequ private array $products = []; public function __construct( - private readonly Request $request, + private readonly RequestInterface $request, private readonly Cart $cart ) {} @@ -40,7 +40,7 @@ public function getCart(): Cart return $this->cart; } - public function getRequest(): Request + public function getRequest(): RequestInterface { return $this->request; } diff --git a/Classes/Event/RetrieveProductsFromRequestEventInterface.php b/Classes/Event/RetrieveProductsFromRequestEventInterface.php index 210e0075..7424af71 100644 --- a/Classes/Event/RetrieveProductsFromRequestEventInterface.php +++ b/Classes/Event/RetrieveProductsFromRequestEventInterface.php @@ -13,15 +13,15 @@ use Extcode\Cart\Domain\Model\Cart\Cart; use Psr\EventDispatcher\StoppableEventInterface; -use TYPO3\CMS\Extbase\Mvc\Request; +use TYPO3\CMS\Extbase\Mvc\RequestInterface; interface RetrieveProductsFromRequestEventInterface extends StoppableEventInterface { - public function __construct(Request $request, Cart $cart); + public function __construct(RequestInterface $request, Cart $cart); public function getCart(): Cart; - public function getRequest(): Request; + public function getRequest(): RequestInterface; public function getProducts(): array; diff --git a/Classes/Event/Session/AfterRestoreAddressEvent.php b/Classes/Event/Session/AfterRestoreAddressEvent.php index bac93f87..1998df1a 100644 --- a/Classes/Event/Session/AfterRestoreAddressEvent.php +++ b/Classes/Event/Session/AfterRestoreAddressEvent.php @@ -11,21 +11,21 @@ * LICENSE file that was distributed with this source code. */ -use Extcode\Cart\Domain\Model\Order\AbstractAddress; +use Extcode\Cart\Domain\Model\Order\AddressInterface; use Psr\EventDispatcher\StoppableEventInterface; final class AfterRestoreAddressEvent implements StoppableEventInterface { private bool $isPropagationStopped = false; - public function __construct(private AbstractAddress $address) {} + public function __construct(private AddressInterface $address) {} - public function getAddress(): AbstractAddress + public function getAddress(): AddressInterface { return $this->address; } - public function setCart(AbstractAddress $address): void + public function setCart(AddressInterface $address): void { $this->address = $address; } diff --git a/Classes/Event/Session/BeforeWriteAddressEvent.php b/Classes/Event/Session/BeforeWriteAddressEvent.php index 13972bb4..2145e6c4 100644 --- a/Classes/Event/Session/BeforeWriteAddressEvent.php +++ b/Classes/Event/Session/BeforeWriteAddressEvent.php @@ -11,21 +11,21 @@ * LICENSE file that was distributed with this source code. */ -use Extcode\Cart\Domain\Model\Order\AbstractAddress; +use Extcode\Cart\Domain\Model\Order\AddressInterface; use Psr\EventDispatcher\StoppableEventInterface; final class BeforeWriteAddressEvent implements StoppableEventInterface { private bool $isPropagationStopped = false; - public function __construct(private AbstractAddress $address) {} + public function __construct(private AddressInterface $address) {} - public function getAddress(): AbstractAddress + public function getAddress(): AddressInterface { return $this->address; } - public function setCart(AbstractAddress $address): void + public function setCart(AddressInterface $address): void { $this->address = $address; } diff --git a/Classes/EventListener/Order/Create/Number.php b/Classes/EventListener/Order/Create/Number.php index ba1727c4..0d4a7cb2 100644 --- a/Classes/EventListener/Order/Create/Number.php +++ b/Classes/EventListener/Order/Create/Number.php @@ -19,25 +19,11 @@ abstract class Number { - protected PersistenceManager $persistenceManager; - - protected OrderItemRepository $orderItemRepository; - - protected array $options; - abstract protected function getRegistryName(NumberGeneratorEventInterface $event): string; abstract public function __invoke(NumberGeneratorEventInterface $event): void; - public function __construct( - PersistenceManager $persistenceManager, - OrderItemRepository $orderItemRepository, - array $options = [] - ) { - $this->persistenceManager = $persistenceManager; - $this->orderItemRepository = $orderItemRepository; - $this->options = $options; - } + public function __construct(protected PersistenceManager $persistenceManager, protected OrderItemRepository $orderItemRepository, protected array $options = []) {} protected function generateNumber(NumberGeneratorEventInterface $event): string { diff --git a/Classes/EventListener/Order/Create/PersistOrder/Item.php b/Classes/EventListener/Order/Create/PersistOrder/Item.php index 7b245c32..b920f16f 100644 --- a/Classes/EventListener/Order/Create/PersistOrder/Item.php +++ b/Classes/EventListener/Order/Create/PersistOrder/Item.php @@ -17,7 +17,6 @@ use Extcode\Cart\Domain\Repository\Order\ShippingAddressRepository; use Extcode\Cart\Event\Order\PersistOrderEvent; use TYPO3\CMS\Core\Context\Context; -use TYPO3\CMS\Core\Context\UserAspect; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager; @@ -27,7 +26,8 @@ public function __construct( private readonly PersistenceManager $persistenceManager, private readonly ItemRepository $itemRepository, private readonly BillingAddressRepository $billingAddressRepository, - private readonly ShippingAddressRepository $shippingAddressRepository + private readonly ShippingAddressRepository $shippingAddressRepository, + private readonly Context $context ) {} public function __invoke(PersistOrderEvent $event): void @@ -39,12 +39,9 @@ public function __invoke(PersistOrderEvent $event): void $orderItem->setPid($storagePid); - $userAspect = GeneralUtility::makeInstance(Context::class)->getAspect('frontend.user'); + $userAspect = $this->context->getAspect('frontend.user'); - if ( - $userAspect instanceof UserAspect - && $userAspect->isLoggedIn() - ) { + if ($userAspect->isLoggedIn()) { $frontendUserRepository = GeneralUtility::makeInstance( FrontendUserRepository::class ); diff --git a/Classes/EventListener/Order/Finish/ClearCart.php b/Classes/EventListener/Order/Finish/ClearCart.php index 88fbd26b..c4c2c6a1 100644 --- a/Classes/EventListener/Order/Finish/ClearCart.php +++ b/Classes/EventListener/Order/Finish/ClearCart.php @@ -33,7 +33,7 @@ public function __invoke(EventInterface $event): void $settings = $event->getSettings(); $paymentId = $cart->getPayment()->getId(); - $paymentSettings = $this->paymentMethodsService->getConfigurationsForType('payments', $cart->getBillingCountry()); + $paymentSettings = $this->paymentMethodsService->getPaymentMethods($cart); if ((int)($paymentSettings['options'][$paymentId]['preventClearCart'] ?? 0) != 1) { $cartPid = $settings['settings']['cart']['pid']; diff --git a/Classes/EventListener/Order/Finish/Email.php b/Classes/EventListener/Order/Finish/Email.php index e8dcc94b..48878104 100644 --- a/Classes/EventListener/Order/Finish/Email.php +++ b/Classes/EventListener/Order/Finish/Email.php @@ -34,13 +34,13 @@ public function __invoke(EventInterface $event): void if ( method_exists($paymentMethod, 'isBuyerEmailDisabled') === false - || (method_exists($paymentMethod, 'isBuyerEmailDisabled') && $paymentMethod->isBuyerEmailDisabled() === false) + || $paymentMethod->isBuyerEmailDisabled() === false ) { $this->sendBuyerMail($orderItem, $event->getCart()); } if ( method_exists($paymentMethod, 'isSellerEmailDisabled') === false - || (method_exists($paymentMethod, 'isSellerEmailDisabled') && $paymentMethod->isSellerEmailDisabled() === false) + || $paymentMethod->isSellerEmailDisabled() === false ) { $this->sendSellerMail($orderItem, $event->getCart()); } diff --git a/Classes/EventListener/Template/Components/ModifyButtonBar.php b/Classes/EventListener/Template/Components/ModifyButtonBar.php index ed6b3dad..b9f3a853 100644 --- a/Classes/EventListener/Template/Components/ModifyButtonBar.php +++ b/Classes/EventListener/Template/Components/ModifyButtonBar.php @@ -31,7 +31,7 @@ public function __invoke(ModifyButtonBarEvent $event): void } } - private function modifyListActionButtons(ModifyButtonBarEvent $event) + private function modifyListActionButtons(ModifyButtonBarEvent $event): void { $event->setButtons( array_merge( @@ -51,7 +51,7 @@ private function modifyListActionButtons(ModifyButtonBarEvent $event) ); } - private function modifyShowActionButtons(ModifyButtonBarEvent $event) + private function modifyShowActionButtons(ModifyButtonBarEvent $event): void { $event->setButtons( array_merge( diff --git a/Classes/Service/SessionHandler.php b/Classes/Service/SessionHandler.php index 804c7d01..48ac5cab 100644 --- a/Classes/Service/SessionHandler.php +++ b/Classes/Service/SessionHandler.php @@ -10,7 +10,7 @@ */ use Extcode\Cart\Domain\Model\Cart\Cart; -use Extcode\Cart\Domain\Model\Order\AbstractAddress; +use Extcode\Cart\Domain\Model\Order\AddressInterface; use Extcode\Cart\Event\Session\AfterRestoreAddressEvent; use Extcode\Cart\Event\Session\AfterRestoreCartEvent; use Extcode\Cart\Event\Session\BeforeWriteAddressEvent; @@ -72,15 +72,15 @@ public function clearCart(string $key): void } /** - * restore an AbstractAddress object from session + * restore an AddressInterface object from session */ - public function restoreAddress(string $key): ?AbstractAddress + public function restoreAddress(string $key): ?AddressInterface { $sessionData = $this->frontendUserAuthentication->getKey('ses', $this->prefixKey . $key); if (is_string($sessionData)) { $address = unserialize($sessionData); - if ($address instanceof AbstractAddress) { + if ($address instanceof AddressInterface) { $afterRestoreAddressEvent = new AfterRestoreAddressEvent($address); $this->eventDispatcher->dispatch($afterRestoreAddressEvent); return $address; @@ -91,9 +91,9 @@ public function restoreAddress(string $key): ?AbstractAddress } /** - * writes an AbstractAddress object to session + * writes an AddressInterface object to session */ - public function writeAddress(string $key, AbstractAddress $address): void + public function writeAddress(string $key, AddressInterface $address): void { $beforeWriteAddressEvent = new BeforeWriteAddressEvent($address); $this->eventDispatcher->dispatch($beforeWriteAddressEvent); diff --git a/Classes/Service/TaxClassService.php b/Classes/Service/TaxClassService.php index a1615a45..65ff9000 100644 --- a/Classes/Service/TaxClassService.php +++ b/Classes/Service/TaxClassService.php @@ -39,8 +39,7 @@ public function getTaxClasses(?string $countryCode = null): array $taxClassSettings = $this->settings['taxClasses']; if ( - is_null($countryCode) === false - && array_key_exists($countryCode, $taxClassSettings) + array_key_exists($countryCode, $taxClassSettings) && is_array($taxClassSettings[$countryCode]) ) { $taxClassSettings = $taxClassSettings[$countryCode]; diff --git a/Classes/Updates/ExtcodeCartCTypeMigration.php b/Classes/Updates/ExtcodeCartCTypeMigration.php new file mode 100644 index 00000000..e43fa680 --- /dev/null +++ b/Classes/Updates/ExtcodeCartCTypeMigration.php @@ -0,0 +1,36 @@ + 'cart_cart', + ]; + } +} diff --git a/Classes/Updates/ListTypeToCTypeUpdate.php b/Classes/Updates/ListTypeToCTypeUpdate.php index 2f046f3a..cc231681 100644 --- a/Classes/Updates/ListTypeToCTypeUpdate.php +++ b/Classes/Updates/ListTypeToCTypeUpdate.php @@ -1,9 +1,8 @@ sessionHandler->restoreCart($cartSettings['pid']); - $event = new UpdateCountryEvent($cart, $request); + $event = new UpdateCountryEvent( + $cart, + $request + ); $this->eventDispatcher->dispatch($event); $this->sessionHandler->writeCart($cartSettings['pid'], $event->getCart()); @@ -87,7 +93,7 @@ public function getNewCart(array $configurations): Cart } if (!isset($currency) || !is_array($currency) || !isset($currency['code']) || !isset($currency['sign']) || !isset($currency['translation'])) { - throw new \InvalidArgumentException('Add propper currency TypoScript configuration.'); + throw new \InvalidArgumentException('Add propper currency TypoScript configuration.', 5910386141); } // TODO: Throw exception if no currency setting is available or make an default because creating a new cart need diff --git a/Classes/Utility/CurrencyUtility.php b/Classes/Utility/CurrencyUtility.php index a92b9f10..e0099945 100644 --- a/Classes/Utility/CurrencyUtility.php +++ b/Classes/Utility/CurrencyUtility.php @@ -12,7 +12,7 @@ use Extcode\Cart\Event\Cart\UpdateCurrencyEvent; use Extcode\Cart\Service\SessionHandler; use Psr\EventDispatcher\EventDispatcherInterface; -use TYPO3\CMS\Extbase\Mvc\Request; +use TYPO3\CMS\Extbase\Mvc\RequestInterface; class CurrencyUtility { @@ -21,11 +21,18 @@ public function __construct( protected SessionHandler $sessionHandler ) {} - public function updateCurrency(array $cartSettings, array $pluginSettings, Request $request): void - { + public function updateCurrency( + array $cartSettings, + array $pluginSettings, + RequestInterface $request + ): void { $cart = $this->sessionHandler->restoreCart($cartSettings['pid']); - $event = new UpdateCurrencyEvent($cart, $request, $pluginSettings['settings']['currencies']); + $event = new UpdateCurrencyEvent( + $cart, + $request, + $pluginSettings['settings']['currencies'] + ); $this->eventDispatcher->dispatch($event); $this->sessionHandler->writeCart($cartSettings['pid'], $event->getCart()); diff --git a/Classes/Validation/Validator/EmptyValidator.php b/Classes/Validation/Validator/EmptyValidator.php index 3f992295..7319803d 100644 --- a/Classes/Validation/Validator/EmptyValidator.php +++ b/Classes/Validation/Validator/EmptyValidator.php @@ -39,7 +39,7 @@ public function isValid(mixed $value): void ); } elseif ( is_string($value) - && $value != '' + && !empty($value) ) { $this->addError( $this->translateErrorMessage( @@ -59,7 +59,11 @@ public function isValid(mixed $value): void ), 1500493650 ); - } elseif (is_object($value) && $value instanceof \Countable && $value->count() != 0) { + } elseif ( + is_object($value) + && $value instanceof \Countable + && $value->count() != 0 + ) { $this->addError( $this->translateErrorMessage( 'validator.empty.notempty', diff --git a/Classes/ViewHelpers/IncludeFileViewHelper.php b/Classes/ViewHelpers/IncludeFileViewHelper.php index 3b83421f..e33ee4b4 100644 --- a/Classes/ViewHelpers/IncludeFileViewHelper.php +++ b/Classes/ViewHelpers/IncludeFileViewHelper.php @@ -8,6 +8,8 @@ * For the full copyright and license information, please read the * LICENSE file that was distributed with this source code. */ + +use Psr\Log\LogLevel; use TYPO3\CMS\Core\Http\ApplicationType; use TYPO3\CMS\Core\Page\PageRenderer; use TYPO3\CMS\Core\Resource\Exception\FileDoesNotExistException; @@ -15,12 +17,17 @@ use TYPO3\CMS\Core\Resource\Exception\InvalidFileNameException; use TYPO3\CMS\Core\Resource\Exception\InvalidPathException; use TYPO3\CMS\Core\TimeTracker\TimeTracker; -use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Frontend\Resource\FilePathSanitizer; use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; class IncludeFileViewHelper extends AbstractViewHelper { + public function __construct( + private readonly PageRenderer $pageRenderer, + private readonly TimeTracker $timeTracker, + private readonly FilePathSanitizer $filePathSanitizer, + ) {} + public function initializeArguments(): void { parent::initializeArguments(); @@ -48,16 +55,16 @@ public function render(): void $path = $this->arguments['path']; $compress = $this->arguments['compress']; - $pageRenderer = GeneralUtility::makeInstance(PageRenderer::class); + $pageRenderer = $this->pageRenderer; if (ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isFrontend()) { try { - $path = GeneralUtility::makeInstance(FilePathSanitizer::class)->sanitize((string)$path); + $path = $this->filePathSanitizer->sanitize((string)$path); } catch (InvalidFileNameException) { $path = null; } catch (InvalidPathException|FileDoesNotExistException|InvalidFileException $e) { $path = null; if ($GLOBALS['TSFE']->tmpl->tt_track) { - GeneralUtility::makeInstance(TimeTracker::class)->setTSlogMessage($e->getMessage(), 3); + $this->timeTracker->setTSlogMessage($e->getMessage(), LogLevel::ERROR); } } } diff --git a/Classes/ViewHelpers/MetaTagViewHelper.php b/Classes/ViewHelpers/MetaTagViewHelper.php index 01c91e6e..690362a3 100644 --- a/Classes/ViewHelpers/MetaTagViewHelper.php +++ b/Classes/ViewHelpers/MetaTagViewHelper.php @@ -10,7 +10,6 @@ */ use TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry; -use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; /** @@ -27,6 +26,7 @@ class MetaTagViewHelper extends AbstractViewHelper { protected string $tagName = 'meta'; + public function __construct(private readonly MetaTagManagerRegistry $metaTagManagerRegistry) {} public function initializeArguments(): void { @@ -46,7 +46,7 @@ public function initializeArguments(): void public function render(): void { - $metaTagManager = GeneralUtility::makeInstance(MetaTagManagerRegistry::class) + $metaTagManager = $this->metaTagManagerRegistry ->getManagerForProperty($this->arguments['property']); $metaTagManager->addProperty( $this->arguments['property'], diff --git a/Classes/ViewHelpers/TitleTagViewHelper.php b/Classes/ViewHelpers/TitleTagViewHelper.php index a4f56815..4e801b4f 100644 --- a/Classes/ViewHelpers/TitleTagViewHelper.php +++ b/Classes/ViewHelpers/TitleTagViewHelper.php @@ -12,32 +12,33 @@ namespace Extcode\Cart\ViewHelpers; use Extcode\Cart\PageTitle\PageTitleProvider; -use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface; use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; -use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic; /** * ViewHelper to render the page title */ class TitleTagViewHelper extends AbstractViewHelper { - use CompileWithRenderStatic; + public function __construct( + private readonly PageTitleProvider $pageTitleProvider, + ) {} public function initializeArguments(): void { parent::initializeArguments(); - $this->registerArgument('pageTitle', 'String', 'The page title'); + + $this->registerArgument( + 'pageTitle', + 'String', + 'The page title' + ); } - public static function renderStatic( - array $arguments, - \Closure $renderChildrenClosure, - RenderingContextInterface $renderingContext - ): void { + public function render(): void + { $pageTitle = $arguments['pageTitle'] ?? ''; if ($pageTitle !== '') { - GeneralUtility::makeInstance(PageTitleProvider::class)->setTitle($pageTitle); + $this->pageTitleProvider->setTitle($pageTitle); } } } diff --git a/Classes/ViewHelpers/Traversable/ExtractViewHelper.php b/Classes/ViewHelpers/Traversable/ExtractViewHelper.php index e75daa7b..6713a2be 100644 --- a/Classes/ViewHelpers/Traversable/ExtractViewHelper.php +++ b/Classes/ViewHelpers/Traversable/ExtractViewHelper.php @@ -25,7 +25,7 @@ public function initializeArguments(): void ); $this->registerArgument( 'content', - \Traversable::class, + 'array', 'Content', false ); diff --git a/Classes/Widgets/PaymentPaidShippingOpen.php b/Classes/Widgets/PaymentPaidShippingOpen.php index 81990dc1..5821795e 100644 --- a/Classes/Widgets/PaymentPaidShippingOpen.php +++ b/Classes/Widgets/PaymentPaidShippingOpen.php @@ -17,12 +17,11 @@ use TYPO3\CMS\Dashboard\Widgets\RequestAwareWidgetInterface; use TYPO3\CMS\Dashboard\Widgets\WidgetConfigurationInterface; use TYPO3\CMS\Dashboard\Widgets\WidgetInterface; -use TYPO3\CMS\Fluid\View\StandaloneView; class PaymentPaidShippingOpen implements WidgetInterface, RequestAwareWidgetInterface { private ServerRequestInterface $request; - private StandaloneView|ViewInterface $view; + private ViewInterface $view; public function __construct( private readonly WidgetConfigurationInterface $configuration, diff --git a/Classes/Widgets/Provider/OrdersPerDayProvider.php b/Classes/Widgets/Provider/OrdersPerDayProvider.php index d810e81f..553277b9 100644 --- a/Classes/Widgets/Provider/OrdersPerDayProvider.php +++ b/Classes/Widgets/Provider/OrdersPerDayProvider.php @@ -113,11 +113,8 @@ public function getOrderItemsInPeriod(int $start, int $end): int $this->queryBuilder ->count('*') - ->from('tx_cart_domain_model_order_item'); - - if ($constraints !== []) { - $this->queryBuilder->where(... $constraints); - } + ->from('tx_cart_domain_model_order_item') + ->where(... $constraints); return $this->queryBuilder->executeQuery()->fetchOne(); } diff --git a/Classes/Widgets/Provider/TurnoverPerDayProvider.php b/Classes/Widgets/Provider/TurnoverPerDayProvider.php index 9b69ae34..86ee2d9c 100644 --- a/Classes/Widgets/Provider/TurnoverPerDayProvider.php +++ b/Classes/Widgets/Provider/TurnoverPerDayProvider.php @@ -95,11 +95,8 @@ public function getOrderItemsInPeriod(int $start, int $end): float ->selectLiteral( $this->queryBuilder->expr()->sum('tx_cart_domain_model_order_item.' . $this->options['sum'], 'turnover') ) - ->from('tx_cart_domain_model_order_item'); - - if ($constraints !== []) { - $this->queryBuilder->where(... $constraints); - } + ->from('tx_cart_domain_model_order_item') + ->where(... $constraints); return $this->queryBuilder->executeQuery()->fetchOne() ?? 0; } diff --git a/Configuration/Icons.php b/Configuration/Icons.php index 5a0afe74..47ff99a3 100644 --- a/Configuration/Icons.php +++ b/Configuration/Icons.php @@ -1,28 +1,30 @@ [ - 'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class, + 'provider' => SvgIconProvider::class, 'source' => 'EXT:cart/Resources/Public/Icons/apps_pagetree_folder_cart_coupons.svg', ], 'apps-pagetree-folder-cart-orders' => [ - 'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class, + 'provider' => SvgIconProvider::class, 'source' => 'EXT:cart/Resources/Public/Icons/apps_pagetree_folder_cart_orders.svg', ], 'apps-pagetree-page-cart-cart' => [ - 'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class, + 'provider' => SvgIconProvider::class, 'source' => 'EXT:cart/Resources/Public/Icons/apps_pagetree_page_cart_cart.svg', ], 'ext-cart-wizard-icon' => [ - 'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class, + 'provider' => SvgIconProvider::class, 'source' => 'EXT:cart/Resources/Public/Icons/cart_plugin_wizard.svg', ], 'ext-cart-module' => [ - 'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class, + 'provider' => SvgIconProvider::class, 'source' => 'EXT:cart/Resources/Public/Icons/module.svg', ], 'ext-cart-module-order' => [ - 'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class, + 'provider' => SvgIconProvider::class, 'source' => 'EXT:cart/Resources/Public/Icons/module_orders.svg', ], ]; diff --git a/Configuration/Services.php b/Configuration/Services.php index 7579a4ec..054fd57d 100644 --- a/Configuration/Services.php +++ b/Configuration/Services.php @@ -4,11 +4,15 @@ namespace Extcode\Cart\Configuration; +use Extcode\Cart\Hooks\ItemsProcFunc; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; +use TYPO3\CMS\Dashboard\Widgets\BarChartWidget; +use TYPO3\CMS\Form\Mvc\Configuration\ConfigurationManager; +use TYPO3\CMS\Form\Mvc\Persistence\FormPersistenceManager; return function (ContainerConfigurator $containerConfigurator, ContainerBuilder $containerBuilder) { - if ($containerBuilder->hasDefinition('TYPO3\CMS\Dashboard\Widgets\BarChartWidget')) { + if ($containerBuilder->hasDefinition(BarChartWidget::class)) { $containerConfigurator->import('Backend/Provider/PaymentPaidShippingOpenProvider.php'); $containerConfigurator->import('Backend/Widgets/PaymentPaidShippingOpenWidget.php'); @@ -20,12 +24,12 @@ } if ( - $containerBuilder->hasDefinition('TYPO3\CMS\Form\Mvc\Configuration\ConfigurationManager') - && $containerBuilder->hasDefinition('TYPO3\CMS\Form\Mvc\Persistence\FormPersistenceManager') + $containerBuilder->hasDefinition(ConfigurationManager::class) + && $containerBuilder->hasDefinition(FormPersistenceManager::class) ) { $services = $containerConfigurator->services(); - $services->set('Extcode\Cart\Hooks\ItemsProcFunc') + $services->set(ItemsProcFunc::class) ->public(); } diff --git a/Configuration/TCA/Overrides/tt_content.php b/Configuration/TCA/Overrides/tt_content.php index d191504d..6d70cc95 100644 --- a/Configuration/TCA/Overrides/tt_content.php +++ b/Configuration/TCA/Overrides/tt_content.php @@ -2,7 +2,6 @@ defined('TYPO3') or die(); -use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Utility\ExtensionUtility; @@ -27,28 +26,21 @@ foreach ($pluginNames as $pluginName => $pluginConfig) { $pluginSignature = 'cart_' . strtolower($pluginName); + $flexFormPath = 'EXT:cart/Configuration/FlexForms/' . $pluginName . 'Plugin.xml'; + if (file_exists(GeneralUtility::getFileAbsFileName($flexFormPath))) { + $flexFormPath = 'FILE:' . $flexFormPath; + } else { + $flexFormPath = ''; + } + ExtensionUtility::registerPlugin( 'Cart', $pluginName, $_LLL_db . 'tx_cart.plugin.' . $pluginSignature, $pluginConfig['iconIdentifier'], - 'cart' + 'cart', + $_LLL_db . 'tx_cart.plugin.' . $pluginSignature . '.description', + $flexFormPath ); - - $flexFormPath = 'EXT:cart/Configuration/FlexForms/' . $pluginName . 'Plugin.xml'; - if (file_exists(GeneralUtility::getFileAbsFileName($flexFormPath))) { - ExtensionManagementUtility::addPiFlexFormValue( - '*', - 'FILE:' . $flexFormPath, - $pluginSignature - ); - // Add the FlexForm to the show item list - ExtensionManagementUtility::addToAllTCAtypes( - 'tt_content', - '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin, pi_flexform', - $pluginSignature, - 'after:palette:headers' - ); - } } }); diff --git a/Tests/Functional/Command/OrderItemCleanupCommandTest.php b/Tests/Functional/Command/OrderItemCleanupCommandTest.php index d6c95fcd..25ea83a9 100644 --- a/Tests/Functional/Command/OrderItemCleanupCommandTest.php +++ b/Tests/Functional/Command/OrderItemCleanupCommandTest.php @@ -33,16 +33,16 @@ public function doesNotDeletesRecordsCreatedAfterCutOffDate(): void (new PhpDataSet())->import([ 'tx_cart_domain_model_order_item' => [ [ - 'crdate' => (int)(new DateTimeImmutable('2026-01-21'))->format('U'), + 'crdate' => (new DateTimeImmutable('2026-01-21'))->format('U'), ], [ - 'crdate' => (int)(new DateTimeImmutable('2025-01-21'))->format('U'), + 'crdate' => (new DateTimeImmutable('2025-01-21'))->format('U'), ], [ - 'crdate' => (int)(new DateTimeImmutable('2025-01-02'))->format('U'), + 'crdate' => (new DateTimeImmutable('2025-01-02'))->format('U'), ], [ - 'crdate' => (int)(new DateTimeImmutable('2025-01-01'))->format('U'), + 'crdate' => (new DateTimeImmutable('2025-01-01'))->format('U'), ], ], ]); @@ -67,10 +67,10 @@ public function deletesRecordsCreatedBeforeCutOffDate(): void (new PhpDataSet())->import([ 'tx_cart_domain_model_order_item' => [ [ - 'crdate' => (int)(new DateTimeImmutable('2024-12-31'))->format('U'), + 'crdate' => (new DateTimeImmutable('2024-12-31'))->format('U'), ], [ - 'crdate' => (int)(new DateTimeImmutable('2024-10-12'))->format('U'), + 'crdate' => (new DateTimeImmutable('2024-10-12'))->format('U'), ], ], ]); @@ -94,62 +94,62 @@ public function deletesRelatedRecordsCreatedBeforeCutOffDate(): void (new PhpDataSet())->import([ 'tx_cart_domain_model_order_item' => [ [ - 'uid' => 10, - 'products' => 2, - 'billing_address' => 1, - 'shipping_address' => 1, - 'payment' => 1, - 'shipping' => 1, - 'tax_class' => 3, - 'crdate' => (int)(new DateTimeImmutable('2024-12-31'))->format('U'), + 'uid' => '10', + 'products' => '2', + 'billing_address' => '1', + 'shipping_address' => '1', + 'payment' => '1', + 'shipping' => '1', + 'tax_class' => '3', + 'crdate' => (new DateTimeImmutable('2024-12-31'))->format('U'), ], ], 'tx_cart_domain_model_order_product' => [ [ - 'uid' => 1, - 'item' => 10, + 'uid' => '1', + 'item' => '10', ], [ - 'uid' => 2, - 'item' => 10, + 'uid' => '2', + 'item' => '10', ], ], 'tx_cart_domain_model_order_address' => [ [ - 'uid' => 100, - 'item' => 10, + 'uid' => '100', + 'item' => '10', 'record_type' => '\\' . BillingAddress::class, ], [ - 'uid' => 101, - 'item' => 10, + 'uid' => '101', + 'item' => '10', 'record_type' => '\\' . ShippingAddress::class, ], ], 'tx_cart_domain_model_order_payment' => [ [ - 'uid' => 30, - 'item' => 10, + 'uid' => '30', + 'item' => '10', ], ], 'tx_cart_domain_model_order_shipping' => [ [ - 'uid' => 30, - 'item' => 10, + 'uid' => '30', + 'item' => '10', ], ], 'tx_cart_domain_model_order_taxclass' => [ [ - 'uid' => 30, - 'item' => 10, + 'uid' => '30', + 'item' => '10', ], [ - 'uid' => 31, - 'item' => 10, + 'uid' => '31', + 'item' => '10', ], [ - 'uid' => 32, - 'item' => 10, + 'uid' => '32', + 'item' => '10', ], ], ]); @@ -186,78 +186,78 @@ public function doesNotDeletesNotRelatedRecordsCreatedBeforeCutOffDate(): void (new PhpDataSet())->import([ 'tx_cart_domain_model_order_item' => [ [ - 'uid' => 10, - 'products' => 2, - 'billing_address' => 1, - 'shipping_address' => 1, - 'payment' => 1, - 'shipping' => 1, - 'tax_class' => 3, - 'crdate' => (int)(new DateTimeImmutable('2024-12-31'))->format('U'), + 'uid' => '10', + 'products' => '2', + 'billing_address' => '1', + 'shipping_address' => '1', + 'payment' => '1', + 'shipping' => '1', + 'tax_class' => '3', + 'crdate' => (new DateTimeImmutable('2024-12-31'))->format('U'), ], ], 'tx_cart_domain_model_order_product' => [ [ - 'uid' => 1, - 'item' => 9, + 'uid' => '1', + 'item' => '9', ], [ - 'uid' => 2, - 'item' => 11, + 'uid' => '2', + 'item' => '11', ], ], 'tx_cart_domain_model_order_address' => [ [ - 'item' => 9, + 'item' => '9', 'record_type' => '\\' . BillingAddress::class, ], [ - 'item' => 9, + 'item' => '9', 'record_type' => '\\' . ShippingAddress::class, ], [ - 'item' => 11, + 'item' => '11', 'record_type' => '\\' . BillingAddress::class, ], [ - 'item' => 11, + 'item' => '11', 'record_type' => '\\' . ShippingAddress::class, ], ], 'tx_cart_domain_model_order_payment' => [ [ - 'item' => 9, + 'item' => '9', ], [ - 'item' => 11, + 'item' => '11', ], ], 'tx_cart_domain_model_order_shipping' => [ [ - 'item' => 9, + 'item' => '9', ], [ - 'item' => 11, + 'item' => '11', ], ], 'tx_cart_domain_model_order_taxclass' => [ [ - 'item' => 9, + 'item' => '9', ], [ - 'item' => 9, + 'item' => '9', ], [ - 'item' => 9, + 'item' => '9', ], [ - 'item' => 11, + 'item' => '11', ], [ - 'item' => 11, + 'item' => '11', ], [ - 'item' => 11, + 'item' => '11', ], ], ]); diff --git a/Tests/Functional/EventListener/Mail/AttachmentFromTypoScriptTest.php b/Tests/Functional/EventListener/Mail/AttachmentFromTypoScriptTest.php index 2f971431..1a6a277d 100644 --- a/Tests/Functional/EventListener/Mail/AttachmentFromTypoScriptTest.php +++ b/Tests/Functional/EventListener/Mail/AttachmentFromTypoScriptTest.php @@ -80,7 +80,7 @@ public function filesFromTypoScriptAddedToAttachmentList(): void $attachments = $attachmentEvent->getAttachments(); - self::assertSame(2, count($attachments)); + self::assertCount(2, $attachments); self::assertContains(GeneralUtility::getFileAbsFileName('EXT:cart_example/Resources/Public/Files/Extension.pdf'), $attachments); self::assertContains(GeneralUtility::getFileAbsFileName('EXT:cart_example/Resources/Public/Icons/Extension.svg'), $attachments); } diff --git a/Tests/ObjectAccess.php b/Tests/ObjectAccess.php new file mode 100644 index 00000000..136206cc --- /dev/null +++ b/Tests/ObjectAccess.php @@ -0,0 +1,29 @@ +setValue($instance, $value); + } + + public static function getProperty(object $instance, string $propertyName): mixed + { + $reflection = new ReflectionProperty($instance::class, $propertyName); + return $reflection->getValue($instance); + } +} diff --git a/Tests/Unit/Domain/Model/Cart/BeVariantTest.php b/Tests/Unit/Domain/Model/Cart/BeVariantTest.php index b1a267e3..1844a1c9 100644 --- a/Tests/Unit/Domain/Model/Cart/BeVariantTest.php +++ b/Tests/Unit/Domain/Model/Cart/BeVariantTest.php @@ -1,5 +1,7 @@ expectException(\TypeError::class); - - $this->beVariantFactory->create( - 1, - $this->product, - null, - 'test-variant-sku', - 0, - 1.0, - 1 - ); - } - - #[Test] - public function constructWithoutSkuThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->beVariantFactory->create( - 1, - $this->product, - 'Test Variant', - null, - 0, - 1.0, - 1 - ); - } - - #[Test] - public function constructWithoutQuantityThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->beVariantFactory->create( - 1, - $this->product, - 'Test Variant', - 'test-variant-sku', - 0, - 1.0, - null - ); - } - #[Test] public function getMinReturnsInitialValueMin(): void { @@ -440,53 +392,4 @@ public function getParentPriceRespectsTheQuantityDiscountsOfProductsForEachVaria // $beVariant3->getParentPrice() // ); } - - /** - * Creates a mock object which allows for calling protected methods and access of protected properties. - * - * Note: This method has no native return types on purpose, but only PHPDoc return type annotations. - * The reason is that the combination of "union types with generics in PHPDoc" and "a subset of those types as - * native types, but without the generics" tends to confuse PhpStorm's static type analysis (which we want to avoid). - * - * @template T of object - * @param class-string $originalClassName name of class to create the mock object of - * @param string[]|null $methods name of the methods to mock, null for "mock no methods" - * @param array $arguments arguments to pass to constructor - * @param string $mockClassName the class name to use for the mock class - * @param bool $callOriginalConstructor whether to call the constructor - * @param bool $callOriginalClone whether to call the __clone method - * @param bool $callAutoload whether to call any autoload function - * - * @return MockObject&AccessibleObjectInterface&T a mock of `$originalClassName` with access methods added - * - * @throws \InvalidArgumentException - */ - protected function getAccessibleMock( - string $originalClassName, - ?array $methods = [], - array $arguments = [], - string $mockClassName = '', - bool $callOriginalConstructor = true, - bool $callOriginalClone = true, - bool $callAutoload = true - ) { - $mockBuilder = $this->getMockBuilder($this->buildAccessibleProxy($originalClassName)) - ->onlyMethods($methods) - ->setConstructorArgs($arguments) - ->setMockClassName($mockClassName); - - if (!$callOriginalConstructor) { - $mockBuilder->disableOriginalConstructor(); - } - - if (!$callOriginalClone) { - $mockBuilder->disableOriginalClone(); - } - - if (!$callAutoload) { - $mockBuilder->disableAutoload(); - } - - return $mockBuilder->getMock(); - } } diff --git a/Tests/Unit/Domain/Model/Cart/CartCouponFixTest.php b/Tests/Unit/Domain/Model/Cart/CartCouponFixTest.php index f8b570a7..770ece7a 100644 --- a/Tests/Unit/Domain/Model/Cart/CartCouponFixTest.php +++ b/Tests/Unit/Domain/Model/Cart/CartCouponFixTest.php @@ -1,5 +1,7 @@ expectException(\TypeError::class); - - $this->coupon = new CartCouponFix( - null, - $this->code, - $this->couponType, - $this->discount, - $this->taxClass, - $this->cartMinPrice - ); - } - - #[Test] - public function constructCouponWithoutCodeThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new CartCouponFix( - $this->title, - null, - $this->couponType, - $this->discount, - $this->taxClass, - $this->cartMinPrice - ); - } - - #[Test] - public function constructCouponWithoutCouponTypeThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new CartCouponFix( - $this->title, - $this->code, - null, - $this->discount, - $this->taxClass, - $this->cartMinPrice - ); - } - - #[Test] - public function constructCouponWithoutDiscountThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new CartCouponFix( - $this->title, - $this->code, - $this->couponType, - null, - $this->taxClass, - $this->cartMinPrice - ); - } - - #[Test] - public function constructCouponWithoutTaxClassThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new CartCouponFix( - $this->title, - $this->code, - $this->couponType, - $this->discount, - null, - $this->cartMinPrice - ); - } - #[Test] public function isCombinableInitiallyReturnsFalse(): void { diff --git a/Tests/Unit/Domain/Model/Cart/CartCouponPercentageTest.php b/Tests/Unit/Domain/Model/Cart/CartCouponPercentageTest.php index 1c5dfea7..6adee706 100644 --- a/Tests/Unit/Domain/Model/Cart/CartCouponPercentageTest.php +++ b/Tests/Unit/Domain/Model/Cart/CartCouponPercentageTest.php @@ -1,5 +1,7 @@ expectException(\TypeError::class); - - $this->coupon = new CartCouponPercentage( - null, - $this->code, - $this->couponType, - $this->discount, - $this->taxClass, - $this->cartMinPrice - ); - } - - #[Test] - public function constructCouponWithoutCodeThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new CartCouponPercentage( - $this->title, - null, - $this->couponType, - $this->discount, - $this->taxClass, - $this->cartMinPrice - ); - } - - #[Test] - public function constructCouponWithoutCouponTypeThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new CartCouponPercentage( - $this->title, - $this->code, - null, - $this->discount, - $this->taxClass, - $this->cartMinPrice - ); - } - - #[Test] - public function constructCouponWithoutDiscountThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new CartCouponPercentage( - $this->title, - $this->code, - $this->couponType, - null, - $this->taxClass, - $this->cartMinPrice - ); - } - - #[Test] - public function constructCouponWithoutTaxClassThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new CartCouponPercentage( - $this->title, - $this->code, - $this->couponType, - $this->discount, - null, - $this->cartMinPrice - ); - } - #[Test] public function isCombinableInitiallyReturnsFalse(): void { diff --git a/Tests/Unit/Domain/Model/Cart/CartTest.php b/Tests/Unit/Domain/Model/Cart/CartTest.php index eccb7fdd..a3213ad9 100644 --- a/Tests/Unit/Domain/Model/Cart/CartTest.php +++ b/Tests/Unit/Domain/Model/Cart/CartTest.php @@ -1,5 +1,7 @@ grossCart); - unset($this->netCart); - - unset($this->taxClasses); - - unset($this->normalTaxClass); - unset($this->reducedTaxClass); - unset($this->freeTaxClass); - parent::tearDown(); } diff --git a/Tests/Unit/Domain/Model/Cart/ProductTest.php b/Tests/Unit/Domain/Model/Cart/ProductTest.php index c8edf292..e0d95879 100644 --- a/Tests/Unit/Domain/Model/Cart/ProductTest.php +++ b/Tests/Unit/Domain/Model/Cart/ProductTest.php @@ -1,5 +1,7 @@ product, - $this->productType, - $this->productId, - $this->title, - $this->sku, - $this->price, - $this->quantity, - $this->taxClass - ); - parent::tearDown(); } - #[Test] - public function constructCartProductWithoutProductTypeThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->productFactory->create( - null, - $this->productId, - $this->sku, - $this->title, - $this->price, - $this->taxClass, - $this->quantity - ); - } - - #[Test] - public function constructCartProductWithoutProductIdThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->productFactory->create( - $this->productType, - null, - $this->sku, - $this->title, - $this->price, - $this->taxClass, - $this->quantity - ); - } - - #[Test] - public function constructCartProductWithoutSkuThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->productFactory->create( - $this->productType, - $this->productId, - null, - $this->title, - $this->price, - $this->taxClass, - $this->quantity - ); - } - - #[Test] - public function constructCartProductWithoutTitleThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->productFactory->create( - $this->productType, - $this->productId, - $this->sku, - null, - $this->price, - $this->taxClass, - $this->quantity - ); - } - - #[Test] - public function constructCartProductWithoutPriceThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->productFactory->create( - $this->productType, - $this->productId, - $this->sku, - $this->title, - null, - $this->taxClass, - $this->quantity - ); - } - - #[Test] - public function constructCartProductWithoutTaxClassThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->productFactory->create( - $this->productType, - $this->productId, - $this->sku, - $this->title, - $this->price, - null, - $this->quantity - ); - } - - #[Test] - public function constructCartProductWithoutQuantityThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->productFactory->create( - $this->productType, - $this->productId, - $this->sku, - $this->title, - $this->price, - $this->taxClass, - null - ); - } - #[Test] public function getCartProductTypeReturnsProductTypeSetByConstructor(): void { diff --git a/Tests/Unit/Domain/Model/Cart/ServiceTest.php b/Tests/Unit/Domain/Model/Cart/ServiceTest.php index 2b8751db..ff5a9607 100644 --- a/Tests/Unit/Domain/Model/Cart/ServiceTest.php +++ b/Tests/Unit/Domain/Model/Cart/ServiceTest.php @@ -1,5 +1,7 @@ id, - $this->value, - $this->calc, - $this->title, - $this->fixture - ); - parent::tearDown(); } diff --git a/Tests/Unit/Domain/Model/CouponTest.php b/Tests/Unit/Domain/Model/CouponTest.php index 453033ef..c94fa3c5 100644 --- a/Tests/Unit/Domain/Model/CouponTest.php +++ b/Tests/Unit/Domain/Model/CouponTest.php @@ -1,5 +1,7 @@ expectException(\TypeError::class); - - $this->coupon = new Coupon( - null, - $this->code, - $this->couponType, - $this->discount, - $this->taxClassId - ); - } - - #[Test] - public function constructCouponWithoutCodeThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new Coupon( - $this->title, - null, - $this->couponType, - $this->discount, - $this->taxClassId - ); - } - - #[Test] - public function constructCouponWithoutCouponTypeThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new Coupon( - $this->title, - $this->code, - null, - $this->discount, - $this->taxClassId - ); - } - - #[Test] - public function constructCouponWithoutDiscountThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new Coupon( - $this->title, - $this->code, - $this->couponType, - null, - $this->taxClassId - ); - } - - #[Test] - public function constructCouponWithoutTaxClassIdThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->coupon = new Coupon( - $this->title, - $this->code, - $this->couponType, - $this->discount, - null - ); - } - #[Test] public function getTitleInitiallyReturnsTitleSetDirectlyByConstructor(): void { diff --git a/Tests/Unit/Domain/Model/Order/AbstractAddressTest.php b/Tests/Unit/Domain/Model/Order/AbstractAddressTest.php index 5f5183ec..63954d97 100644 --- a/Tests/Unit/Domain/Model/Order/AbstractAddressTest.php +++ b/Tests/Unit/Domain/Model/Order/AbstractAddressTest.php @@ -1,5 +1,7 @@ address = $this->getMockForAbstractClass(AbstractAddress::class); + $this->address = new class extends AbstractAddress {}; parent::setUp(); } @@ -579,9 +577,6 @@ public function setFaxSetsFax(): void #[Test] public function getAdditionalInitiallyReturnsEmptyArray(): void { - self::assertIsArray( - $this->address->getAdditional() - ); self::assertEmpty( $this->address->getAdditional() ); @@ -609,74 +604,13 @@ public function additionalIsInternallyJsonString(): void 'additional' => true, ]; - /** @var AccessibleObjectInterface&MockObject&AbstractAddress $address */ - $address = $this->getAccessibleMock( - AbstractAddress::class, - [], - [], - '', - false - ); - - self::assertSame( - '', - $address->_get('additional') - ); + $this->address->setAdditional($additional); - $address->setAdditional($additional); + $additionalPropertyValue = ObjectAccess::getProperty($this->address, 'additional'); self::assertSame( json_encode($additional), - $address->_get('additional') - ); - } - - /** - * Creates a mock object which allows for calling protected methods and access of protected properties. - * - * Note: This method has no native return types on purpose, but only PHPDoc return type annotations. - * The reason is that the combination of "union types with generics in PHPDoc" and "a subset of those types as - * native types, but without the generics" tends to confuse PhpStorm's static type analysis (which we want to avoid). - * - * @template T of object - * @param class-string $originalClassName name of class to create the mock object of - * @param string[]|null $methods name of the methods to mock, null for "mock no methods" - * @param array $arguments arguments to pass to constructor - * @param string $mockClassName the class name to use for the mock class - * @param bool $callOriginalConstructor whether to call the constructor - * @param bool $callOriginalClone whether to call the __clone method - * @param bool $callAutoload whether to call any autoload function - * - * @return MockObject&AccessibleObjectInterface - * - * @throws \InvalidArgumentException - */ - protected function getAccessibleMock( - string $originalClassName, - ?array $methods = [], - array $arguments = [], - string $mockClassName = '', - bool $callOriginalConstructor = true, - bool $callOriginalClone = true, - bool $callAutoload = true - ): MockObject { - $mockBuilder = $this->getMockBuilder($this->buildAccessibleProxy($originalClassName)) - ->addMethods($methods) - ->setConstructorArgs($arguments) - ->setMockClassName($mockClassName); - - if (!$callOriginalConstructor) { - $mockBuilder->disableOriginalConstructor(); - } - - if (!$callOriginalClone) { - $mockBuilder->disableOriginalClone(); - } - - if (!$callAutoload) { - $mockBuilder->disableAutoload(); - } - - return $mockBuilder->getMock(); + $additionalPropertyValue + ); } } diff --git a/Tests/Unit/Domain/Model/Order/AbstractServiceTest.php b/Tests/Unit/Domain/Model/Order/AbstractServiceTest.php index 69fbdbe5..59a984a1 100644 --- a/Tests/Unit/Domain/Model/Order/AbstractServiceTest.php +++ b/Tests/Unit/Domain/Model/Order/AbstractServiceTest.php @@ -1,5 +1,7 @@ service = $this->getMockForAbstractClass(AbstractService::class); + $this->service = new class extends AbstractService {}; parent::setUp(); } diff --git a/Tests/Unit/Domain/Model/Order/DiscountTest.php b/Tests/Unit/Domain/Model/Order/DiscountTest.php index 0df8791f..b9a44c22 100644 --- a/Tests/Unit/Domain/Model/Order/DiscountTest.php +++ b/Tests/Unit/Domain/Model/Order/DiscountTest.php @@ -1,5 +1,7 @@ expectException(\TypeError::class); - - new Discount( - null, - $this->code, - $this->gross, - $this->net, - $this->taxClass, - $this->tax - ); - } - - #[Test] - public function constructDiscountWithoutCodeThrowsException(): void - { - $this->expectException(\TypeError::class); - - new Discount( - $this->title, - null, - $this->gross, - $this->net, - $this->taxClass, - $this->tax - ); - } - - #[Test] - public function constructDiscountWithoutGrossThrowsException(): void - { - $this->expectException(\TypeError::class); - - new Discount( - $this->title, - $this->code, - null, - $this->net, - $this->taxClass, - $this->tax - ); - } - - #[Test] - public function constructDiscountWithoutNetThrowsException(): void - { - $this->expectException(\TypeError::class); - - new Discount( - $this->title, - $this->code, - $this->gross, - null, - $this->taxClass, - $this->tax - ); - } - - #[Test] - public function constructDiscountWithoutTaxClassThrowsException(): void - { - $this->expectException(\TypeError::class); - - new Discount( - $this->title, - $this->code, - $this->gross, - $this->net, - null, - $this->tax - ); - } - - #[Test] - public function constructDiscountWithoutTaxThrowsException(): void - { - $this->expectException(\TypeError::class); - - new Discount( - $this->title, - $this->code, - $this->gross, - $this->net, - $this->taxClass, - null - ); - } - #[Test] public function getTitleInitiallyReturnsTitleSetDirectlyByConstructor(): void { diff --git a/Tests/Unit/Domain/Model/Order/ItemTest.php b/Tests/Unit/Domain/Model/Order/ItemTest.php index e89e807b..09224dae 100644 --- a/Tests/Unit/Domain/Model/Order/ItemTest.php +++ b/Tests/Unit/Domain/Model/Order/ItemTest.php @@ -1,5 +1,7 @@ expectException(\TypeError::class); - - $this->productAdditional = new ProductAdditional( - null, - $this->additionalKey, - $this->additionalValue - ); - } - - #[Test] - public function constructProductAdditionalWithoutAdditionalKeyThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->productAdditional = new ProductAdditional( - $this->additionalType, - null, - $this->additionalValue - ); - } - - #[Test] - public function constructProductAdditionalWithoutAdditionalValueThrowsException(): void - { - $this->expectException(\TypeError::class); - - $this->productAdditional = new ProductAdditional( - $this->additionalType, - $this->additionalKey, - null - ); - } - #[Test] public function getAdditionalTypeInitiallyReturnsAdditionalTypeSetDirectlyByConstructor(): void { diff --git a/Tests/Unit/Domain/Model/Order/ProductTest.php b/Tests/Unit/Domain/Model/Order/ProductTest.php index 9fe63561..2f2e2b53 100644 --- a/Tests/Unit/Domain/Model/Order/ProductTest.php +++ b/Tests/Unit/Domain/Model/Order/ProductTest.php @@ -1,5 +1,7 @@ expectException(\TypeError::class); - - new Tax( - null, - $this->taxClass - ); - } - - #[Test] - public function constructTaxWithoutTaxClassThrowsException(): void - { - $this->expectException(\TypeError::class); - - new Tax( - $this->tax, - null - ); - } - #[Test] public function getTaxInitiallyReturnsTaxSetDirectlyByConstructor(): void { diff --git a/Tests/Unit/Domain/Model/Order/TransactionTest.php b/Tests/Unit/Domain/Model/Order/TransactionTest.php index 12f12d35..789c3c38 100644 --- a/Tests/Unit/Domain/Model/Order/TransactionTest.php +++ b/Tests/Unit/Domain/Model/Order/TransactionTest.php @@ -1,5 +1,7 @@ product = $this->getMockForAbstractClass( - AbstractProduct::class - ); + $this->product = new class extends AbstractProduct {}; } #[Test] diff --git a/Tests/Unit/Domain/Model/Product/CategoryTraitStub.php b/Tests/Unit/Domain/Model/Product/CategoryTraitStub.php new file mode 100644 index 00000000..5f1b8c8e --- /dev/null +++ b/Tests/Unit/Domain/Model/Product/CategoryTraitStub.php @@ -0,0 +1,19 @@ +trait = $this->getObjectForTrait(CategoryTrait::class); + $this->trait = new CategoryTraitStub(); } #[Test] diff --git a/Tests/Unit/Domain/Model/Product/MeasureTraitStub.php b/Tests/Unit/Domain/Model/Product/MeasureTraitStub.php new file mode 100644 index 00000000..b235a202 --- /dev/null +++ b/Tests/Unit/Domain/Model/Product/MeasureTraitStub.php @@ -0,0 +1,19 @@ +trait = $this->getObjectForTrait(MeasureTrait::class); + $this->trait = new MeasureTraitStub(); } #[Test] diff --git a/Tests/Unit/Domain/Model/Product/ServiceAttributeTraitStub.php b/Tests/Unit/Domain/Model/Product/ServiceAttributeTraitStub.php new file mode 100644 index 00000000..22e05e0c --- /dev/null +++ b/Tests/Unit/Domain/Model/Product/ServiceAttributeTraitStub.php @@ -0,0 +1,19 @@ +trait = $this->getObjectForTrait(ServiceAttributeTrait::class); + $this->trait = new ServiceAttributeTraitStub(); } #[Test] diff --git a/Tests/Unit/Domain/Model/Product/StockTraitStub.php b/Tests/Unit/Domain/Model/Product/StockTraitStub.php new file mode 100644 index 00000000..28c07b11 --- /dev/null +++ b/Tests/Unit/Domain/Model/Product/StockTraitStub.php @@ -0,0 +1,19 @@ +trait = $this->getObjectForTrait(StockTrait::class); + $this->trait = new StockTraitStub(); } #[Test] diff --git a/Tests/Unit/Domain/Model/Product/TagTraitStub.php b/Tests/Unit/Domain/Model/Product/TagTraitStub.php new file mode 100644 index 00000000..19dc4a5e --- /dev/null +++ b/Tests/Unit/Domain/Model/Product/TagTraitStub.php @@ -0,0 +1,19 @@ +trait = $this->getObjectForTrait(TagTrait::class); + $this->trait = new TagTraitStub(); } #[Test] diff --git a/Tests/Unit/Domain/Model/TagTest.php b/Tests/Unit/Domain/Model/TagTest.php index 89a36a46..1ce579dd 100644 --- a/Tests/Unit/Domain/Model/TagTest.php +++ b/Tests/Unit/Domain/Model/TagTest.php @@ -1,5 +1,7 @@ expectException(\TypeError::class); - - $this->tag = new Tag( - null - ); - } - #[Test] public function getTitleInitiallyReturnsTitleSetDirectlyByConstructor(): void { diff --git a/Tests/Unit/Service/TaxClassServiceTest.php b/Tests/Unit/Service/TaxClassServiceTest.php index 80996f99..c99c82fe 100644 --- a/Tests/Unit/Service/TaxClassServiceTest.php +++ b/Tests/Unit/Service/TaxClassServiceTest.php @@ -48,16 +48,14 @@ public function parsingTaxClassesFromTypoScriptWithoutCountryCodeReturnsDirectly $taxClasses = $this->createSubject($settings)->getTaxClasses($countryCode); - self::assertIsArray( - $taxClasses - ); - self::assertEquals( 3, count($taxClasses) ); $firstTaxClasses = $taxClasses[1]; + + // @phpstan-ignore-next-line staticMethod.alreadyNarrowedType self::assertInstanceOf( TaxClass::class, $firstTaxClasses @@ -115,16 +113,14 @@ public function parsingTaxClassesFromTypoScriptWithCountryCodeReturnsCountrySpec $taxClasses = $this->createSubject($settings)->getTaxClasses($countryCode); - self::assertIsArray( - $taxClasses - ); - self::assertEquals( 3, count($taxClasses) ); $firstTaxClasses = $taxClasses[1]; + + // @phpstan-ignore-next-line staticMethod.alreadyNarrowedType self::assertInstanceOf( TaxClass::class, $firstTaxClasses @@ -199,16 +195,14 @@ public function parsingTaxClassesFromTypoScriptWithNotConfiguredCountryCodeRetur $taxClasses = $this->createSubject($settings)->getTaxClasses($countryCode); - self::assertIsArray( - $taxClasses - ); - self::assertEquals( 3, count($taxClasses) ); $firstTaxClasses = $taxClasses[1]; + + // @phpstan-ignore-next-line staticMethod.alreadyNarrowedType self::assertInstanceOf( TaxClass::class, $firstTaxClasses diff --git a/Tests/Unit/Validation/Validator/EmptyValidatorTest.php b/Tests/Unit/Validation/Validator/EmptyValidatorTest.php index 5ced1c1a..148372ea 100644 --- a/Tests/Unit/Validation/Validator/EmptyValidatorTest.php +++ b/Tests/Unit/Validation/Validator/EmptyValidatorTest.php @@ -9,12 +9,14 @@ * LICENSE file that was distributed with this source code. */ use Extcode\Cart\Validation\Validator\EmptyValidator; +use PHPUnit\Framework\Attributes\AllowMockObjectsWithoutExpectations; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use TYPO3\CMS\Extbase\Validation\Validator\ValidatorInterface; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; +#[AllowMockObjectsWithoutExpectations] #[CoversClass(EmptyValidator::class)] class EmptyValidatorTest extends UnitTestCase { diff --git a/composer.json b/composer.json index 6e30a450..c493dee0 100644 --- a/composer.json +++ b/composer.json @@ -38,9 +38,11 @@ "allow-plugins": { "typo3/class-alias-loader": true, "typo3/cms-composer-installers": true, - "sbuerk/typo3-cmscomposerinstallers-testingframework-bridge": true + "sbuerk/typo3-cmscomposerinstallers-testingframework-bridge": true, + "phpstan/extension-installer": true } }, + "version": "12.0.0", "extra": { "typo3/cms": { "extension-key": "cart", @@ -51,19 +53,26 @@ "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", "ext-json": "*", "ext-openssl": "*", - "typo3/cms-core": "^13.4", - "typo3/cms-extbase": "^13.4", - "typo3/cms-fluid": "^13.4" + "typo3/cms-core": "^14.0", + "typo3/cms-extbase": "^14.0", + "typo3/cms-fluid": "^14.0", + "typo3/cms-form": "^14.0", + "typo3/cms-frontend": "^14.0" }, "require-dev": { - "codappix/typo3-php-datasets": "^2.0", + "codappix/typo3-php-datasets": "^2.1", "friendsofphp/php-cs-fixer": "^3.64", - "phpstan/phpstan": "^1.12", - "ssch/typo3-rector": "^2.9", - "typo3/cms-beuser": "^13.4", - "typo3/cms-dashboard": "^13.4", - "typo3/cms-form": "^13.4", - "typo3/testing-framework": "^8.2" + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "spaze/phpstan-disallowed-calls": "^4.7", + "staabm/phpstan-todo-by": "^0.3", + "typo3/cms-beuser": "^14.0", + "typo3/cms-dashboard": "^14.0", + "typo3/cms-form": "^14.0", + "typo3/testing-framework": "^9.0", + "ssch/typo3-rector": "^3.11" }, "scripts": { "test:cgl": [ @@ -79,7 +88,7 @@ ".build/bin/phpunit -c Build/UnitTests.xml" ], "test:php:functional": [ - "typo3DatabaseDriver=\"pdo_sqlite\" .build/bin/phpunit -c Build/FunctionalTests.xml" + "typo3DatabaseDriver=\"pdo_sqlite\" .build/bin/phpunit -c Build/phpunit.xml.dist" ], "test:phpstan:analyse": [ ".build/bin/phpstan analyse -c Build/phpstan.neon --memory-limit 256M" @@ -107,7 +116,7 @@ ] }, "suggest": { - "typo3/cms-dashboard": "^13.4", - "typo3/cms-form": "^13.4" + "typo3/cms-dashboard": "^14.0", + "typo3/cms-form": "^14.0" } } diff --git a/ext_emconf.php b/ext_emconf.php index a71cd715..4169be74 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -11,7 +11,7 @@ 'author_company' => 'extco.de UG (haftungsbeschränkt)', 'constraints' => [ 'depends' => [ - 'php' => '8.2.0-8.5.99', + 'php' => '8.2.0-8.4.99', 'typo3' => '13.4.0-13.4.99', 'extbase' => '13.4.0-13.4.99', 'fluid' => '13.4.0-13.4.99', diff --git a/ext_localconf.php b/ext_localconf.php index 24086288..3d5add58 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -25,8 +25,7 @@ [ CartPreviewController::class => 'show', CurrencyController::class => 'update', - ], - ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT + ] ); ExtensionUtility::configurePlugin( @@ -51,8 +50,7 @@ PaymentController::class => 'update', ProductController::class => 'add, remove', ShippingController::class => 'update', - ], - ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT + ] ); ExtensionUtility::configurePlugin( @@ -63,8 +61,7 @@ ], [ CurrencyController::class => 'edit, update', - ], - ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT + ] ); ExtensionUtility::configurePlugin( @@ -75,8 +72,7 @@ ], [ \Extcode\Cart\Controller\Order\OrderController::class => 'list, show', - ], - ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT + ] ); // register "cart:" namespace diff --git a/rector.php b/rector.php index 2c72b1d6..22291b6b 100644 --- a/rector.php +++ b/rector.php @@ -7,7 +7,6 @@ use Rector\PostRector\Rector\NameImportingPostRector; use Rector\TypeDeclaration\Rector\ClassMethod\AddVoidReturnTypeWhereNoReturnRector; use Rector\ValueObject\PhpVersion; -use Ssch\TYPO3Rector\CodeQuality\General\ConvertImplicitVariablesToExplicitGlobalsRector; use Ssch\TYPO3Rector\CodeQuality\General\ExtEmConfRector; use Ssch\TYPO3Rector\CodeQuality\General\InjectMethodToConstructorInjectionRector; use Ssch\TYPO3Rector\Configuration\Typo3Option; @@ -29,7 +28,7 @@ ->withSets([ Typo3SetList::CODE_QUALITY, Typo3SetList::GENERAL, - Typo3LevelSetList::UP_TO_TYPO3_13, + Typo3LevelSetList::UP_TO_TYPO3_14, ]) // To have a better analysis from PHPStan, we teach it here some more things ->withPHPStanConfigs([ @@ -37,7 +36,6 @@ ]) ->withRules([ AddVoidReturnTypeWhereNoReturnRector::class, - ConvertImplicitVariablesToExplicitGlobalsRector::class, ]) ->withConfiguredRule(ExtEmConfRector::class, [ ExtEmConfRector::PHP_VERSION_CONSTRAINT => '8.2.0-8.4.99', diff --git a/shell.nix b/shell.nix index c0a30c3b..f321ebf8 100644 --- a/shell.nix +++ b/shell.nix @@ -83,7 +83,7 @@ let ]; text = '' project-install - .build/bin/phpunit -c Build/UnitTests.xml --display-deprecations --display-warnings + .build/bin/phpunit -c Build/phpunit.xml.dist --testsuite unit --display-warnings --display-deprecations --display-errors --display-notices ''; }; @@ -95,7 +95,7 @@ let ]; text = '' project-install - .build/bin/phpunit -c Build/FunctionalTests.xml --display-deprecations --display-warnings + .build/bin/phpunit -c Build/phpunit.xml.dist --testsuite functional --display-warnings --display-deprecations --display-errors ''; };