1313use Illuminate \Contracts \Container \Container as ContainerContract ;
1414use Illuminate \Contracts \Container \ContextualAttribute ;
1515use Illuminate \Contracts \Container \SelfBuilding ;
16- use Illuminate \Support \Traits \ReflectsClosures ;
1716use LogicException ;
1817use ReflectionAttribute ;
1918use ReflectionClass ;
2019use ReflectionException ;
2120use ReflectionFunction ;
21+ use ReflectionIntersectionType ;
2222use ReflectionParameter ;
23+ use ReflectionUnionType ;
2324use TypeError ;
2425
2526class Container implements ArrayAccess, ContainerContract
2627{
27- use ReflectsClosures;
28-
2928 /**
3029 * The current globally available container (if any).
3130 *
@@ -221,8 +220,6 @@ public function when($concrete)
221220 /**
222221 * Define a contextual binding based on an attribute.
223222 *
224- * @param string $attribute
225- * @param \Closure $handler
226223 * @return void
227224 */
228225 public function whenHasAttribute (string $ attribute , Closure $ handler )
@@ -245,8 +242,6 @@ public function bound($abstract)
245242
246243 /**
247244 * {@inheritdoc}
248- *
249- * @return bool
250245 */
251246 public function has (string $ id ): bool
252247 {
@@ -568,11 +563,44 @@ protected function bindBasedOnClosureReturnTypes($abstract, $concrete = null, $s
568563 }
569564 }
570565
566+ /**
567+ * Get the class names / types of the return type of the given Closure.
568+ *
569+ * @return list<class-string>
570+ *
571+ * @throws \ReflectionException
572+ */
573+ protected function closureReturnTypes (Closure $ closure )
574+ {
575+ $ reflection = new ReflectionFunction ($ closure );
576+
577+ if ($ reflection ->getReturnType () === null ||
578+ $ reflection ->getReturnType () instanceof ReflectionIntersectionType) {
579+ return [];
580+ }
581+
582+ $ types = $ reflection ->getReturnType () instanceof ReflectionUnionType
583+ ? $ reflection ->getReturnType ()->getTypes ()
584+ : [$ reflection ->getReturnType ()];
585+
586+ $ returnTypes = [];
587+
588+ foreach ($ types as $ type ) {
589+ if ($ type ->isBuiltin () ||
590+ in_array ($ type ->getName (), ['static ' , 'self ' ])) {
591+ continue ;
592+ }
593+
594+ $ returnTypes [] = $ type ->getName ();
595+ }
596+
597+ return $ returnTypes ;
598+ }
599+
571600 /**
572601 * "Extend" an abstract type in the container.
573602 *
574603 * @param string $abstract
575- * @param \Closure $closure
576604 * @return void
577605 *
578606 * @throws \InvalidArgumentException
@@ -711,7 +739,6 @@ public function alias($abstract, $alias)
711739 * Bind a new callback to an abstract's rebind event.
712740 *
713741 * @param string $abstract
714- * @param \Closure $callback
715742 * @return mixed
716743 */
717744 public function rebinding ($ abstract , Closure $ callback )
@@ -771,8 +798,6 @@ protected function getReboundCallbacks($abstract)
771798 /**
772799 * Wrap the given closure such that its dependencies will be injected when executed.
773800 *
774- * @param \Closure $callback
775- * @param array $parameters
776801 * @return \Closure
777802 */
778803 public function wrap (Closure $ callback , array $ parameters = [])
@@ -848,7 +873,6 @@ public function factory($abstract)
848873 * @template TClass of object
849874 *
850875 * @param string|class-string<TClass>|callable $abstract
851- * @param array $parameters
852876 * @return ($abstract is class-string<TClass> ? TClass : mixed)
853877 *
854878 * @throws \Illuminate\Contracts\Container\BindingResolutionException
@@ -864,7 +888,6 @@ public function makeWith($abstract, array $parameters = [])
864888 * @template TClass of object
865889 *
866890 * @param string|class-string<TClass> $abstract
867- * @param array $parameters
868891 * @return ($abstract is class-string<TClass> ? TClass : mixed)
869892 *
870893 * @throws \Illuminate\Contracts\Container\BindingResolutionException
@@ -1297,7 +1320,6 @@ protected function getLastParameterOverride()
12971320 /**
12981321 * Resolve a non-class hinted primitive dependency.
12991322 *
1300- * @param \ReflectionParameter $parameter
13011323 * @return mixed
13021324 *
13031325 * @throws \Illuminate\Contracts\Container\BindingResolutionException
@@ -1326,7 +1348,6 @@ protected function resolvePrimitive(ReflectionParameter $parameter)
13261348 /**
13271349 * Resolve a class based dependency from the container.
13281350 *
1329- * @param \ReflectionParameter $parameter
13301351 * @return mixed
13311352 *
13321353 * @throws \Illuminate\Contracts\Container\BindingResolutionException
@@ -1367,7 +1388,6 @@ protected function resolveClass(ReflectionParameter $parameter)
13671388 /**
13681389 * Resolve a class based variadic dependency from the container.
13691390 *
1370- * @param \ReflectionParameter $parameter
13711391 * @return mixed
13721392 */
13731393 protected function resolveVariadicClass (ReflectionParameter $ parameter )
@@ -1386,7 +1406,6 @@ protected function resolveVariadicClass(ReflectionParameter $parameter)
13861406 /**
13871407 * Resolve a dependency based on an attribute.
13881408 *
1389- * @param \ReflectionAttribute $attribute
13901409 * @return mixed
13911410 */
13921411 public function resolveFromAttribute (ReflectionAttribute $ attribute )
@@ -1430,7 +1449,6 @@ protected function notInstantiable($concrete)
14301449 /**
14311450 * Throw an exception for an unresolvable primitive.
14321451 *
1433- * @param \ReflectionParameter $parameter
14341452 * @return void
14351453 *
14361454 * @throws \Illuminate\Contracts\Container\BindingResolutionException
@@ -1446,7 +1464,6 @@ protected function unresolvablePrimitive(ReflectionParameter $parameter)
14461464 * Register a new before resolving callback for all types.
14471465 *
14481466 * @param \Closure|string $abstract
1449- * @param \Closure|null $callback
14501467 * @return void
14511468 */
14521469 public function beforeResolving ($ abstract , ?Closure $ callback = null )
@@ -1466,7 +1483,6 @@ public function beforeResolving($abstract, ?Closure $callback = null)
14661483 * Register a new resolving callback.
14671484 *
14681485 * @param \Closure|string $abstract
1469- * @param \Closure|null $callback
14701486 * @return void
14711487 */
14721488 public function resolving ($ abstract , ?Closure $ callback = null )
@@ -1486,7 +1502,6 @@ public function resolving($abstract, ?Closure $callback = null)
14861502 * Register a new after resolving callback for all types.
14871503 *
14881504 * @param \Closure|string $abstract
1489- * @param \Closure|null $callback
14901505 * @return void
14911506 */
14921507 public function afterResolving ($ abstract , ?Closure $ callback = null )
@@ -1505,8 +1520,6 @@ public function afterResolving($abstract, ?Closure $callback = null)
15051520 /**
15061521 * Register a new after resolving attribute callback for all types.
15071522 *
1508- * @param string $attribute
1509- * @param \Closure $callback
15101523 * @return void
15111524 */
15121525 public function afterResolvingAttribute (string $ attribute , \Closure $ callback )
@@ -1537,7 +1550,6 @@ protected function fireBeforeResolvingCallbacks($abstract, $parameters = [])
15371550 *
15381551 * @param string $abstract
15391552 * @param array $parameters
1540- * @param array $callbacks
15411553 * @return void
15421554 */
15431555 protected function fireBeforeCallbackArray ($ abstract , $ parameters , array $ callbacks )
@@ -1614,7 +1626,6 @@ public function fireAfterResolvingAttributeCallbacks(array $attributes, $object)
16141626 *
16151627 * @param string $abstract
16161628 * @param object $object
1617- * @param array $callbacksPerType
16181629 * @return array
16191630 */
16201631 protected function getCallbacksForType ($ abstract , $ object , array $ callbacksPerType )
@@ -1634,7 +1645,6 @@ protected function getCallbacksForType($abstract, $object, array $callbacksPerTy
16341645 * Fire an array of callbacks with an object.
16351646 *
16361647 * @param mixed $object
1637- * @param array $callbacks
16381648 * @return void
16391649 */
16401650 protected function fireCallbackArray ($ object , array $ callbacks )
@@ -1797,7 +1807,6 @@ public static function getInstance()
17971807 /**
17981808 * Set the shared instance of the container.
17991809 *
1800- * @param \Illuminate\Contracts\Container\Container|null $container
18011810 * @return \Illuminate\Contracts\Container\Container|static
18021811 */
18031812 public static function setInstance (?ContainerContract $ container = null )
@@ -1809,7 +1818,6 @@ public static function setInstance(?ContainerContract $container = null)
18091818 * Determine if a given offset exists.
18101819 *
18111820 * @param string $key
1812- * @return bool
18131821 */
18141822 public function offsetExists ($ key ): bool
18151823 {
@@ -1820,7 +1828,6 @@ public function offsetExists($key): bool
18201828 * Get the value at a given offset.
18211829 *
18221830 * @param string $key
1823- * @return mixed
18241831 */
18251832 public function offsetGet ($ key ): mixed
18261833 {
@@ -1832,7 +1839,6 @@ public function offsetGet($key): mixed
18321839 *
18331840 * @param string $key
18341841 * @param mixed $value
1835- * @return void
18361842 */
18371843 public function offsetSet ($ key , $ value ): void
18381844 {
@@ -1843,7 +1849,6 @@ public function offsetSet($key, $value): void
18431849 * Unset the value at a given offset.
18441850 *
18451851 * @param string $key
1846- * @return void
18471852 */
18481853 public function offsetUnset ($ key ): void
18491854 {
0 commit comments