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';
}
# 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]" );
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
# (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