From 9a48241ceed51abf5db921ebb69ed39be5cdefc1 Mon Sep 17 00:00:00 2001 From: "A. B. M. Mahmudul Hasan" Date: Sat, 9 May 2026 23:46:26 +0600 Subject: [PATCH] updated call site --- src/DI/Resolver/ParameterResolver.php | 3 ++- tests/Regression/BugFixesTest.php | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/DI/Resolver/ParameterResolver.php b/src/DI/Resolver/ParameterResolver.php index f8f9f4f..8041447 100644 --- a/src/DI/Resolver/ParameterResolver.php +++ b/src/DI/Resolver/ParameterResolver.php @@ -573,6 +573,7 @@ private function rememberResolved(string $key, array $value): array private function shouldUseValueCache(ReflectionFunctionAbstract $reflector, string $type): bool { return $type === 'constructor' - && (!($reflector instanceof ReflectionMethod) || $reflector->getName() === '__construct'); + && $reflector instanceof ReflectionMethod + && $reflector->getName() === '__construct'; } } diff --git a/tests/Regression/BugFixesTest.php b/tests/Regression/BugFixesTest.php index d2ec101..6238579 100644 --- a/tests/Regression/BugFixesTest.php +++ b/tests/Regression/BugFixesTest.php @@ -227,3 +227,19 @@ public function commit(): bool expect($first)->not->toBe($second); }); + +it('does not reuse closure parameter resolution across different closures', function () { + $c = Container::instance(uniqid('closure_args_')); + $c->definitions()->bind( + RegressionTokenSource::class, + fn () => new RegressionTransientTokenSource(), + LifetimeEnum::Transient, + ); + + $noArgResult = $c->call(static fn (): string => 'ok'); + $token = $c->call(static fn (RegressionTokenSource $tokenSource): string => $tokenSource->token()); + + expect($noArgResult)->toBe('ok') + ->and($token)->toBeString() + ->and(strlen($token))->toBeGreaterThan(0); +});