From: John Napiorkowski Date: Fri, 4 Sep 2015 18:29:44 +0000 (-0500) Subject: debug version X-Git-Tag: 5.90101~1 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=a521afccf18e9a7ad0f19cbcdcf199ac033280d6;hp=f4d7cf1e0b763ba80f83a4c48edf7173ad250a46 debug version --- diff --git a/lib/Catalyst/Action.pm b/lib/Catalyst/Action.pm index d5f1502..257feb5 100644 --- a/lib/Catalyst/Action.pm +++ b/lib/Catalyst/Action.pm @@ -260,27 +260,36 @@ sub resolve_type_constraint { # and superclasses, look for attributes and figure it out. # Superclasses take precedence; # - my @supers = map { $_->meta } $self->class->meta->superclasses; - my @roles = $self->class->meta->calculate_all_roles; + my @supers = $self->class->can('meta') ? map { $_->meta } $self->class->meta->superclasses : (); + my @roles = $self->class->can('meta') ? $self->class->meta->calculate_all_roles : (); # So look thru all the super and roles in order and return the # first type constraint found. We should probably find all matching # type constraints and try to do some sort of resolution. + + warn "--> Hunting for TC $name in controller hierarchy\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG}; foreach my $parent (@roles, @supers) { + warn " Looking for TC $name in ${\$parent->name}\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG}; if(my $m = $parent->get_method($self->name)) { if($m->can('attributes')) { + warn " method $m has attributes\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG}; my ($key, $value) = map { $_ =~ /^(.*?)(?:\(\s*(.+?)\s*\))?$/ } grep { $_=~/^Args\(/ or $_=~/^CaptureArgs\(/ } @{$m->attributes}; + warn " about to evaluate any found attrs\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG}; next unless $value eq $name; + warn " found attr info $key and $value\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG}; my @tc = eval "package ${\$parent->name}; $name"; - return @tc if @tc; + return @tc if scalar(@tc); + } else { + warn " method $m does not have method attributes\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG}; } } } - - die "'$name' not a type constraint in ${\$self->private_path}"; + + my $classes = join(',', $self->class, @roles, @supers); + die "'$name' not a type constraint in '${\$self->private_path}', Looked in: $classes"; }; if($tc[0]) {