use strict;
use warnings;
-use Scalar::Util 'blessed';
+use Mouse::Meta::Method::Constructor;
+use Mouse::Meta::Method::Destructor;
+use Mouse::Util qw/get_linear_isa blessed/;
use Carp 'confess';
-use MRO::Compat;
-use Class::Method::Modifiers ();
-
do {
my %METACLASS_CACHE;
*{ $pkg . '::' . $name } = $code;
}
+# copied from Class::Inspector
+sub get_method_list {
+ my $self = shift;
+ my $name = $self->name;
+
+ no strict 'refs';
+ # Get all the CODE symbol table entries
+ my @functions = grep !/^meta$/,
+ grep { /\A[^\W\d]\w*\z/o }
+ grep { defined &{"${name}::$_"} }
+ keys %{"${name}::"};
+ wantarray ? @functions : \@functions;
+}
+
sub add_attribute {
my $self = shift;
my $attr = shift;
sub has_attribute { exists $_[0]->{attributes}->{$_[1]} }
sub get_attribute { $_[0]->{attributes}->{$_[1]} }
-sub linearized_isa { @{ mro::get_linear_isa($_[0]->name) } }
+sub linearized_isa { @{ get_linear_isa($_[0]->name) } }
sub clone_object {
my $class = shift;
}
-sub make_immutable {}
-sub is_immutable { 0 }
+sub make_immutable {
+ my $self = shift;
+ my $name = $self->name;
+ $self->{is_immutable}++;
+ no strict 'refs';
+ *{"$name\::new"} = Mouse::Meta::Method::Constructor->generate_constructor_method_inline( $self );
+ *{"$name\::DESTROY"} = Mouse::Meta::Method::Destructor->generate_destructor_method_inline( $self );
+}
+sub make_mutable {
+ Carp::croak "Mouse::Meta::Class->make_mutable does not supported by Mouse";
+}
+sub is_immutable { $_[0]->{is_immutable} }
sub attribute_metaclass { "Mouse::Meta::Class" }
sub add_before_method_modifier {
my ($self, $name, $code) = @_;
+ require Class::Method::Modifiers;
Class::Method::Modifiers::_install_modifier(
$self->name,
'before',
sub add_around_method_modifier {
my ($self, $name, $code) = @_;
+ require Class::Method::Modifiers;
Class::Method::Modifiers::_install_modifier(
$self->name,
'around',
sub add_after_method_modifier {
my ($self, $name, $code) = @_;
+ require Class::Method::Modifiers;
Class::Method::Modifiers::_install_modifier(
$self->name,
'after',