@lsmith77 And what about using the same option for requirements and constraints ? I mean, requirements === Constraints\Regex no ? So we could use always "requirements" and in case requirements is not an instance of `Constraint` we replace it by a Regex constraint with the requirements argument.

If I do this this part of the method will be way more simple so I'll not have to split it up.

I'm not 100% sure that it is possible to TypeHint an annotation on mixed `string|\Classname`.