    # File lib/merb-core/bootloader.rb, line 1140
        def template_paths
          extension_glob = "{#{Merb::Template.template_extensions.join(',')}}"

          # This gets all templates set in the controllers template roots
          # We separate the two maps because most of controllers will have
          # the same _template_root, so it's silly to be globbing the same
          # path over and over.
          controller_view_paths = []
          Merb::AbstractController._abstract_subclasses.each do |klass|
            next if (const = Object.full_const_get(klass))._template_root.blank?
            controller_view_paths += const._template_roots.map { |pair| pair.first }
          end
          template_paths = controller_view_paths.uniq.compact.map { |path| Dir["#{path}/**/*.#{extension_glob}"] }

          # This gets the templates that might be created outside controllers
          # template roots.  eg app/views/shared/*
          template_paths << Dir["#{Merb.dir_for(:view)}/**/*.#{extension_glob}"] if Merb.dir_for(:view)

          # This ignores templates for partials, which need to be compiled at use time to generate
          # a preamble that assigns local variables
          template_paths.flatten.compact.uniq.grep(%r{^.*/[^_][^/]*$})
        end