Look up the metaclass in get_method_map instead of blindly calling meta
Shawn M Moore [Sat, 28 Mar 2009 20:49:43 +0000 (16:49 -0400)]
on foreign packages! Yikes!

lib/Moose/Meta/Role.pm

index 05e4c05..a6ff920 100644 (file)
@@ -323,18 +323,10 @@ sub get_method_map {
                         $map->{$symbol}->body == $code;
 
         my ($pkg, $name) = Class::MOP::get_code_info($code);
+        my $meta = Class::MOP::class_of($pkg);
 
-        if ($pkg->can('meta')
-            # NOTE:
-            # we don't know what ->meta we are calling
-            # here, so we need to be careful cause it
-            # just might blow up at us, or just complain
-            # loudly (in the case of Curses.pm) so we
-            # just be a little overly cautious here.
-            # - SL
-            && eval { no warnings; blessed($pkg->meta) } # FIXME calls meta
-            && $pkg->meta->isa('Moose::Meta::Role')) {
-            my $role = $pkg->meta->name;
+        if ($meta && $meta->isa('Moose::Meta::Role')) {
+            my $role = $meta->name;
             next unless $self->does_role($role);
         }
         else {