From 6a461a7c476fa4509adb86b99aa44b5ac49c699f Mon Sep 17 00:00:00 2001 From: Markus Podar Date: Sat, 21 May 2022 22:38:28 +0200 Subject: [PATCH] Fix integration tests by fixing a PHP 8.1+ deprecation warnings in ReflectionClass (#1351) * gha: get more insights when/if logs exist * Better handle cases when we can receive a concrete instance The problem with `null` being passed to `ReflectionClass` was always there but in PHP 8.1+ it triggers a deprecation warnings. Since having `null` in `$concrete` doesn't make sense to reflect anything anyway, we just throw a custom exception (which gets caught a couple lines below) and just carry on. When using `-v` this can be seen, example: ``` $ ./artisan ide-helper:meta -v Cannot make 'Faker\Generator': Class 'Faker\Provider\en_US\Barcode' not found. Cannot make 'Illuminate\Contracts\Auth\Authenticatable': Class does not exist Cannot make 'cache.psr6': Class 'Symfony\Component\Cache\Adapter\Psr16Adapter' not found. Cannot make 'csp-nonce': Class 'Wza3Mf4CXIvCkcp9K3boMUGJoK6S9maO' not found. Cannot make 'env': Class 'local' not found. Cannot make 'filesystem.cloud': Disk [s3] does not have a configured driver. Cannot make 'redis.connection': Redis connection [default] not configured. A new meta file was written to .phpstorm.meta.php ``` * gha: make sure to run meta with -v to see all output Helps when debugging things * Add CHANGELOG.md entry --- .github/workflows/run-integration-tests.yml | 25 ++++++++++++++++----- CHANGELOG.md | 3 +++ src/Console/MetaCommand.php | 6 +++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/.github/workflows/run-integration-tests.yml b/.github/workflows/run-integration-tests.yml index 1ddd591..a7632bc 100644 --- a/.github/workflows/run-integration-tests.yml +++ b/.github/workflows/run-integration-tests.yml @@ -57,16 +57,22 @@ jobs: - name: Execute meta run run: | cd sample - php artisan ide-helper:meta + php artisan ide-helper:meta -v - name: Check file existence run: | ls sample/_ide_helper.php ls sample/.phpstorm.meta.php - - name: Check file count in logs + - name: Check logs run: | - if [ `ls -1q "sample/storage/logs/" | wc -l` -gt 0 ];then exit 1;fi + if [ `ls -1q "sample/storage/logs/" | wc -l` -gt 0 ]; then + for logfile in sample/storage/logs/*; do + echo "-- $logfile --" + cat $logfile + done + exit 1 + fi php-laravel-integration-tests: runs-on: ubuntu-20.04 @@ -115,13 +121,20 @@ jobs: - name: Execute meta run run: | cd sample - php artisan ide-helper:meta + php artisan ide-helper:meta -v - name: Check file existence run: | ls sample/_ide_helper.php ls sample/.phpstorm.meta.php - - name: Check file count in logs + + - name: Check logs run: | - if [ `ls -1q "sample/storage/logs/" | wc -l` -gt 0 ];then exit 1;fi + if [ `ls -1q "sample/storage/logs/" | wc -l` -gt 0 ]; then + for logfile in sample/storage/logs/*; do + echo "-- $logfile --" + cat $logfile + done + exit 1 + fi diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b1d2df..a2f51d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ All notable changes to this project will be documented in this file. [Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v2.12.3...master) -------------- +### Fixes +- Handle PHP 8.1 deprecation warnings when passing `null` to `new \ReflectionClass` [#1351 / mfn](https://github.com/barryvdh/laravel-ide-helper/pull/1351) + 2022-03-06, 2.12.3 ------------------ diff --git a/src/Console/MetaCommand.php b/src/Console/MetaCommand.php index f9dfbe7..a80c5d2 100644 --- a/src/Console/MetaCommand.php +++ b/src/Console/MetaCommand.php @@ -13,6 +13,7 @@ namespace Barryvdh\LaravelIdeHelper\Console; use Barryvdh\LaravelIdeHelper\Factories; use Illuminate\Console\Command; +use RuntimeException; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -95,6 +96,11 @@ class MetaCommand extends Command try { $concrete = $this->laravel->make($abstract); + + if ($concrete === null) { + throw new RuntimeException("Cannot create instance for '$abstract', received 'null'"); + } + $reflectionClass = new \ReflectionClass($concrete); if (is_object($concrete) && !$reflectionClass->isAnonymous()) { $bindings[$abstract] = get_class($concrete);