_internalGetHandler(seen, routeName, localRouteName, routeOwner) {
    const fullRouteName = 'route:' + localRouteName;
    let handler = routeOwner.lookup(fullRouteName);

    if (seen[routeName] && handler) {
      return handler;
    }

    seen[routeName] = true;

    if (!handler) {
      const DefaultRoute = routeOwner.factoryFor
        ? routeOwner.factoryFor('route:basic').class
        : routeOwner._lookupFactory('route:basic');

      routeOwner.register(fullRouteName, DefaultRoute.extend());
      handler = routeOwner.lookup(fullRouteName);

      if (get(this, 'namespace.LOG_ACTIVE_GENERATION')) {
        // eslint-disable-next-line no-console
        console.info(`generated -> ${fullRouteName}`, {
          fullName: fullRouteName,
        });
      }
    }

    handler._setRouteName(localRouteName);
    if (handler._populateQPMeta) {
      handler._populateQPMeta();
    }

    return handler;
  }
This method is responsible for actually doing the lookup in getHandler.
It is separate so that it can be used from different code paths.

@private
@method _internalGetHandler
@param {Object} seen
@param {String} routeName
@param {String} localRouteName
@param {Owner} routeOwner
@return {Route} handler