X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSetManager.pm;h=addc8c36fb715e8e0ad15d1f60d63ddf198921f7;hb=b090048f6d8bd2cba0bae8ea7ec26459dd20dca8;hp=3ae9502c72382029d3dff5ecd5eaa8dee475156f;hpb=86a432d4cc096062e2374f118ce38aa131799d6a;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSetManager.pm b/lib/DBIx/Class/ResultSetManager.pm index 3ae9502..addc8c3 100644 --- a/lib/DBIx/Class/ResultSetManager.pm +++ b/lib/DBIx/Class/ResultSetManager.pm @@ -2,9 +2,8 @@ package DBIx::Class::ResultSetManager; use strict; use warnings; use base 'DBIx::Class'; -use Package::Stash (); -use DBIx::Class::_Util 'set_subname'; +use DBIx::Class::_Util qw( set_subname describe_class_methods ); use namespace::clean; warn "DBIx::Class::ResultSetManager never left experimental status and @@ -56,25 +55,22 @@ sub _register_attributes { my $cache = $self->_attr_cache; return if keys %$cache == 0; - foreach my $meth (keys %{ { map - { $_ => 1 } + for my $meth( map - { Package::Stash->new($_)->list_all_symbols("CODE") } - @{ mro::get_linear_isa( ref $self || $self ) } - } } ) { - # *DO NOT* rely on P::S returning crefs in reverse mro order - # but instead ask the mro to redo the lookup + { $_->{name} } + grep + { $_->{attributes}{ResultSet} } + map + { $_->[0] } + values %{ describe_class_methods( ref $self || $self )->{methods} } + ) { # This codepath is extremely old, miht as well keep it running # as-is with no room for surprises - my $attrs = $cache->{$self->can($meth)}; - next unless $attrs; - if ($attrs->[0] eq 'ResultSet') { - no strict 'refs'; - my $resultset_class = $self->_setup_resultset_class; - my $name = join '::',$resultset_class, $meth; - *$name = set_subname $name, $self->can($meth); - delete ${"${self}::"}{$meth}; - } + no strict 'refs'; + my $resultset_class = $self->_setup_resultset_class; + my $name = join '::',$resultset_class, $meth; + *$name = set_subname $name, $self->can($meth); + delete ${"${self}::"}{$meth}; } }