1 package MooseX::ClassAttribute::Trait::Application::ToRole;
6 use Moose::Util::MetaRole;
7 use MooseX::ClassAttribute::Trait::Application::ToClass;
8 use MooseX::ClassAttribute::Trait::Application::ToInstance;
10 use namespace::autoclean;
13 with 'MooseX::ClassAttribute::Trait::Application';
15 sub apply_class_attributes {
20 $role2 = Moose::Util::MetaRole::apply_metaclass_roles(
23 role => ['MooseX::ClassAttribute::Trait::Role'],
24 application_to_class =>
25 ['MooseX::ClassAttribute::Trait::Application::ToClass'],
26 application_to_role =>
27 ['MooseX::ClassAttribute::Trait::Application::ToRole'],
28 application_to_instance => [
29 'MooseX::ClassAttribute::Trait::Application::ToInstance'
34 foreach my $attribute_name ( $role1->get_class_attribute_list() ) {
35 if ( $role2->has_class_attribute($attribute_name)
36 && $role2->get_class_attribute($attribute_name)
37 != $role1->get_class_attribute($attribute_name) ) {
40 Moose->throw_error( "Role '"
42 . "' has encountered a class attribute conflict "
43 . "during composition. This is fatal error and cannot be disambiguated."
47 $role2->add_class_attribute(
48 $role1->get_class_attribute($attribute_name)->clone() );