}
sub interpolate_class{
- my($class, $name, $args) = @_;
+ my($class, $args) = @_;
if(my $metaclass = delete $args->{metaclass}){
$class = Mouse::Util::resolve_metaclass_alias( Attribute => $metaclass );
}
if (@traits) {
- warn "traits [@traits] for $class\n";
$class = Mouse::Meta::Class->create_anon_class(
superclasses => [ $class ],
roles => \@traits,
}
sub clone_and_inherit_options{
- my $self = shift;
- my $name = shift;
+ my($self, %args) = @_;
+
+ my($attribute_class, @traits) = ref($self)->interpolate_class(\%args);
- return ref($self)->new($name, %{$self}, (@_ == 1) ? %{$_[0]} : @_);
+ $args{traits} = \@traits if @traits;
+ return $attribute_class->new($self->name, %{$self}, %args);
}
sub clone_parent { # DEPRECATED