X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FPerl%2FCritic%2FPolicy%2FDynamicMoose.pm;h=729094b838c26633b05fafb5627b343fcb8546c4;hb=3450216476688d85a5d71a59fce70921b2dc1826;hp=e4f66fb8287005ce2499250ecb62b0a38ec08bb6;hpb=7b3c959c8a0ea21030251f148f37910e4cf3d6b0;p=gitmo%2FPerl-Critic-Dynamic-Moose.git diff --git a/lib/Perl/Critic/Policy/DynamicMoose.pm b/lib/Perl/Critic/Policy/DynamicMoose.pm index e4f66fb..729094b 100644 --- a/lib/Perl/Critic/Policy/DynamicMoose.pm +++ b/lib/Perl/Critic/Policy/DynamicMoose.pm @@ -32,12 +32,13 @@ sub violates_dynamic { my $doc = shift; $self->document($doc); - $self->compile_document; - my @packages = $self->find_packages; + my $old_packages = $self->find_packages; + $self->compile_document; + my @new_packages = $self->new_packages($old_packages); my @violations; - for my $package (@packages) { + for my $package (@new_packages) { my $meta = Class::MOP::class_of($package) or next; @@ -63,10 +64,22 @@ sub compile_document { sub find_packages { my $self = shift; - my $doc = $self->document; + return [ Class::MOP::get_all_metaclass_names ]; +} + +sub new_packages { + my $self = shift; + my $old = shift; + my @new; + my %seen; + + $seen{$_} = 1 for @$old; + + for (@{ $self->find_packages }) { + push @new, $_ if !$seen{$_}++; + } - return map { $_->namespace } - @{ $doc->find('PPI::Statement::Package') || [] }; + return @new; } no Moose;