exclude union roles and same-role-as-self from metaclass inflation
Matt S Trout [Sat, 5 May 2012 18:46:14 +0000 (18:46 +0000)]
Changes
lib/Moo/HandleMoose.pm
lib/Moo/Role.pm

diff --git a/Changes b/Changes
index 277b9dd..339aa83 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,4 @@
+  - exclude union roles and same-role-as-self from metaclass inflation
   - inhale Moose roles before checking for composition conflicts
   - enable Moo::sification if only Moo::Role is loaded and not Moo
   - preserve attribute ordering
index 6540ec2..0f87ec9 100644 (file)
@@ -113,7 +113,7 @@ sub inject_real_metaclass_for {
     );
   }
   $meta->add_role(Class::MOP::class_of($_))
-    for grep $_ ne $name,
+    for grep !/\|/ && $_ ne $name, # reject Foo|Bar and same-role-as-self
       do { no warnings 'once'; keys %{$Role::Tiny::APPLIED_TO{$name}} };
   $DID_INJECT{$name} = 1;
   $meta;
index 080ba92..34203a8 100644 (file)
@@ -36,7 +36,9 @@ sub _inhale_if_moose {
   if (!$INFO{$role} and $INC{"Moose.pm"}) {
     if (my $meta = Class::MOP::class_of($role)) {
       $INFO{$role}{methods} = {
-        map +($_ => $role->can($_)), $meta->get_method_list
+        map +($_ => $role->can($_)),
+          grep !$meta->get_method($_)->isa('Class::MOP::Method::Meta'),
+            $meta->get_method_list
       };
       $Role::Tiny::APPLIED_TO{$role} = {
         map +($_->name => 1), $meta->calculate_all_roles