Constants _should_ be reported as methods.
Dave Rolsky [Mon, 23 Aug 2010 13:08:21 +0000 (08:08 -0500)]
This makes no fucking sense, but we used to do this, so changing it now may
break existing (boneheaded) code.

lib/Class/MOP/Mixin/HasMethods.pm
t/003_methods.t

index 3aaa202..bd61c2b 100644 (file)
@@ -164,8 +164,7 @@ sub get_method_list {
     # Constants will show up as some sort of reference in the namespace hash
     # ref.
     return grep {
-               ! ref $namespace->{$_}
-            && *{ $namespace->{$_} }{CODE}
+        ( ref $namespace->{$_} || *{ $namespace->{$_} }{CODE} )
             && $self->has_method($_)
         }
         keys %{$namespace};
@@ -180,7 +179,7 @@ sub _get_local_methods {
     my $namespace = $self->namespace;
 
     return map { $self->get_method($_) }
-        grep { ! ref $namespace->{$_} && *{ $namespace->{$_} }{CODE} }
+        grep { ref $namespace->{$_} || *{ $namespace->{$_} }{CODE} }
         keys %{$namespace};
 }
 
index 7dc6ddb..53813db 100644 (file)
@@ -367,13 +367,13 @@ my $HC = Class::MOP::Class->initialize('HasConstants');
 
 is_deeply(
     [ sort $HC->get_method_list ],
-    [qw( quux thing )],
+    [qw( BAR BAZ FOO quux thing )],
     'get_method_list handles constants properly'
 );
 
 is_deeply(
     [ sort map { $_->name } $HC->_get_local_methods ],
-    [qw( quux thing )],
+    [qw( BAR BAZ FOO quux thing )],
     '_get_local_methods handles constants properly'
 );