no warnings 'uninitialized';
return unless $self->name =~ /^$ANON_ROLE_PREFIX/;
- # XXX: is this necessary for us? I don't understand what it's doing
- # -sartak
-
# Moose does a weird thing where it replaces the metaclass for
# class when fixing metaclass incompatibility. In that case,
# we don't want to clean out the namespace now. We can detect
# that because Moose will explicitly update the singleton
# cache in Class::MOP.
- #my $current_meta = Class::MOP::get_metaclass_by_name($self->name);
- #return if $current_meta ne $self;
+ my $current_meta = Class::MOP::get_metaclass_by_name($self->name);
+ return if $current_meta ne $self;
my ($serial_id) = ($self->name =~ /^$ANON_ROLE_PREFIX(\d+)/);
no strict 'refs';
--- /dev/null
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+
+{
+ package Role::Metarole;
+ use Moose::Role;
+}
+
+my ($role2);
+{
+ my $role1 = Moose::Meta::Role->create_anon_role(
+ methods => {
+ foo => sub { },
+ },
+ );
+ ok($role1->has_method('foo'), "role has method foo");
+ $role2 = Moose::Util::MetaRole::apply_metaroles(
+ for => $role1->name,
+ role_metaroles => { role => ['Role::Metarole'] },
+ );
+ isnt($role1, $role2, "anon role was reinitialized");
+ is($role1->name, $role2->name, "but it's the same anon role");
+ is_deeply([sort $role2->get_method_list], ['foo', 'meta'],
+ "has the right methods");
+}
+is_deeply([sort $role2->get_method_list], ['foo', 'meta'],
+ "still has the right methods");
+
+done_testing;