Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions src/Illuminate/Auth/Access/Gate.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Database\Eloquent\Attributes\UsePolicy;
use Illuminate\Support\Arr;
use Illuminate\Support\Attr;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use InvalidArgumentException;
Expand Down Expand Up @@ -701,11 +702,7 @@ protected function getPolicyFromAttribute(string $class): ?string
return null;
}

$attributes = (new ReflectionClass($class))->getAttributes(UsePolicy::class);

return $attributes !== []
? $attributes[0]->newInstance()->class
: null;
return Attr::onClass($class)->instance(UsePolicy::class)->class;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
use Illuminate\Database\Eloquent\Attributes\UseResourceCollection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Support\Attr;
use LogicException;
use ReflectionClass;

trait TransformsToResourceCollection
{
Expand Down Expand Up @@ -93,11 +93,7 @@ protected function resolveResourceFromAttribute(string $class): ?string
return null;
}

$attributes = (new ReflectionClass($class))->getAttributes(UseResource::class);

return $attributes !== []
? $attributes[0]->newInstance()->class
: null;
return Attr::onClass($class)->instance(UseResource::class)?->class;
}

/**
Expand All @@ -112,10 +108,6 @@ protected function resolveResourceCollectionFromAttribute(string $class): ?strin
return null;
}

$attributes = (new ReflectionClass($class))->getAttributes(UseResourceCollection::class);

return $attributes !== []
? $attributes[0]->newInstance()->class
: null;
return Attr::onClass($class)->instance(UseResourceCollection::class)?->class;
}
}
8 changes: 3 additions & 5 deletions src/Illuminate/Console/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
use Illuminate\Contracts\Console\Application as ApplicationContract;
use Illuminate\Contracts\Container\Container;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Support\Attr;
use Illuminate\Support\ProcessUtils;
use ReflectionClass;
use Symfony\Component\Console\Application as SymfonyApplication;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command as SymfonyCommand;
Expand Down Expand Up @@ -255,11 +255,9 @@ protected function addToParent(SymfonyCommand|callable $command)
public function resolve($command)
{
if (is_subclass_of($command, SymfonyCommand::class)) {
$attribute = (new ReflectionClass($command))->getAttributes(AsCommand::class);
$commandName = Attr::onClass($command)->instance(AsCommand::class)?->name;

$commandName = ! empty($attribute) ? $attribute[0]->newInstance()->name : null;

if (! is_null($commandName)) {
if ($commandName) {
foreach (explode('|', $commandName) as $name) {
$this->commandMap[$name] = $command;
}
Expand Down
23 changes: 5 additions & 18 deletions src/Illuminate/Console/Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
use Illuminate\Console\Attributes\Signature;
use Illuminate\Console\View\Components\Factory;
use Illuminate\Contracts\Console\Isolatable;
use Illuminate\Support\Attr;
use Illuminate\Support\Traits\Macroable;
use ReflectionClass;
use Symfony\Component\Console\Command\Command as SymfonyCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
Expand Down Expand Up @@ -136,25 +136,12 @@ public function __construct()
*/
protected function configureFromAttributes()
{
$reflection = new ReflectionClass($this);
$signature = Attr::onClass($this)->instance(Signature::class);

$signature = $reflection->getAttributes(Signature::class);
$this->signature = $signature?->signature;
$this->aliases = $signature?->aliases;

if (count($signature) > 0) {
$signatureInstance = $signature[0]->newInstance();

$this->signature = $signatureInstance->signature;

if ($signatureInstance->aliases !== null) {
$this->aliases = $signatureInstance->aliases;
}
}

$description = $reflection->getAttributes(Description::class);

if (count($description) > 0) {
$this->description = $description[0]->newInstance()->description;
}
$this->description = Attr::onClass($this)->instance(Description::class)->description ?? '';
}

