clear method cache after metaclass generation to fix autoclean bug
Matt S Trout [Tue, 17 Jul 2012 12:18:21 +0000 (12:18 +0000)]
Changes
lib/Moo/HandleMoose.pm

diff --git a/Changes b/Changes
index 37aba75..8018c78 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,5 @@
+  - clear method cache after metaclass generation to fix autoclean bug
+
 0.091014 - 2012-07-16
   - load overload.pm explicitly for overload::StrVal
 
index 2de0c7b..fb68afd 100644 (file)
@@ -65,6 +65,14 @@ sub inject_real_metaclass_for {
   };
     
   my %methods = %{Role::Tiny->_concrete_methods_of($name)};
+
+  # if stuff gets added afterwards, _maybe_reset_handlemoose should
+  # trigger the recreation of the metaclass but we need to ensure the
+  # Role::Tiny cache is cleared so we don't confuse Moo itself.
+  if (my $info = $Role::Tiny::INFO{$name}) {
+    delete $info->{methods};
+  }
+
   # needed to ensure the method body is stable and get things named
   Sub::Defer::undefer_sub($_) for grep defined, values %methods;
   my @attrs;