X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FUtil.pm;h=8604d2a5db086537b8a2c37ec0345866f947f8d9;hb=d412262b5262860b0a0baa2cca0b52cb28f27980;hp=2ccb608da22eb1a12aa5f1ad57e74f579a124276;hpb=d27828133036cdd69923572453faad3920fd7c0e;p=gitmo%2FMoose.git diff --git a/lib/Moose/Util.pm b/lib/Moose/Util.pm index 2ccb608..8604d2a 100644 --- a/lib/Moose/Util.pm +++ b/lib/Moose/Util.pm @@ -9,9 +9,10 @@ use Sub::Exporter; use Scalar::Util 'blessed'; use List::Util qw(first); use List::MoreUtils qw(any all); +use overload (); use Class::MOP 0.60; -our $VERSION = '1.14'; +our $VERSION = '1.17'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -289,8 +290,10 @@ sub meta_class_alias { } # XXX - this should be added to Params::Util -sub _STRINGLIKE ($) { +sub _STRINGLIKE0 ($) { return _STRING( $_[0] ) + || ( defined $_[0] + && $_[0] eq q{} ) || ( blessed $_[0] && overload::Method( $_[0], q{""} ) && length "$_[0]" ); @@ -319,16 +322,20 @@ sub _reconcile_roles_for_metaclass { sub _role_differences { my ($class_meta_name, $super_meta_name) = @_; - my @super_role_metas = $super_meta_name->meta->can('calculate_all_roles_with_inheritance') - ? $super_meta_name->meta->calculate_all_roles_with_inheritance - : $super_meta_name->meta->can('calculate_all_roles') - ? $super_meta_name->meta->calculate_all_roles - : (); - my @role_metas = $class_meta_name->meta->can('calculate_all_roles_with_inheritance') - ? $class_meta_name->meta->calculate_all_roles_with_inheritance - : $class_meta_name->meta->can('calculate_all_roles') - ? $class_meta_name->meta->calculate_all_roles - : (); + my @super_role_metas + = grep { !$_->isa('Moose::Meta::Role::Composite') } + $super_meta_name->meta->can('calculate_all_roles_with_inheritance') + ? $super_meta_name->meta->calculate_all_roles_with_inheritance + : $super_meta_name->meta->can('calculate_all_roles') + ? $super_meta_name->meta->calculate_all_roles + : (); + my @role_metas + = grep { !$_->isa('Moose::Meta::Role::Composite') } + $class_meta_name->meta->can('calculate_all_roles_with_inheritance') + ? $class_meta_name->meta->calculate_all_roles_with_inheritance + : $class_meta_name->meta->can('calculate_all_roles') + ? $class_meta_name->meta->calculate_all_roles + : (); my @differences; for my $role_meta (@role_metas) { push @differences, $role_meta @@ -408,7 +415,7 @@ sub _is_role_only_subclass { # (not inherited) for my $method ( $meta->_get_local_methods ) { # always ignore meta - next if $method->name eq 'meta'; + next if $method->isa('Class::MOP::Method::Meta'); # we'll deal with attributes below next if $method->can('associated_attribute'); # if the method comes from a role we consumed, ignore it