Checking in changes prior to tagging of version 0.95. Changelog diff is:
[gitmo/Class-MOP.git] / lib / Class / MOP / Method / Constructor.pm
index 42f5a2a..b10d091 100644 (file)
@@ -7,7 +7,7 @@ use warnings;
 use Carp         'confess';
 use Scalar::Util 'blessed', 'weaken', 'looks_like_number';
 
-our $VERSION   = '0.87';
+our $VERSION   = '0.95';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
@@ -38,17 +38,30 @@ sub new {
 
 sub _new {
     my $class = shift;
-    my $options = @_ == 1 ? $_[0] : {@_};
-
-    bless {
-        # from our superclass
-        'body'                 => undef,
-        'package_name'         => $options->{package_name},
-        'name'                 => $options->{name},        
-        # specific to this subclass
-        'options'              => $options->{options} || {},
-        'associated_metaclass' => $options->{metaclass},
-        'is_inline'            => ($options->{is_inline} || 0),
+
+    return Class::MOP::Class->initialize($class)->new_object(@_)
+        if $class ne __PACKAGE__;
+
+    my $params = @_ == 1 ? $_[0] : {@_};
+
+    return bless {
+        # inherited from Class::MOP::Method
+        body                 => $params->{body},
+        # associated_metaclass => $params->{associated_metaclass}, # overriden
+        package_name         => $params->{package_name},
+        name                 => $params->{name},
+        original_method      => $params->{original_method},
+
+        # inherited from Class::MOP::Generated
+        is_inline            => $params->{is_inline} || 0,
+        definition_context   => $params->{definition_context},
+
+        # inherited from Class::MOP::Inlined
+        _expected_method_class => $params->{_expected_method_class},
+
+        # defined in this subclass
+        options              => $params->{options} || {},
+        associated_metaclass => $params->{metaclass},
     }, $class;
 }
 
@@ -59,24 +72,11 @@ sub associated_metaclass { (shift)->{'associated_metaclass'} }
 
 ## cached values ...
 
-sub meta_instance {
-    Carp::cluck('The meta_instance method has been made private.'
-        . " The public version is deprecated and will be removed in a future release.\n");
-    shift->_meta_instance;
-}
-
 sub _meta_instance {
     my $self = shift;
     $self->{'meta_instance'} ||= $self->associated_metaclass->get_meta_instance;
 }
 
-sub attributes {
-    Carp::cluck('The attributes method has been made private.'
-        . " The public version is deprecated and will be removed in a future release.\n");
-
-    return shift->_attributes;
-}
-
 sub _attributes {
     my $self = shift;
     $self->{'attributes'} ||= [ $self->associated_metaclass->get_all_attributes ]
@@ -84,12 +84,6 @@ sub _attributes {
 
 ## method
 
-sub initialize_body {
-    Carp::cluck('The initialize_body method has been made private.'
-        . " The public version is deprecated and will be removed in a future release.\n");
-    shift->_initialize_body;
-}
-
 sub _initialize_body {
     my $self        = shift;
     my $method_name = '_generate_constructor_method';
@@ -99,22 +93,10 @@ sub _initialize_body {
     $self->{'body'} = $self->$method_name;
 }
 
-sub generate_constructor_method {
-    Carp::cluck('The generate_constructor_method method has been made private.'
-        . " The public version is deprecated and will be removed in a future release.\n");
-    shift->_generate_constructor_method;
-}
-
 sub _generate_constructor_method {
     return sub { Class::MOP::Class->initialize(shift)->new_object(@_) }
 }
 
-sub generate_constructor_method_inline {
-    Carp::cluck('The generate_constructor_method_inline method has been made private.'
-        . " The public version is deprecated and will be removed in a future release.\n");
-    shift->_generate_constructor_method_inline;
-}
-
 sub _generate_constructor_method_inline {
     my $self = shift;
 
@@ -174,13 +156,13 @@ sub _generate_slot_initializer {
         $default = '$instance->'.$attr->builder;
     }
 
-    if ( defined $attr->init_arg ) {
+    if ( defined(my $init_arg = $attr->init_arg) ) {
       return (
-          'if(exists $params->{\'' . $attr->init_arg . '\'}){' . "\n" .
+          'if(exists $params->{\'' . $init_arg . '\'}){' . "\n" .
                 $self->_meta_instance->inline_set_slot_value(
                     '$instance',
                     $attr->name,
-                    '$params->{\'' . $attr->init_arg . '\'}' ) . "\n" .
+                    '$params->{\'' . $init_arg . '\'}' ) . "\n" .
            '} ' . (!defined $default ? '' : 'else {' . "\n" .
                 $self->_meta_instance->inline_set_slot_value(
                     '$instance',