summaryrefslogtreecommitdiff
path: root/vendor/doctrine
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/doctrine')
-rw-r--r--vendor/doctrine/instantiator/.doctrine-project.json47
-rw-r--r--vendor/doctrine/instantiator/CONTRIBUTING.md35
-rw-r--r--vendor/doctrine/instantiator/LICENSE19
-rw-r--r--vendor/doctrine/instantiator/README.md38
-rw-r--r--vendor/doctrine/instantiator/composer.json48
-rw-r--r--vendor/doctrine/instantiator/docs/en/index.rst68
-rw-r--r--vendor/doctrine/instantiator/docs/en/sidebar.rst4
-rw-r--r--vendor/doctrine/instantiator/psalm.xml16
-rw-r--r--vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php12
-rw-r--r--vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php50
-rw-r--r--vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php59
-rw-r--r--vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php260
-rw-r--r--vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php24
13 files changed, 0 insertions, 680 deletions
diff --git a/vendor/doctrine/instantiator/.doctrine-project.json b/vendor/doctrine/instantiator/.doctrine-project.json
deleted file mode 100644
index 24ae36e0d..000000000
--- a/vendor/doctrine/instantiator/.doctrine-project.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "active": true,
- "name": "Instantiator",
- "slug": "instantiator",
- "docsSlug": "doctrine-instantiator",
- "codePath": "/src",
- "versions": [
- {
- "name": "1.5",
- "branchName": "1.5.x",
- "slug": "latest",
- "upcoming": true
- },
- {
- "name": "1.4",
- "branchName": "1.4.x",
- "slug": "1.4",
- "aliases": [
- "current",
- "stable"
- ],
- "maintained": true,
- "current": true
- },
- {
- "name": "1.3",
- "branchName": "1.3.x",
- "slug": "1.3",
- "maintained": false
- },
- {
- "name": "1.2",
- "branchName": "1.2.x",
- "slug": "1.2"
- },
- {
- "name": "1.1",
- "branchName": "1.1.x",
- "slug": "1.1"
- },
- {
- "name": "1.0",
- "branchName": "1.0.x",
- "slug": "1.0"
- }
- ]
-}
diff --git a/vendor/doctrine/instantiator/CONTRIBUTING.md b/vendor/doctrine/instantiator/CONTRIBUTING.md
deleted file mode 100644
index c1a2c42ee..000000000
--- a/vendor/doctrine/instantiator/CONTRIBUTING.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Contributing
-
- * Follow the [Doctrine Coding Standard](https://github.com/doctrine/coding-standard)
- * The project will follow strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php)
- * Any contribution must provide tests for additional introduced conditions
- * Any un-confirmed issue needs a failing test case before being accepted
- * Pull requests must be sent from a new hotfix/feature branch, not from `master`.
-
-## Installation
-
-To install the project and run the tests, you need to clone it first:
-
-```sh
-$ git clone git://github.com/doctrine/instantiator.git
-```
-
-You will then need to run a composer installation:
-
-```sh
-$ cd Instantiator
-$ curl -s https://getcomposer.org/installer | php
-$ php composer.phar update
-```
-
-## Testing
-
-The PHPUnit version to be used is the one installed as a dev- dependency via composer:
-
-```sh
-$ ./vendor/bin/phpunit
-```
-
-Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement
-won't be merged.
-
diff --git a/vendor/doctrine/instantiator/LICENSE b/vendor/doctrine/instantiator/LICENSE
deleted file mode 100644
index 4d983d1ac..000000000
--- a/vendor/doctrine/instantiator/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2014 Doctrine Project
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/doctrine/instantiator/README.md b/vendor/doctrine/instantiator/README.md
deleted file mode 100644
index 4bc02b655..000000000
--- a/vendor/doctrine/instantiator/README.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# Instantiator
-
-This library provides a way of avoiding usage of constructors when instantiating PHP classes.
-
-[![Build Status](https://travis-ci.org/doctrine/instantiator.svg?branch=master)](https://travis-ci.org/doctrine/instantiator)
-[![Code Coverage](https://codecov.io/gh/doctrine/instantiator/branch/master/graph/badge.svg)](https://codecov.io/gh/doctrine/instantiator/branch/master)
-[![Dependency Status](https://www.versioneye.com/package/php--doctrine--instantiator/badge.svg)](https://www.versioneye.com/package/php--doctrine--instantiator)
-
-[![Latest Stable Version](https://poser.pugx.org/doctrine/instantiator/v/stable.png)](https://packagist.org/packages/doctrine/instantiator)
-[![Latest Unstable Version](https://poser.pugx.org/doctrine/instantiator/v/unstable.png)](https://packagist.org/packages/doctrine/instantiator)
-
-## Installation
-
-The suggested installation method is via [composer](https://getcomposer.org/):
-
-```sh
-php composer.phar require "doctrine/instantiator:~1.0.3"
-```
-
-## Usage
-
-The instantiator is able to create new instances of any class without using the constructor or any API of the class
-itself:
-
-```php
-$instantiator = new \Doctrine\Instantiator\Instantiator();
-
-$instance = $instantiator->instantiate(\My\ClassName\Here::class);
-```
-
-## Contributing
-
-Please read the [CONTRIBUTING.md](CONTRIBUTING.md) contents if you wish to help out!
-
-## Credits
-
-This library was migrated from [ocramius/instantiator](https://github.com/Ocramius/Instantiator), which
-has been donated to the doctrine organization, and which is now deprecated in favour of this package.
diff --git a/vendor/doctrine/instantiator/composer.json b/vendor/doctrine/instantiator/composer.json
deleted file mode 100644
index 4fba95ca6..000000000
--- a/vendor/doctrine/instantiator/composer.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "doctrine/instantiator",
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "type": "library",
- "license": "MIT",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "instantiate",
- "constructor"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "ext-phar": "*",
- "ext-pdo": "*",
- "doctrine/coding-standard": "^9",
- "phpbench/phpbench": "^0.16 || ^1",
- "phpstan/phpstan": "^1.4",
- "phpstan/phpstan-phpunit": "^1",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "vimeo/psalm": "^4.22"
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "autoload-dev": {
- "psr-0": {
- "DoctrineTest\\InstantiatorPerformance\\": "tests",
- "DoctrineTest\\InstantiatorTest\\": "tests",
- "DoctrineTest\\InstantiatorTestAsset\\": "tests"
- }
- },
- "config": {
- "allow-plugins": {
- "dealerdirect/phpcodesniffer-composer-installer": true
- }
- }
-}
diff --git a/vendor/doctrine/instantiator/docs/en/index.rst b/vendor/doctrine/instantiator/docs/en/index.rst
deleted file mode 100644
index 0c85da0bc..000000000
--- a/vendor/doctrine/instantiator/docs/en/index.rst
+++ /dev/null
@@ -1,68 +0,0 @@
-Introduction
-============
-
-This library provides a way of avoiding usage of constructors when instantiating PHP classes.
-
-Installation
-============
-
-The suggested installation method is via `composer`_:
-
-.. code-block:: console
-
- $ composer require doctrine/instantiator
-
-Usage
-=====
-
-The instantiator is able to create new instances of any class without
-using the constructor or any API of the class itself:
-
-.. code-block:: php
-
- <?php
-
- use Doctrine\Instantiator\Instantiator;
- use App\Entities\User;
-
- $instantiator = new Instantiator();
-
- $user = $instantiator->instantiate(User::class);
-
-Contributing
-============
-
-- Follow the `Doctrine Coding Standard`_
-- The project will follow strict `object calisthenics`_
-- Any contribution must provide tests for additional introduced
- conditions
-- Any un-confirmed issue needs a failing test case before being
- accepted
-- Pull requests must be sent from a new hotfix/feature branch, not from
- ``master``.
-
-Testing
-=======
-
-The PHPUnit version to be used is the one installed as a dev- dependency
-via composer:
-
-.. code-block:: console
-
- $ ./vendor/bin/phpunit
-
-Accepted coverage for new contributions is 80%. Any contribution not
-satisfying this requirement won’t be merged.
-
-Credits
-=======
-
-This library was migrated from `ocramius/instantiator`_, which has been
-donated to the doctrine organization, and which is now deprecated in
-favour of this package.
-
-.. _composer: https://getcomposer.org/
-.. _CONTRIBUTING.md: CONTRIBUTING.md
-.. _ocramius/instantiator: https://github.com/Ocramius/Instantiator
-.. _Doctrine Coding Standard: https://github.com/doctrine/coding-standard
-.. _object calisthenics: http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php
diff --git a/vendor/doctrine/instantiator/docs/en/sidebar.rst b/vendor/doctrine/instantiator/docs/en/sidebar.rst
deleted file mode 100644
index 0c3647914..000000000
--- a/vendor/doctrine/instantiator/docs/en/sidebar.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-.. toctree::
- :depth: 3
-
- index
diff --git a/vendor/doctrine/instantiator/psalm.xml b/vendor/doctrine/instantiator/psalm.xml
deleted file mode 100644
index e6270c138..000000000
--- a/vendor/doctrine/instantiator/psalm.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-<psalm
- errorLevel="7"
- phpVersion="8.1"
- resolveFromConfigFile="true"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="https://getpsalm.org/schema/config"
- xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
->
- <projectFiles>
- <directory name="src" />
- <ignoreFiles>
- <directory name="vendor" />
- </ignoreFiles>
- </projectFiles>
-</psalm>
diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php
deleted file mode 100644
index e6a5195f2..000000000
--- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-namespace Doctrine\Instantiator\Exception;
-
-use Throwable;
-
-/**
- * Base exception marker interface for the instantiator component
- */
-interface ExceptionInterface extends Throwable
-{
-}
diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php
deleted file mode 100644
index 33de31c0b..000000000
--- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-namespace Doctrine\Instantiator\Exception;
-
-use InvalidArgumentException as BaseInvalidArgumentException;
-use ReflectionClass;
-
-use function interface_exists;
-use function sprintf;
-use function trait_exists;
-
-/**
- * Exception for invalid arguments provided to the instantiator
- */
-class InvalidArgumentException extends BaseInvalidArgumentException implements ExceptionInterface
-{
- public static function fromNonExistingClass(string $className): self
- {
- if (interface_exists($className)) {
- return new self(sprintf('The provided type "%s" is an interface, and cannot be instantiated', $className));
- }
-
- if (trait_exists($className)) {
- return new self(sprintf('The provided type "%s" is a trait, and cannot be instantiated', $className));
- }
-
- return new self(sprintf('The provided class "%s" does not exist', $className));
- }
-
- /**
- * @phpstan-param ReflectionClass<T> $reflectionClass
- *
- * @template T of object
- */
- public static function fromAbstractClass(ReflectionClass $reflectionClass): self
- {
- return new self(sprintf(
- 'The provided class "%s" is abstract, and cannot be instantiated',
- $reflectionClass->getName()
- ));
- }
-
- public static function fromEnum(string $className): self
- {
- return new self(sprintf(
- 'The provided class "%s" is an enum, and cannot be instantiated',
- $className
- ));
- }
-}
diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php
deleted file mode 100644
index 4e55ac525..000000000
--- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-namespace Doctrine\Instantiator\Exception;
-
-use Exception;
-use ReflectionClass;
-use UnexpectedValueException as BaseUnexpectedValueException;
-
-use function sprintf;
-
-/**
- * Exception for given parameters causing invalid/unexpected state on instantiation
- */
-class UnexpectedValueException extends BaseUnexpectedValueException implements ExceptionInterface
-{
- /**
- * @phpstan-param ReflectionClass<T> $reflectionClass
- *
- * @template T of object
- */
- public static function fromSerializationTriggeredException(
- ReflectionClass $reflectionClass,
- Exception $exception
- ): self {
- return new self(
- sprintf(
- 'An exception was raised while trying to instantiate an instance of "%s" via un-serialization',
- $reflectionClass->getName()
- ),
- 0,
- $exception
- );
- }
-
- /**
- * @phpstan-param ReflectionClass<T> $reflectionClass
- *
- * @template T of object
- */
- public static function fromUncleanUnSerialization(
- ReflectionClass $reflectionClass,
- string $errorString,
- int $errorCode,
- string $errorFile,
- int $errorLine
- ): self {
- return new self(
- sprintf(
- 'Could not produce an instance of "%s" via un-serialization, since an error was triggered '
- . 'in file "%s" at line "%d"',
- $reflectionClass->getName(),
- $errorFile,
- $errorLine
- ),
- 0,
- new Exception($errorString, $errorCode)
- );
- }
-}
diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php
deleted file mode 100644
index d616fa4db..000000000
--- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php
+++ /dev/null
@@ -1,260 +0,0 @@
-<?php
-
-namespace Doctrine\Instantiator;
-
-use ArrayIterator;
-use Doctrine\Instantiator\Exception\ExceptionInterface;
-use Doctrine\Instantiator\Exception\InvalidArgumentException;
-use Doctrine\Instantiator\Exception\UnexpectedValueException;
-use Exception;
-use ReflectionClass;
-use ReflectionException;
-use Serializable;
-
-use function class_exists;
-use function enum_exists;
-use function is_subclass_of;
-use function restore_error_handler;
-use function set_error_handler;
-use function sprintf;
-use function strlen;
-use function unserialize;
-
-use const PHP_VERSION_ID;
-
-final class Instantiator implements InstantiatorInterface
-{
- /**
- * Markers used internally by PHP to define whether {@see \unserialize} should invoke
- * the method {@see \Serializable::unserialize()} when dealing with classes implementing
- * the {@see \Serializable} interface.
- */
- public const SERIALIZATION_FORMAT_USE_UNSERIALIZER = 'C';
- public const SERIALIZATION_FORMAT_AVOID_UNSERIALIZER = 'O';
-
- /**
- * Used to instantiate specific classes, indexed by class name.
- *
- * @var callable[]
- */
- private static $cachedInstantiators = [];
-
- /**
- * Array of objects that can directly be cloned, indexed by class name.
- *
- * @var object[]
- */
- private static $cachedCloneables = [];
-
- /**
- * @param string $className
- * @phpstan-param class-string<T> $className
- *
- * @return object
- * @phpstan-return T
- *
- * @throws ExceptionInterface
- *
- * @template T of object
- */
- public function instantiate($className)
- {
- if (isset(self::$cachedCloneables[$className])) {
- /**
- * @phpstan-var T
- */
- $cachedCloneable = self::$cachedCloneables[$className];
-
- return clone $cachedCloneable;
- }
-
- if (isset(self::$cachedInstantiators[$className])) {
- $factory = self::$cachedInstantiators[$className];
-
- return $factory();
- }
-
- return $this->buildAndCacheFromFactory($className);
- }
-
- /**
- * Builds the requested object and caches it in static properties for performance
- *
- * @phpstan-param class-string<T> $className
- *
- * @return object
- * @phpstan-return T
- *
- * @template T of object
- */
- private function buildAndCacheFromFactory(string $className)
- {
- $factory = self::$cachedInstantiators[$className] = $this->buildFactory($className);
- $instance = $factory();
-
- if ($this->isSafeToClone(new ReflectionClass($instance))) {
- self::$cachedCloneables[$className] = clone $instance;
- }
-
- return $instance;
- }
-
- /**
- * Builds a callable capable of instantiating the given $className without
- * invoking its constructor.
- *
- * @phpstan-param class-string<T> $className
- *
- * @phpstan-return callable(): T
- *
- * @throws InvalidArgumentException
- * @throws UnexpectedValueException
- * @throws ReflectionException
- *
- * @template T of object
- */
- private function buildFactory(string $className): callable
- {
- $reflectionClass = $this->getReflectionClass($className);
-
- if ($this->isInstantiableViaReflection($reflectionClass)) {
- return [$reflectionClass, 'newInstanceWithoutConstructor'];
- }
-
- $serializedString = sprintf(
- '%s:%d:"%s":0:{}',
- is_subclass_of($className, Serializable::class) ? self::SERIALIZATION_FORMAT_USE_UNSERIALIZER : self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER,
- strlen($className),
- $className
- );
-
- $this->checkIfUnSerializationIsSupported($reflectionClass, $serializedString);
-
- return static function () use ($serializedString) {
- return unserialize($serializedString);
- };
- }
-
- /**
- * @phpstan-param class-string<T> $className
- *
- * @phpstan-return ReflectionClass<T>
- *
- * @throws InvalidArgumentException
- * @throws ReflectionException
- *
- * @template T of object
- */
- private function getReflectionClass(string $className): ReflectionClass
- {
- if (! class_exists($className)) {
- throw InvalidArgumentException::fromNonExistingClass($className);
- }
-
- if (PHP_VERSION_ID >= 80100 && enum_exists($className, false)) {
- throw InvalidArgumentException::fromEnum($className);
- }
-
- $reflection = new ReflectionClass($className);
-
- if ($reflection->isAbstract()) {
- throw InvalidArgumentException::fromAbstractClass($reflection);
- }
-
- return $reflection;
- }
-
- /**
- * @phpstan-param ReflectionClass<T> $reflectionClass
- *
- * @throws UnexpectedValueException
- *
- * @template T of object
- */
- private function checkIfUnSerializationIsSupported(ReflectionClass $reflectionClass, string $serializedString): void
- {
- set_error_handler(static function (int $code, string $message, string $file, int $line) use ($reflectionClass, &$error): bool {
- $error = UnexpectedValueException::fromUncleanUnSerialization(
- $reflectionClass,
- $message,
- $code,
- $file,
- $line
- );
-
- return true;
- });
-
- try {
- $this->attemptInstantiationViaUnSerialization($reflectionClass, $serializedString);
- } finally {
- restore_error_handler();
- }
-
- if ($error) {
- throw $error;
- }
- }
-
- /**
- * @phpstan-param ReflectionClass<T> $reflectionClass
- *
- * @throws UnexpectedValueException
- *
- * @template T of object
- */
- private function attemptInstantiationViaUnSerialization(ReflectionClass $reflectionClass, string $serializedString): void
- {
- try {
- unserialize($serializedString);
- } catch (Exception $exception) {
- throw UnexpectedValueException::fromSerializationTriggeredException($reflectionClass, $exception);
- }
- }
-
- /**
- * @phpstan-param ReflectionClass<T> $reflectionClass
- *
- * @template T of object
- */
- private function isInstantiableViaReflection(ReflectionClass $reflectionClass): bool
- {
- return ! ($this->hasInternalAncestors($reflectionClass) && $reflectionClass->isFinal());
- }
-
- /**
- * Verifies whether the given class is to be considered internal
- *
- * @phpstan-param ReflectionClass<T> $reflectionClass
- *
- * @template T of object
- */
- private function hasInternalAncestors(ReflectionClass $reflectionClass): bool
- {
- do {
- if ($reflectionClass->isInternal()) {
- return true;
- }
-
- $reflectionClass = $reflectionClass->getParentClass();
- } while ($reflectionClass);
-
- return false;
- }
-
- /**
- * Checks if a class is cloneable
- *
- * Classes implementing `__clone` cannot be safely cloned, as that may cause side-effects.
- *
- * @phpstan-param ReflectionClass<T> $reflectionClass
- *
- * @template T of object
- */
- private function isSafeToClone(ReflectionClass $reflectionClass): bool
- {
- return $reflectionClass->isCloneable()
- && ! $reflectionClass->hasMethod('__clone')
- && ! $reflectionClass->isSubclassOf(ArrayIterator::class);
- }
-}
diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php
deleted file mode 100644
index 10508b562..000000000
--- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Doctrine\Instantiator;
-
-use Doctrine\Instantiator\Exception\ExceptionInterface;
-
-/**
- * Instantiator provides utility methods to build objects without invoking their constructors
- */
-interface InstantiatorInterface
-{
- /**
- * @param string $className
- * @phpstan-param class-string<T> $className
- *
- * @return object
- * @phpstan-return T
- *
- * @throws ExceptionInterface
- *
- * @template T of object
- */
- public function instantiate($className);
-}