Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
The incorrect annotation is causing confusion in static analysis.
The
create
method actually returns\Spatie\Fractal\Fractal
, not\Spatie\Fractalistic\Fractal
. WhenFractal::create
is called, it invokes the parent (Fractalistic)create
method usingparent::create
. This parent method, in turn, uses thenew static
keyword to return an instance of the subclass when called from that subclass. Therefore, the return type ofFractal::create
is actuallyFractal
, notFractalistic
.So, by changing the annotated return type to
@return static
, we can easily extend\Spatie\Fractal\Fractal
and the return type problem will be solved.Problem
Consider this example: You've created a macro named
ok
onFractal
. However, your IDE complains that theok
method doesn't exist onFractalistic
. The issue lies in the@return
annotation, which incorrectly indicates thatcreate
returnsFractalistic
instead ofFractal
. By correcting this annotation, static analyzers will recognize the macro onFractal
.