diff options
Diffstat (limited to 'lib/MooseX/NonMoose/Meta/Role/Constructor.pm')
-rw-r--r-- | lib/MooseX/NonMoose/Meta/Role/Constructor.pm | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/lib/MooseX/NonMoose/Meta/Role/Constructor.pm b/lib/MooseX/NonMoose/Meta/Role/Constructor.pm index db13781..272bc95 100644 --- a/lib/MooseX/NonMoose/Meta/Role/Constructor.pm +++ b/lib/MooseX/NonMoose/Meta/Role/Constructor.pm @@ -46,25 +46,13 @@ around can_be_inlined => sub { return $self->$orig(@_); }; -sub _find_next_nonmoose_constructor_package { - my $self = shift; - my $new = $self->name; - my $meta = $self->associated_metaclass; - for my $method (map { $_->{code} } $meta->find_all_methods_by_name($new)) { - next if $method->associated_metaclass->meta->can('does_role') - && $method->associated_metaclass->meta->does_role('MooseX::NonMoose::Meta::Role::Class'); - return $method->package_name; - } - # this should never happen (it should find Moose::Object at least) - $meta->throw_error("Couldn't find a non-Moose constructor for " . $meta->name); -} - +# for Moose 1.21 compatibility sub _generate_fallback_constructor { my $self = shift; my ($class_var) = @_; my $new = $self->name; my $meta = $self->associated_metaclass; - my $super_new_class = $self->_find_next_nonmoose_constructor_package; + my $super_new_class = $meta->_find_next_nonmoose_constructor_package; my $arglist = $meta->find_method_by_name('FOREIGNBUILDARGS') ? "${class_var}->FOREIGNBUILDARGS(\@_)" : '@_'; @@ -83,12 +71,13 @@ sub _generate_fallback_constructor { . "}"; } +# for Moose 1.21 compatibility sub _generate_instance { my $self = shift; my ($var, $class_var) = @_; my $new = $self->name; my $meta = $self->associated_metaclass; - my $super_new_class = $self->_find_next_nonmoose_constructor_package; + my $super_new_class = $meta->_find_next_nonmoose_constructor_package; my $arglist = $meta->find_method_by_name('FOREIGNBUILDARGS') ? "${class_var}->FOREIGNBUILDARGS(\@_)" : '@_'; |