/**
Expand Down
1 change: 1 addition & 0 deletions src/Illuminate/Database/Eloquent/Concerns/HasEvents.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Events\NullDispatcher;
use Illuminate\Support\Arr;
use Illuminate\Support\Attr;
use Illuminate\Support\Collection;
use InvalidArgumentException;
use ReflectionClass;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

use Illuminate\Database\Eloquent\Attributes\UseResource;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Attr;
use Illuminate\Support\Str;
use LogicException;
use ReflectionClass;

trait TransformsToResource
{
Expand Down Expand Up @@ -90,10 +90,6 @@ protected function resolveResourceFromAttribute(string $class): ?string
return null;
}

$attributes = (new ReflectionClass($class))->getAttributes(UseResource::class);

return $attributes !== []
? $attributes[0]->newInstance()->class
: null;
return Attr::onClass($class)->instance(UseResource::class)?->class;
}
}
9 changes: 3 additions & 6 deletions src/Illuminate/Database/Eloquent/Factories/Factory.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
use Illuminate\Database\Eloquent\Collection as EloquentCollection;
use Illuminate\Database\Eloquent\Factories\Attributes\UseModel;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Attr;
use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Enumerable;
use Illuminate\Support\Str;
use Illuminate\Support\Traits\Conditionable;
use Illuminate\Support\Traits\ForwardsCalls;
use Illuminate\Support\Traits\Macroable;
use ReflectionClass;
use Throwable;
use UnitEnum;

Expand Down Expand Up @@ -945,11 +945,8 @@ public function newModel(array $attributes = [])
public function modelName()
{
if (! array_key_exists(static::class, static::$cachedModelAttributes)) {
$attribute = (new ReflectionClass($this))->getAttributes(UseModel::class);

static::$cachedModelAttributes[static::class] = count($attribute) > 0
? $attribute[0]->newInstance()->class
: false;
static::$cachedModelAttributes[static::class] = Attr::onClass($this)
->instance(UseModel::class)?->class ?? false;
}

if (static::$cachedModelAttributes[static::class]) {
Expand Down
12 changes: 5 additions & 7 deletions src/Illuminate/Database/Eloquent/Factories/HasFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Illuminate\Database\Eloquent\Factories;

use Illuminate\Database\Eloquent\Attributes\UseFactory;
use Illuminate\Support\Attr;

/**
* @template TFactory of \Illuminate\Database\Eloquent\Factories\Factory
Expand Down Expand Up @@ -42,17 +43,14 @@ protected static function newFactory()
/**
* Get the factory from the UseFactory class attribute.
*
* @return TFactory|null
* @return TFactory|void
*/
protected static function getUseFactoryAttribute()
{
$attributes = (new \ReflectionClass(static::class))
->getAttributes(UseFactory::class);

if ($attributes !== []) {
$useFactory = $attributes[0]->newInstance();
$factoryClass = Attr::onClass(static::class)->instance(UseFactory::class)?->factoryClass;

$factory = $useFactory->factoryClass::new();
if ($factoryClass) {
$factory = $factoryClass::new();

$factory->guessModelNamesUsing(fn () => static::class);

Expand Down
12 changes: 2 additions & 10 deletions src/Illuminate/Database/Eloquent/HasCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
namespace Illuminate\Database\Eloquent;

use Illuminate\Database\Eloquent\Attributes\CollectedBy;
use ReflectionClass;
use Illuminate\Support\Attr;

/**
* @template TCollection of \Illuminate\Database\Eloquent\Collection
Expand Down Expand Up @@ -43,14 +43,6 @@ public function newCollection(array $models = [])
*/
public function resolveCollectionFromAttribute()
{
$reflectionClass = new ReflectionClass(static::class);

$attributes = $reflectionClass->getAttributes(CollectedBy::class);

if (! isset($attributes[0]) || ! isset($attributes[0]->getArguments()[0])) {
return;
}

return $attributes[0]->getArguments()[0];
return Attr::onClass(static::class)->instance(CollectedBy::class)?->collectionClass;
}
}
28 changes: 8 additions & 20 deletions src/Illuminate/Database/Eloquent/Model.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Support\Arr;
use Illuminate\Support\Attr;
use Illuminate\Support\Collection as BaseCollection;
use Illuminate\Support\Str;
use Illuminate\Support\Stringable as SupportStringable;
Expand All @@ -33,7 +34,6 @@
use JsonSerializable;
use LogicException;
use ReflectionClass;
use ReflectionMethod;
use Stringable;

use function Illuminate\Support\enum_value;
Expand Down Expand Up @@ -1836,12 +1836,7 @@ public function newEloquentBuilder($query)
*/
protected function resolveCustomBuilderClass()
{
$attributes = (new ReflectionClass($this))
->getAttributes(UseEloquentBuilder::class);

return ! empty($attributes)
? $attributes[0]->newInstance()->builderClass
: false;
return Attr::onClass($this)->instance(UseEloquentBuilder::class)?->builderClass ?? false;
}

/**
Expand Down Expand Up @@ -1906,9 +1901,8 @@ public function callNamedScope($scope, array $parameters = [])
*/
protected static function isScopeMethodWithAttribute(string $method)
{
return method_exists(static::class, $method) &&
(new ReflectionMethod(static::class, $method))
->getAttributes(LocalScope::class) !== [];
return method_exists(static::class, $method)
&& Attr::onMethod(static::class, $method)->has(LocalScope::class);
}

/**
Expand Down Expand Up @@ -2574,17 +2568,11 @@ protected static function resolveClassAttribute(string $attributeClass, ?string
}

try {
$reflection = new ReflectionClass($class);

do {
$attributes = $reflection->getAttributes($attributeClass);

if (count($attributes) > 0) {
$instance = $attributes[0]->newInstance();
$instance = Attr::onClass($class)->instance($attributeClass, true);

return static::$classAttributes[$cacheKey] = $property ? $instance->{$property} : $instance;
}
} while ($reflection = $reflection->getParentClass());
if ($instance) {
return static::$classAttributes[$cacheKey] = $property ? $instance->{$property} : $instance;
}
} catch (Exception) {
//
}
Expand Down
26 changes: 6 additions & 20 deletions src/Illuminate/Foundation/Http/FormRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
use Illuminate\Foundation\Http\Attributes\StopOnFirstFailure;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Attr;
use Illuminate\Validation\ValidatesWhenResolvedTrait;
use ReflectionClass;

class FormRequest extends Request implements ValidatesWhenResolved
{
Expand Down Expand Up @@ -121,29 +121,15 @@ protected function getValidatorInstance()
*/
protected function configureFromAttributes()
{
$reflection = new ReflectionClass($this);
$attr = Attr::onClass($this);

if (count($reflection->getAttributes(StopOnFirstFailure::class)) > 0) {
$this->stopOnFirstFailure = true;
}

$redirectTo = $reflection->getAttributes(RedirectTo::class);
$this->stopOnFirstFailure = $attr->has(StopOnFirstFailure::class);

if (count($redirectTo) > 0) {
$this->redirect = $redirectTo[0]->newInstance()->url;
}
$this->redirect = $attr->instance(RedirectTo::class)?->url;

$redirectToRoute = $reflection->getAttributes(RedirectToRoute::class);
$this->redirectRoute = $attr->instance(RedirectToRoute::class)?->route;

if (count($redirectToRoute) > 0) {
$this->redirectRoute = $redirectToRoute[0]->newInstance()->route;
}

$errorBag = $reflection->getAttributes(ErrorBag::class);

if (count($errorBag) > 0) {
$this->errorBag = $errorBag[0]->newInstance()->name;
}
$this->errorBag = $attr->instance(ErrorBag::class)?->name ?? $this->errorBag;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use Illuminate\Foundation\Testing\Attributes\Seed;
use Illuminate\Foundation\Testing\Attributes\Seeder;
use ReflectionClass;
use Illuminate\Support\Attr;

trait CanConfigureMigrationCommands
{
Expand Down Expand Up @@ -53,13 +53,9 @@ protected function shouldDropTypes()
*/
protected function shouldSeed()
{
$class = new ReflectionClass($this);

do {
if (count($class->getAttributes(Seed::class)) > 0) {
return true;
}
} while ($class = $class->getParentClass());
if (Attr::onClass($this)->has(Seed::class, true)) {
return true;
}

return property_exists($this, 'seed') ? $this->seed : false;
}
Expand All @@ -71,15 +67,11 @@ protected function shouldSeed()
*/
protected function seeder()
{
$class = new ReflectionClass($this);

do {
$seeder = $class->getAttributes(Seeder::class);
$seeder = Attr::onClass($this)->recursive()->instance(Seeder::class)?->class;

if (count($seeder) > 0) {
return $seeder[0]->newInstance()->class;
}
} while ($class = $class->getParentClass());
if ($seeder) {
return $seeder;
}

return property_exists($this, 'seeder') ? $this->seeder : false;
}
Expand Down
Loading
Loading