Cleanup moose detection
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / Base.pm
index d469f6c..b2e4d95 100644 (file)
@@ -3,7 +3,7 @@ package DBIx::Class::Schema::Loader::Base;
 use strict;
 use warnings;
 use base qw/Class::Accessor::Grouped Class::C3::Componentised/;
-use Class::C3;
+use mro 'c3';
 use Carp::Clan qw/^DBIx::Class/;
 use DBIx::Class::Schema::Loader::RelBuilder;
 use Data::Dump qw/ dump /;
@@ -1081,11 +1081,11 @@ sub _reload_classes {
         
         {
             no warnings 'redefine';
-            local *Class::C3::reinitialize = sub {};
+            local *Class::C3::reinitialize = sub {};  # to speed things up, reinitialized below
             use warnings;
 
-            if ($class->can('meta') && try { $class->meta->isa('Moose::Meta::Class') }) {
-                $class->meta->make_mutable;
+            if (my $mc = $self->_moose_metaclass($class)) {
+                $mc->make_mutable;
             }
             Class::Unload->unload($class) if $unload;
             my ($source, $resultset_class);
@@ -1095,8 +1095,8 @@ sub _reload_classes {
                 && ($resultset_class ne 'DBIx::Class::ResultSet')
             ) {
                 my $has_file = Class::Inspector->loaded_filename($resultset_class);
-                if ($resultset_class->can('meta') && try { $resultset_class->meta->isa('Moose::Meta::Class') }) {
-                    $resultset_class->meta->make_mutable;
+                if (my $mc = $self->_moose_metaclass($resultset_class)) {
+                    $mc->make_mutable;
                 }
                 Class::Unload->unload($resultset_class) if $unload;
                 $self->_reload_class($resultset_class) if $has_file;
@@ -1112,6 +1112,15 @@ sub _reload_classes {
     }
 }
 
+sub _moose_metaclass {
+  return undef unless $INC{'Class/MOP.pm'};   # if CMOP is not loaded the class could not have loaded in the 1st place
+
+  my $mc = Class::MOP::class_of($_[1])
+    or return undef;
+
+  return $mc->isa('Moose::Meta::Class') ? $mc : undef;
+}
+
 # We use this instead of ensure_class_loaded when there are package symbols we
 # want to preserve.
 sub _reload_class {