Home > 仕事のこと > Class::MOP(0.81) と Data::Visitor::Callback(0.22) で警告

Class::MOP(0.81) と Data::Visitor::Callback(0.22) で警告

Moose が 0.74 になったのに併せて Class::MOP が 0.81 になって今まで警告なしに動いていたスクリプトで警告が出るようになった。

The compute_all_applicable_attributes method has been deprecated. Use get_all_attributes instead.
 at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP/Class.pm line 929
        Class::MOP::Class::compute_all_applicable_attributes('Class::MOP::Class::__ANON__::SERIAL::41=HASH(0x8a0b850)') called at /usr/lib/perl5/site_perl/5.8.8/Data/Visitor/Callback.pm line 42
        Data::Visitor::Callback::BUILDARGS('Data::Visitor::Callback', 'plain_value', 'CODE(0x9c09398)') called at generated method (unknown origin) line 4
        Data::Visitor::Callback::new('Data::Visitor::Callback', 'plain_value', 'CODE(0x9c09398)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/ConfigLoader.pm line 86
        Shiori::ConfigLoader::load('Shiori::ConfigLoader=HASH(0x9bf1c50)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/ConfigLoader.pm line 33
        Shiori::ConfigLoader::new('Shiori::ConfigLoader') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/DateTime.pm line 44
        Shiori::DateTime::now('Shiori::DateTime') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/Schema/Tag.pm line 162
        Shiori::Schema::Tag::update_shiori_count('Shiori::Schema::Tag=HASH(0x9c0a634)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/Schema/Shiori.pm line 260
        Shiori::Schema::Shiori::create_tags('Shiori::Schema::Shiori=HASH(0x9bf15d8)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/API/Shiori.pm line 97
        Shiori::API::Shiori::__ANON__() called at /usr/lib/perl5/site_perl/5.8.8/DBIx/Class/Storage/DBI.pm line 626
        DBIx::Class::Storage::DBI::txn_do('DBIx::Class::Storage::DBI::mysql=HASH(0x9a341c4)', 'CODE(0x9a35620)') called at /usr/lib/perl5/site_perl/5.8.8/DBIx/Class/Schema.pm line 734
        DBIx::Class::Schema::txn_do('Shiori::Schema=HASH(0x9a4c4d4)', 'CODE(0x9a35620)') called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/API/Shiori.pm line 110
        eval {...} called at /home/travail/public_html/SVNHOME/Shiori/bin/utils/shiori/../../../lib/Shiori/API/Shiori.pm line 110
        Shiori::API::Shiori::update('Shiori::API::Shiori=HASH(0x9a216e0)', 'HASH(0x9b39534)') called at ./update.pl line 24
        main::main() called at ./update.pl line 11

出力された警告の3行目を見ると

Class::MOP::Class::compute_all_applicable_attributes('Class::MOP::Class::__ANON__::SERIAL::41=HASH(0x8a0b850)') called at /usr/lib/perl5/site_perl/5.8.8/Data/Visitor/Callback.pm line 42

と言われる。
素直に Data::Visitor::Callback の42行目あたりを覗いてみると BUILDARGS の中で compute_all_applicable_attributes をコールしている。

sub BUILDARGS {
    my ( $class, @args ) = @_;

    my $args = $class->SUPER::BUILDARGS(@args);

    # ここね
    my %init_args = map { $_->init_arg => undef } $class->meta->compute_all_applicable_attributes;

    my %callbacks = map { $_ => $args->{$_} } grep { not exists $init_args{$_} } keys %$args;

Class:MOP の 0.80_01 の Changes で

- compute_all_applicable_attributes is deprecated, use get_all_attributes

となっている。

Data::Visitor の AUTHOR の Yuval は Class::MOP の CONTRIBUTOR だからそのうち直る。って言うか、Class::MOP は IRC ないのか?

追記
じゃ、42行目の

$class->meta->compute_all_applicable_attributes;

$class->meta->get_all_attributes;

に変更したらいいのかと言うとそうわけでもなく、Data::Visitor::Callback では Squirrel で Moose と Mouse の切り分けを行っていて Moose を使用していた場合は get_all_attributes でいいのだけれど、Mouse を使用していた場合は見事に

Can't locate object method "get_all_attributes" via package "Mouse::Meta::Class"

でコケる。

追追記
Can't locate object method "get_all_attributes" via package "Mouse::Meta::Class"

は Mouse を 0.20 にすると解決する。

Comments:2

tokuhirom 2009年4月 8日 18:41

#moose@irc.perl.org です。see also http://moose.perl.org/

tokuhirom the moose comitter

ちわ 2009年4月 8日 22:05

> tokuhirom さん

Class::MOP の話は Moose の方でするんですね。
今回の警告は Class::MOP 側ではなくて Data::Visitor 側なので
Yuval に連絡取りたかったんですよ。
とりあえず、Yuval には別途パッチを送っておきました。(たいしたパッチではないですけれど)
ありがとうございます。

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://hibinokoto.jp/mt/mt-tb.cgi/310
Listed below are links to weblogs that reference
Class::MOP(0.81) と Data::Visitor::Callback(0.22) で警告 from 日々のこと

Home > 仕事のこと > Class::MOP(0.81) と Data::Visitor::Callback(0.22) で警告

Search
Feeds

Return to page top