X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSetManager.pm;h=1c7cf45aae8560e672ff25c7fd1a93c59582cd3c;hb=514b84f6b60b566d75d2ff2ddd08659c4cf7b427;hp=bb9f3bf06595e0aad47050d22c36ae563016a526;hpb=a2bd379666d729133d65c85dc775627937084b18;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSetManager.pm b/lib/DBIx/Class/ResultSetManager.pm index bb9f3bf..1c7cf45 100644 --- a/lib/DBIx/Class/ResultSetManager.pm +++ b/lib/DBIx/Class/ResultSetManager.pm @@ -2,8 +2,10 @@ package DBIx::Class::ResultSetManager; use strict; use warnings; use base 'DBIx::Class'; -use Sub::Name (); -use Class::Inspector; +use Package::Stash (); + +use DBIx::Class::_Util 'set_subname'; +use namespace::clean; warn "DBIx::Class::ResultSetManager never left experimental status and has now been DEPRECATED. This module will be deleted in 09000 so please @@ -53,14 +55,23 @@ sub _register_attributes { my $cache = $self->_attr_cache; return if keys %$cache == 0; - foreach my $meth (@{Class::Inspector->methods($self) || []}) { + foreach my $meth (keys %{ { map + { $_ => 1 } + 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 + # 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 = Sub::Name::subname $name, $self->can($meth); + *$name = set_subname $name, $self->can($meth); delete ${"${self}::"}{$meth}; } }