lazy => 1,
default => sub {
my $self = shift;
- $self->metadescription_classname->new(
- %{ $self->description },
- descriptor => $self,
- );
+
+ my $metadesc_class = $self->metadescription_classname;
+ my $desc = $self->description;
+
+ if (my $traits = delete $desc->{traits}) {
+ my $meta = Moose::Meta::Class->create_anon_class(
+ superclasses => [ $metadesc_class ],
+ roles => $traits,
+ );
+ $meta->add_method('meta' => sub { $meta });
+ $metadesc_class = $meta->name;
+ }
+
+ return $metadesc_class->new(%$desc, descriptor => $self);
},
);