X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FDeprecated.pm;h=a5c228d4832e77253d4bd0bf91692e2fbb35d277;hb=bd2550f8320262fe1ab10f6c0eedc960889d869f;hp=a3225fe8269d508a793011a1f3715ed26151a379;hpb=404528801295d58ff4d6ea6e184ad396c4bba4c4;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Deprecated.pm b/lib/Class/MOP/Deprecated.pm index a3225fe..a5c228d 100644 --- a/lib/Class/MOP/Deprecated.pm +++ b/lib/Class/MOP/Deprecated.pm @@ -2,106 +2,72 @@ package Class::MOP::Deprecated; use strict; use warnings; -use Carp qw(cluck); -our $VERSION = '0.92'; +our $VERSION = '1.12'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; -my %DeprecatedAt = ( - - # features deprecated before 0.93 - 'Class::MOP::HAVE_ISAREV' => 0.93, - 'Class::MOP::subname' => 0.93, - 'Class::MOP::in_global_destruction' => 0.93, - - 'Class::MOP::Class::construct_class_instance' => 0.93, - 'Class::MOP::Class::check_metaclass_compatibility' => 0.93, - 'Class::MOP::Class::create_meta_instance' => 0.93, - 'Class::MOP::Class::clone_instance' => 0.93, - 'Class::MOP::Class::alias_method' => 0.93, - 'Class::MOP::Class::compute_all_applicable_methods' => 0.93, - 'Class::MOP::Class::compute_all_applicable_attributes' => 0.93, - - 'Class::MOP::Instance::bless_instance_structure' => 0.93, - - 'Class::MOP::Attribute::process_accessors' => 0.93, - - 'Class::MOP::Method::Accessor::initialize_body' => 0.93, - 'Class::MOP::Method::Accessor::generate_accessor_method' => 0.93, - 'Class::MOP::Method::Accessor::generate_reader_method' => 0.93, - 'Class::MOP::Method::Accessor::generate_writer_method' => 0.93, - 'Class::MOP::Method::Accessor::generate_predicate_method' => 0.93, - 'Class::MOP::Method::Accessor::generate_clearer_method' => 0.93, - 'Class::MOP::Method::Accessor::generate_accessor_method_inline' => 0.93, - 'Class::MOP::Method::Accessor::generate_reader_method_inline' => 0.93, - 'Class::MOP::Method::Accessor::generate_writer_method_inline' => 0.93, - 'Class::MOP::Method::Accessor::generate_clearer_method_inline' => 0.93, - 'Class::MOP::Method::Accessor::generate_predicate_method_inline' => 0.93, - - 'Class::MOP::Method::Constructor::meta_instance' => 0.93, - 'Class::MOP::Method::Constructor::attributes' => 0.93, - 'Class::MOP::Method::Constructor::initialize_body' => 0.93, - 'Class::MOP::Method::Constructor::generate_constructor_method' => 0.93, +use Package::DeprecationManager -deprecations => { + 'Class::MOP::HAVE_ISAREV' => '0.93', + 'Class::MOP::subname' => '0.93', + 'Class::MOP::in_global_destruction' => '0.93', + + 'Class::MOP::Package::get_method_map' => '0.93', + + 'Class::MOP::Class::construct_class_instance' => '0.93', + 'Class::MOP::Class::check_metaclass_compatibility' => '0.93', + 'Class::MOP::Class::create_meta_instance' => '0.93', + 'Class::MOP::Class::clone_instance' => '0.93', + 'Class::MOP::Class::alias_method' => '0.93', + 'Class::MOP::Class::compute_all_applicable_methods' => '0.93', + 'Class::MOP::Class::compute_all_applicable_attributes' => '0.93', + 'Class::MOP::Class::get_attribute_map' => '0.95', + + 'Class::MOP::Instance::bless_instance_structure' => '0.93', + + 'Class::MOP::Attribute::process_accessors' => '0.93', + + 'Class::MOP::Method::Accessor::initialize_body' => '0.93', + 'Class::MOP::Method::Accessor::generate_accessor_method' => '0.93', + 'Class::MOP::Method::Accessor::generate_reader_method' => '0.93', + 'Class::MOP::Method::Accessor::generate_writer_method' => '0.93', + 'Class::MOP::Method::Accessor::generate_predicate_method' => '0.93', + 'Class::MOP::Method::Accessor::generate_clearer_method' => '0.93', + 'Class::MOP::Method::Accessor::generate_accessor_method_inline' => '0.93', + 'Class::MOP::Method::Accessor::generate_reader_method_inline' => '0.93', + 'Class::MOP::Method::Accessor::generate_writer_method_inline' => '0.93', + 'Class::MOP::Method::Accessor::generate_clearer_method_inline' => '0.93', + 'Class::MOP::Method::Accessor::generate_predicate_method_inline' => + '0.93', + + 'Class::MOP::Method::Constructor::meta_instance' => '0.93', + 'Class::MOP::Method::Constructor::attributes' => '0.93', + 'Class::MOP::Method::Constructor::initialize_body' => '0.93', + 'Class::MOP::Method::Constructor::generate_constructor_method' => '0.93', 'Class::MOP::Method::Constructor::generate_constructor_method_inline' => - 0.93, + '0.93', +}; - # features deprecated after 0.93 - # ... -); - -my %Registry; - -sub import { - my ( $class, %args ) = @_; - - if ( defined( my $compat_version = delete $args{-compatible} ) ) { - $Registry{ (caller) } = $compat_version; - } - - if (%args) { - my $unknowns = join q{ }, keys %args; - cluck "Unknown argument(s) for $class->import: $unknowns.\n"; - } - return; -} - -sub warn { - my ( $package, undef, undef, $feature ) = caller(1); - - my $compat_version; - while ( $package && !defined( $compat_version = $Registry{$package} ) ) { - $package =~ s/ :: \w+ \z//xms or last; - } - - my $deprecated_at = $DeprecatedAt{$feature} - or die "Unregistered deprecated feature: $feature"; - - if ( !defined($compat_version) - || $compat_version >= $DeprecatedAt{$feature} ) { - goto &cluck; - } -} package Class::MOP; sub HAVE_ISAREV () { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( "Class::MOP::HAVE_ISAREV is deprecated and will be removed in a future release. It has always returned 1 anyway." ); return 1; } sub subname { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( "Class::MOP::subname is deprecated. Please use Sub::Name directly."); require Sub::Name; goto \&Sub::Name::subname; } sub in_global_destruction { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( "Class::MOP::in_global_destruction is deprecated. Please use Devel::GlobalDestruction directly." ); require Devel::GlobalDestruction; @@ -111,6 +77,23 @@ sub in_global_destruction { package Class::MOP::Package; +use Scalar::Util qw( blessed ); + +sub get_method_map { + Class::MOP::Deprecated::deprecated( + 'The get_method_map method has been made private.' + . " The public version is deprecated and will be removed in a future release.\n" + ); + my $self = shift; + + my $map = $self->_full_method_map; + + $map->{$_} = $self->get_method($_) + for grep { !blessed( $map->{$_} ) } keys %{$map}; + + return $map; +} + package Class::MOP::Module; @@ -118,7 +101,7 @@ package Class::MOP::Class; sub construct_class_instance { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The construct_class_instance method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -126,7 +109,7 @@ sub construct_class_instance { } sub check_metaclass_compatibility { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The check_metaclass_compatibility method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -134,7 +117,7 @@ sub check_metaclass_compatibility { } sub construct_instance { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The construct_instance method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -142,7 +125,7 @@ sub construct_instance { } sub create_meta_instance { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The create_meta_instance method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -150,7 +133,7 @@ sub create_meta_instance { } sub clone_instance { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The clone_instance method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -158,14 +141,14 @@ sub clone_instance { } sub alias_method { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( "The alias_method method is deprecated. Use add_method instead.\n"); shift->add_method(@_); } sub compute_all_applicable_methods { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The compute_all_applicable_methods method is deprecated.' . " Use get_all_methods instead.\n" ); @@ -179,18 +162,25 @@ sub compute_all_applicable_methods { } sub compute_all_applicable_attributes { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The compute_all_applicable_attributes method has been deprecated.' . " Use get_all_attributes instead.\n" ); shift->get_all_attributes(@_); } +sub get_attribute_map { + Class::MOP::Deprecated::deprecated( + "The get_attribute_map method has been deprecated.\n"); + + shift->_attribute_map(@_); +} + package Class::MOP::Instance; sub bless_instance_structure { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The bless_instance_structure method is deprecated.' . " It will be removed in a future release.\n" ); @@ -202,7 +192,7 @@ package Class::MOP::Attribute; sub process_accessors { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The process_accessors method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -213,7 +203,7 @@ package Class::MOP::Method::Accessor; sub initialize_body { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The initialize_body method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -221,7 +211,7 @@ sub initialize_body { } sub generate_accessor_method { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_accessor_method method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -229,7 +219,7 @@ sub generate_accessor_method { } sub generate_reader_method { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_reader_method method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -237,7 +227,7 @@ sub generate_reader_method { } sub generate_writer_method { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_writer_method method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -245,7 +235,7 @@ sub generate_writer_method { } sub generate_predicate_method { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_predicate_method method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -253,7 +243,7 @@ sub generate_predicate_method { } sub generate_clearer_method { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_clearer_method method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -261,7 +251,7 @@ sub generate_clearer_method { } sub generate_accessor_method_inline { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_accessor_method_inline method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -269,7 +259,7 @@ sub generate_accessor_method_inline { } sub generate_reader_method_inline { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_reader_method_inline method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -277,7 +267,7 @@ sub generate_reader_method_inline { } sub generate_writer_method_inline { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_writer_method_inline method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -285,7 +275,7 @@ sub generate_writer_method_inline { } sub generate_predicate_method_inline { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_predicate_method_inline method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -293,7 +283,7 @@ sub generate_predicate_method_inline { } sub generate_clearer_method_inline { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_clearer_method_inline method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -304,7 +294,7 @@ package Class::MOP::Method::Constructor; sub meta_instance { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The meta_instance method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -312,7 +302,7 @@ sub meta_instance { } sub attributes { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The attributes method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -321,7 +311,7 @@ sub attributes { } sub initialize_body { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The initialize_body method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -329,7 +319,7 @@ sub initialize_body { } sub generate_constructor_method { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_constructor_method method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -337,7 +327,7 @@ sub generate_constructor_method { } sub generate_constructor_method_inline { - Class::MOP::Deprecated::warn( + Class::MOP::Deprecated::deprecated( 'The generate_constructor_method_inline method has been made private.' . " The public version is deprecated and will be removed in a future release.\n" ); @@ -352,28 +342,20 @@ __END__ =head1 NAME -Class::MOP::Deprecated - List of deprecated methods +Class::MOP::Deprecated - Manages deprecation warnings for Class::MOP =head1 DESCRIPTION - use Class::MOP::Deprecated -compatible => $version; + use Class::MOP::Deprecated -api_version => $version; =head1 FUNCTIONS -This class provides methods that have been deprecated but remain for backward compatibility. - -If you specify C<< -compatible => $version >>, you can use deprecated features without warnings. -Note that this special treatment is package-scoped. - -=over 4 - -=item B - -Checks compatibility for the caller feature, and produces warnings if needed. - -This function is used in internals. +This module manages deprecation warnings for features that have been +deprecated in Class::MOP. -=back +If you specify C<< -api_version => $version >>, you can use deprecated features +without warnings. Note that this special treatment is limited to the package +that loads C. =head1 AUTHORS @@ -381,7 +363,7 @@ Goro Fuji Egfuji@cpan.orgE =head1 COPYRIGHT AND LICENSE -Copyright 2006-2009 by Infinity Interactive, Inc. +Copyright 2006-2010 by Infinity Interactive, Inc. L