use strict;
use warnings;
-use Carp qw(cluck);
-our $VERSION = '0.92';
+our $VERSION = '1.09';
$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;
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;
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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" );
}
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" );
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"
);
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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"
);
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"
);
}
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"
);
}
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"
);
}
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"
);
}
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"
);
=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<Class::MOP::Deprecated::warn($message)>
-
-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<Class::MOP::Deprecated>.
=head1 AUTHORS
=head1 COPYRIGHT AND LICENSE
-Copyright 2006-2009 by Infinity Interactive, Inc.
+Copyright 2006-2010 by Infinity Interactive, Inc.
L<http://www.iinteractive.com>