--- trunk/lib/Frey/ClassLoader.pm 2008/07/15 17:14:33 136 +++ trunk/lib/Frey/ClassLoader.pm 2008/07/15 18:06:27 137 @@ -42,40 +42,26 @@ sub load_package { my ( $self, $package ) = @_; - #intercept role application so we can accurately generate - #method and attribute information for the parent class. - #this is fragile, but there is not better way that i am aware of - my $rmeta = Moose::Meta::Role->meta; - $rmeta->make_mutable if $rmeta->is_immutable; - my $original_apply = $rmeta->get_method("apply")->body; - $rmeta->remove_method("apply"); - my @roles_to_apply; - $rmeta->add_method("apply", sub{push(@roles_to_apply, [@_])}); - #load the package with the hacked Moose::Meta::Role - - #eval { Class::MOP::load_class($package); }; - #confess "Failed to load package ${package} $@" if $@; Class::MOP::load_class($package); if ( ! $package->can('meta') ) { my $class = Moose::Meta::Class->create_anon_class; - warn "package $package doesn't have meta faking anon class"; + warn "package $package isn't Moose, faking anon class"; return ( $class, $class->meta, 0 ); } - my $meta = $package->meta; + my $is_role = 0; + my $class; - my ($class, $is_role); if($package->meta->isa('Moose::Meta::Role')){ $is_role = 1; - # we need to apply the role to a class to be able to properly introspect it $class = Moose::Meta::Class->create_anon_class; - $original_apply->($meta, $class); + $package->meta->apply( $class ); + die $@ if $@; } else { - #roles don't have superclasses ... - $class = $meta; + $class = $package->meta; } - return ( $class, $meta, $is_role ); + return ( $class, $is_role ); } sub load_all_classes {