From 88d26a3a98d926de48c9165c9ba128d7b4db9343 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 18 Jun 2024 20:47:06 +0200 Subject: [PATCH] support for PHP 8.4 --- .github/workflows/tests.yml | 2 +- composer.json | 2 +- src/Utils/Callback.php | 2 +- src/Utils/Reflection.php | 4 ++-- tests/Utils/Callback.closure.phpt | 8 ++++---- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8aaab4b13..afbcd7632 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest] - php: ['8.0', '8.1', '8.2', '8.3'] + php: ['8.0', '8.1', '8.2', '8.3', '8.4'] fail-fast: false diff --git a/composer.json b/composer.json index d08757947..74bd6183c 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ } ], "require": { - "php": "8.0 - 8.3" + "php": "8.0 - 8.4" }, "require-dev": { "nette/tester": "^2.5", diff --git a/src/Utils/Callback.php b/src/Utils/Callback.php index 732af9670..1777428fd 100644 --- a/src/Utils/Callback.php +++ b/src/Utils/Callback.php @@ -94,7 +94,7 @@ public static function toReflection($callable): \ReflectionMethod|\ReflectionFun } if (is_string($callable) && str_contains($callable, '::')) { - return new ReflectionMethod($callable); + return new ReflectionMethod(...explode('::', $callable, 2)); } elseif (is_array($callable)) { return new ReflectionMethod($callable[0], $callable[1]); } elseif (is_object($callable) && !$callable instanceof \Closure) { diff --git a/src/Utils/Reflection.php b/src/Utils/Reflection.php index 5a4f2ab75..355863458 100644 --- a/src/Utils/Reflection.php +++ b/src/Utils/Reflection.php @@ -100,7 +100,7 @@ public static function getMethodDeclaringMethod(\ReflectionMethod $method): \Ref $hash = [$method->getFileName(), $method->getStartLine(), $method->getEndLine()]; if (($alias = $decl->getTraitAliases()[$method->name] ?? null) - && ($m = new \ReflectionMethod($alias)) + && ($m = new \ReflectionMethod(...explode('::', $alias, 2))) && $hash === [$m->getFileName(), $m->getStartLine(), $m->getEndLine()] ) { return self::getMethodDeclaringMethod($m); @@ -125,7 +125,7 @@ public static function getMethodDeclaringMethod(\ReflectionMethod $method): \Ref public static function areCommentsAvailable(): bool { static $res; - return $res ?? $res = (bool) (new \ReflectionMethod(__METHOD__))->getDocComment(); + return $res ?? $res = (bool) (new \ReflectionMethod(self::class, __FUNCTION__))->getDocComment(); } diff --git a/tests/Utils/Callback.closure.phpt b/tests/Utils/Callback.closure.phpt index eeb608411..84fa0a8f4 100644 --- a/tests/Utils/Callback.closure.phpt +++ b/tests/Utils/Callback.closure.phpt @@ -87,7 +87,7 @@ class TestChild extends Test function getName($ref) { if ($ref instanceof ReflectionFunction) { - return $ref->getName(); + return $ref->getShortName(); } elseif ($ref instanceof ReflectionMethod) { return $ref->getDeclaringClass()->getName() . '::' . $ref->getName(); } @@ -121,9 +121,9 @@ test('closure', function () { Assert::same($closure, Closure::fromCallable($closure)); Assert::same($closure, Callback::unwrap($closure)); Assert::same('{closure}', Callback::toString($closure)); - Assert::same('{closure}', getName(Callback::toReflection($closure))); - Assert::same('{closure}', Closure::fromCallable($closure)(...[&$res])); - Assert::same('{closure}', $res); + Assert::match('{closure%a?%}', getName(Callback::toReflection($closure))); + Assert::match('{closure%a?%}', Closure::fromCallable($closure)(...[&$res])); + Assert::match('{closure%a?%}', $res); });