After MooseX-Types 0.35 was released, I started getting failure reports
for a number of my modules that use it.  This turned out to be caused by
this issue:

  use Moose::Util::TypeConstraints;
  # { package Foo::Role; use Moose::Role; }
  my $type = role_type('Foo::Role');
  $type->is_subtype_of('Bar');

This dies: Can't call method "does_role" on an undefined value at
Moose/Meta/TypeConstraint/Role.pm line 101.

Uncommenting the definition of Foo::Role will remove the error.  But
it's often necessary to define types (and subtypes) involving roles
before the role itself is defined.  For instance, in a tree structure, a
role might declare attributes using such types.

It would be possible to work around this in MooseX-Types, but it seems
more straightforward to fix the root issue in
Moose::Meta::TypeConstraint::Role, and that's what I did.

Please review branch rfc/undef-role.  It adds a test to demonstrate the
problem and then fixes it by checking the return value of
Class::MOP::class_of($self->role) before calling methods on it.

I've run "MOOSE_TEST_MD=MooseX prove -b t/author-test-my-dependents.t"
on it, and don't get any additional failures (over the ones that happen
on master).

Related RT tickets:
  https://rt.cpan.org/Ticket/Display.html?id=77299
  https://rt.cpan.org/Ticket/Display.html?id=77303

Thanks.

-- 
Chris Madsen                                          [email protected]
  --------------------  http://www.cjmweb.net  --------------------


Reply via email to