use Class::MOP::Method::Wrapped;
use Class::MOP::Method::Accessor;
use Class::MOP::Method::Constructor;
+use Class::MOP::MiniTrait;
use Carp 'confess';
use Scalar::Util 'blessed', 'reftype', 'weaken';
superclasses
attributes
methods
+ no_meta
version
authority
)};
if caller =~ /Class::MOP|metaclass/;
}
$class->initialize(ref($_[0]) || $_[0]);
- });
+ }) unless $options{no_meta};
$meta->superclasses(@{$options{superclasses}})
if exists $options{superclasses};
return $instance;
}
+sub inline_create_instance {
+ my $self = shift;
+ my ($class) = @_;
+
+ return $self->get_meta_instance->inline_create_instance($class);
+}
+
sub clone_object {
my $class = shift;
my $instance = shift;
superclasses => [ ref $self ],
);
- Class::MOP::load_class($trait);
- for my $meth ( Class::MOP::Class->initialize($trait)->get_all_methods ) {
- my $meth_name = $meth->name;
-
- if ( $immutable_meta->find_method_by_name( $meth_name ) ) {
- $immutable_meta->add_around_method_modifier( $meth_name, $meth->body );
- }
- else {
- $immutable_meta->add_method( $meth_name, $meth->clone );
- }
- }
+ Class::MOP::MiniTrait::apply( $immutable_meta, $trait );
$immutable_meta->make_immutable(
inline_constructor => 0,
An optional array reference of L<Class::MOP::Attribute> objects.
+=item * no_meta
+
+If true, a C<meta> method will not be installed into the class.
+
=back
=item B<< Class::MOP::Class->create_anon_class(%options) >>
Returns an instance of the C<instance_metaclass> to be used in the
construction of a new instance of the class.
+=item B<< $metaclass->inline_create_instance($class_var) >>
+
+This method takes a variable name, and uses it create an inline snippet of
+code that will create a new instance of the class.
+
=back
=head2 Informational predicates