and
- # on complex MI herarchies the method can be anywhere in the
- # shadow stack - look through the entire slot, not just [0]
- ( ! grep {
- refaddr($_) == $current_node_refaddr
- } @{ $slot->{methods}{ $_->{name} } || [] } )
+ unshift @{ $slot->{methods}{$_->{name}} }, $_
and
- unshift @{ $slot->{methods}{$_->{name}} }, $_
+ (
+ $_->{via_class} ne $class
+ or
+ $slot->{methods_defined_in_class}{$_->{name}} = $_
+ )
and
) for (
# what describe_class_methods for @my_ISA produced above
- ( map { $_->[0] } map {
- values %{ $describe_class_query_cache->{$_}{methods} }
- } reverse @my_ISA ),
+ ( map { values %{
+ $describe_class_query_cache->{$_}{methods_defined_in_class} || {}
+ } } reverse @my_ISA ),
# our own non-cleaned subs + their attributes
( map {
$expected_desc->{methods_with_supers}{VALID_DBIC_CODE_ATTRIBUTE}
= $expected_desc->{methods}{VALID_DBIC_CODE_ATTRIBUTE};
+ $expected_desc->{methods_defined_in_class}{attr}
+ = $expected_desc->{methods}{attr}[0];
+
is_deeply (
describe_class_methods("DBICTest::AttrTest"),
$expected_desc,
);
}}
+# this doesn't really belong in this test, but screw it
+{
+ package DBICTest::WackyDFS;
+ use base qw( DBICTest::SomeGrandParentClass DBICTest::SomeParentClass );
+}
+
+is_deeply
+ describe_class_methods("DBICTest::WackyDFS")->{methods}{VALID_DBIC_CODE_ATTRIBUTE},
+ [
+ {
+ attributes => {},
+ name => "VALID_DBIC_CODE_ATTRIBUTE",
+ via_class => "DBICTest::SomeGrandParentClass",
+ },
+ {
+ attributes => {},
+ name => "VALID_DBIC_CODE_ATTRIBUTE",
+ via_class => "DBIx::Class::MethodAttributes"
+ },
+ ],
+ 'Expected description on unusable inheritance hierarchy'
+;
+
done_testing;