use Mouse::Meta::Module;
our @ISA = qw(Mouse::Meta::Module);
-sub method_metaclass(){ 'Mouse::Meta::Method' } # required for get_method()
+sub method_metaclass() { 'Mouse::Meta::Method' }
+sub attribute_metaclass() { 'Mouse::Meta::Attribute' }
sub _construct_meta {
my($class, %args) = @_;
};
my $self = bless \%args, ref($class) || $class;
- if($class ne __PACKAGE__){
+ if(ref($self) ne __PACKAGE__){
$self->meta->_initialize_object($self, \%args);
}
return $self;
if ($name =~ s/^\+//) { # inherited attributes
my $inherited_attr;
+ # find_attribute_by_name
foreach my $class($self->linearized_isa){
my $meta = Mouse::Util::get_metaclass_by_name($class) or next;
$inherited_attr = $meta->get_attribute($name) and last;
defined($inherited_attr)
or $self->throw_error("Could not find an attribute by the name of '$name' to inherit from in ".$self->name);
- $attr = $inherited_attr->clone_and_inherit_options($name, \%args);
+ $attr = $inherited_attr->clone_and_inherit_options(%args);
}
else{
- my($attribute_class, @traits) = Mouse::Meta::Attribute->interpolate_class($name, \%args);
+ my($attribute_class, @traits) = $self->attribute_metaclass->interpolate_class(\%args);
$args{traits} = \@traits if @traits;
$attr = $attribute_class->new($name, %args);