make sure accessors are properly removed on reinitialize
[gitmo/Class-MOP.git] / lib / Class / MOP / Class.pm
index 24621c8..511a499 100644 (file)
@@ -53,9 +53,11 @@ sub reinitialize {
     my $old_metaclass = blessed($options{package})
         ? $options{package}
         : Class::MOP::get_metaclass_by_name($options{package});
+    $old_metaclass->_remove_generated_metaobjects
+        if $old_metaclass && $old_metaclass->isa('Class::MOP::Class');
     my $new_metaclass = $class->SUPER::reinitialize(@args);
     $new_metaclass->_restore_metaobjects_from($old_metaclass)
-        if $old_metaclass;
+        if $old_metaclass && $old_metaclass->isa('Class::MOP::Class');
     return $new_metaclass;
 }
 
@@ -485,6 +487,14 @@ sub _restore_metaobjects_from {
     }
 }
 
+sub _remove_generated_metaobjects {
+    my $self = shift;
+
+    for my $attr (map { $self->get_attribute($_) } $self->get_attribute_list) {
+        $attr->remove_accessors;
+    }
+}
+
 ## ANON classes
 
 {