From e71f3d5fc08b67ae9af2501288a6fdc875c90ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Wit?= Date: Sun, 20 Jun 2021 10:18:14 +0200 Subject: [PATCH] Check for traits recursively (#1216) * Check for traits recursively * Remove autoload bool from class_uses_recursive * Add test * Update src/Console/ModelsCommand.php Co-authored-by: Markus Podar * Updated changelog Co-authored-by: Markus Podar --- CHANGELOG.md | 2 ++ src/Console/ModelsCommand.php | 5 ++-- src/Generator.php | 2 +- .../ModelWithNestedFactoryFactory.php | 30 +++++++++++++++++++ .../Models/ModelWithNestedFactory.php | 9 ++++++ .../Factories/__snapshots__/Test__test__1.php | 18 +++++++++++ 6 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 tests/Console/ModelsCommand/Factories/Factories/ModelWithNestedFactoryFactory.php create mode 100644 tests/Console/ModelsCommand/Factories/Models/ModelWithNestedFactory.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 98ffdc4..6c75316 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file. [Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v2.10.0...master) -------------- +### Fixed +- Fix recursively searching for `HasFactory` and `Macroable` traits [\#1216 / daniel-de-wit](https://github.com/barryvdh/laravel-ide-helper/pull/1216) 2021-04-09, 2.10.0 ------------------ diff --git a/src/Console/ModelsCommand.php b/src/Console/ModelsCommand.php index 35c1419..12fe8b9 100644 --- a/src/Console/ModelsCommand.php +++ b/src/Console/ModelsCommand.php @@ -1082,7 +1082,7 @@ class ModelsCommand extends Command */ protected function getSoftDeleteMethods($model) { - $traits = class_uses(get_class($model), true); + $traits = class_uses_recursive($model); if (in_array('Illuminate\\Database\\Eloquent\\SoftDeletes', $traits)) { $modelName = $this->getClassNameInDestinationFile($model, get_class($model)); $builder = $this->getClassNameInDestinationFile($model, \Illuminate\Database\Query\Builder::class); @@ -1105,7 +1105,8 @@ class ModelsCommand extends Command $modelName = get_class($model); - $traits = class_uses($modelName, true); + + $traits = class_uses_recursive($modelName); if (!in_array('Illuminate\\Database\\Eloquent\\Factories\\HasFactory', $traits)) { return; } diff --git a/src/Generator.php b/src/Generator.php index a582200..9f0438f 100644 --- a/src/Generator.php +++ b/src/Generator.php @@ -296,7 +296,7 @@ class Generator return !$reflection->isInternal() && $reflection->getName() === $class; }) ->filter(function ($class) { - $traits = class_uses($class); + $traits = class_uses_recursive($class); // Filter only classes with the macroable trait return isset($traits[Macroable::class]); diff --git a/tests/Console/ModelsCommand/Factories/Factories/ModelWithNestedFactoryFactory.php b/tests/Console/ModelsCommand/Factories/Factories/ModelWithNestedFactoryFactory.php new file mode 100644 index 0000000..1362462 --- /dev/null +++ b/tests/Console/ModelsCommand/Factories/Factories/ModelWithNestedFactoryFactory.php @@ -0,0 +1,30 @@ +