private[this] def addController()

in thrift/src/main/scala/com/twitter/finatra/thrift/routing/routers.scala [296:333]


  private[this] def addController(
    controller: Controller,
    conf: Controller.ControllerConfig
  ): ThriftService = {
    assert(
      conf.isValid, {
        val expectStr = conf.gen.methods.map(_.name).mkString("{", ", ", "}")
        val actualStr = conf.methods.map(_.method.name).mkString("{", ", ", "}")
        s"${controller.getClass.getSimpleName} for service " +
          s"${conf.gen.getClass.getSimpleName} is misconfigured. " +
          s"Expected exactly one implementation for each of $expectStr but found $actualStr"
      }
    )

    routes = conf.methods.map { cm =>
      val method: ThriftMethod = cm.method
      val service =
        cm.impl.asInstanceOf[Service[Request[method.Args], Response[method.SuccessType]]]
      thriftMethodRegistrar.register(controller.getClass, method, cm.filters)
      method -> {
        val endpoint = ServiceFactory.const(cm.filters.andThen(service))
        val stack = filterStack ++ Stack.leaf(finagle.stack.Endpoint, endpoint)
        val params = Stack.Params.empty +
          param.Label(serverName) +
          param.Tags(method.name, method.serviceName)
        val svcFac = stack.make(params)
        Service.pending(svcFac()).asInstanceOf[ScroogeServiceImpl]
      }
    }.toMap

    logger.info(
      "Adding methods\n" + routes.keys
        .map(method => s"${controller.getClass.getSimpleName}.${method.name}")
        .mkString("\n")
    )

    conf.gen.unsafeBuildFromMethods(routes).toThriftService
  }