X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FAccessorGroup.pm;h=77cf85255f2f50c5d3d0044bd474a85a0bcb1e29;hb=7648acb5dd1f2f281ca84e2152efe314bcbf2c70;hp=0ae4b5bde7323a8dfcb212fc4a91025f3abf010d;hpb=5f48fa565dc31b9d22762488afdec8502b8ca515;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/AccessorGroup.pm b/lib/DBIx/Class/AccessorGroup.pm index 0ae4b5b..77cf852 100644 --- a/lib/DBIx/Class/AccessorGroup.pm +++ b/lib/DBIx/Class/AccessorGroup.pm @@ -4,9 +4,8 @@ use strict; use warnings; use base qw( DBIx::Class::MethodAttributes Class::Accessor::Grouped ); -use mro 'c3'; -use Scalar::Util qw/weaken blessed/; +use Scalar::Util 'blessed'; use DBIx::Class::_Util 'fail_on_internal_call'; use namespace::clean; @@ -24,24 +23,25 @@ sub mk_classaccessor { ; } -my $successfully_loaded_components; - sub get_component_class { my $class = $_[0]->get_inherited($_[1]); - # It's already an object, just go for it. - return $class if blessed $class; - - if (defined $class and ! $successfully_loaded_components->{$class} ) { + no strict 'refs'; + if ( + defined $class + and + # inherited CAG can't be set to undef effectively, so people may use '' + length $class + and + # It's already an object, just go for it. + ! defined blessed $class + and + ! ${"${class}::__LOADED__BY__DBIC__CAG__COMPONENT_CLASS__"} + ) { $_[0]->ensure_class_loaded($class); - mro::set_mro( $class, 'c3' ); - - no strict 'refs'; - $successfully_loaded_components->{$class} - = ${"${class}::__LOADED__BY__DBIC__CAG__COMPONENT_CLASS__"} - = do { \(my $anon = 'loaded') }; - weaken($successfully_loaded_components->{$class}); + ${"${class}::__LOADED__BY__DBIC__CAG__COMPONENT_CLASS__"} + = do { \(my $anon = 'loaded') }; } $class;