Make ClassLike::from return type assert the subclass type#154
Merged
dg merged 3 commits intonette:masterfrom Mar 7, 2024
Merged
Make ClassLike::from return type assert the subclass type#154dg merged 3 commits intonette:masterfrom
ClassLike::from return type assert the subclass type#154dg merged 3 commits intonette:masterfrom
Conversation
ClassLike::from return type assert the typeClassLike::from return type assert the subclass type
dg
reviewed
Mar 6, 2024
src/PhpGenerator/ClassLike.php
Outdated
| ->fromClassReflection(new \ReflectionClass($class), $withBodies); | ||
|
|
||
| if (!$class instanceof static) { | ||
| throw new Nette\InvalidArgumentException("Object '$class' is not an instance of " . static::class); |
Member
There was a problem hiding this comment.
The error message should be different so that the user understands what he is doing wrong. And please create a test case for it.
Contributor
Author
There was a problem hiding this comment.
Sure. I'm thinking of a message that provides better guidance:
"Trait1" is not a "ClassType". Use TraitType::from() or ClassLike::from() instead.
Contributor
Author
There was a problem hiding this comment.
Test added and exception message improved. Is that all right?
Member
|
Thanks! |
dg
pushed a commit
that referenced
this pull request
Mar 7, 2024
Member
|
Since this is a BC break, for now I'll just put a warning instead of throwing exceptions, and I'll put this change in the bigger version. |
dg
pushed a commit
that referenced
this pull request
Mar 7, 2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
When reading a
ClassTypefrom a FQCN or a file, the result can be anything from the 4 subclasses. When we know the type of the object that is parsed, having a more strict return type has additional benefits:Usage:
If the type is unknown, use
ClassLike::from($class).Otherwise, when the expected type is known, use the more specific
ClassType::from($fqcn),TraitType::from($fqcn),InterfaceType::from($fqcn), orEnumType::from($fqcn).This is a breaking change for users that call
ClassType::from($fqcn)on something that is not a class name.