override fun init()

in crumb-compiler/src/main/kotlin/com/uber/crumb/CrumbProcessor.kt [141:187]


  override fun init(processingEnv: ProcessingEnvironment) {
    super.init(processingEnv)
    typeUtils = processingEnv.typeUtils
    elementUtils = processingEnv.elementUtils
    crumbLog = if (processingEnv.options[OPTION_VERBOSE]?.toBoolean() == true) {
      CrumbLog("CrumbProcessor", true, MessagerClient(processingEnv.messager))
    } else {
      CrumbLog("CrumbProcessor")
    }
    crumbManager = CrumbManager(processingEnv, crumbLog)
    try {
      if (loaderForExtensions != null) {
        // ServiceLoader.load returns a lazily-evaluated Iterable, so evaluate it eagerly now
        // to discover any exceptions.
        producerExtensions = ServiceLoader.load(CrumbProducerExtension::class.java,
            loaderForExtensions)
            .iterator().asSequence().toSet()
        consumerExtensions = ServiceLoader.load(CrumbConsumerExtension::class.java,
            loaderForExtensions)
            .iterator().asSequence().toSet()
      }
    } catch (t: Throwable) {
      val warning = buildString {
        append(
            "An exception occurred while looking for Crumb extensions. " + "No extensions will function.")
        if (t is ServiceConfigurationError) {
          append(" This may be due to a corrupt jar file in the compiler's classpath.")
        }
        append(" Exception: ")
            .append(t)
      }
      processingEnv.messager.printMessage(WARNING, warning, null)
      producerExtensions = setOf()
      consumerExtensions = setOf()
    }
    producerExtensions.plus(consumerExtensions).forEach { it.init(processingEnv) }
    val producerAnnotatedAnnotations = producerExtensions.flatMap { it.supportedProducerAnnotations() }
        .filter { it.getAnnotation(CrumbProducer::class.java) != null }
    val consumerAnnotatedAnnotations = consumerExtensions.flatMap { it.supportedConsumerAnnotations() }
        .filter { it.getAnnotation(CrumbConsumer::class.java) != null }
    val baseCrumbAnnotations = listOf(CrumbConsumer::class, CrumbProducer::class,
        CrumbConsumable::class)
        .map { it.java }
    supportedTypes = (baseCrumbAnnotations + producerAnnotatedAnnotations + consumerAnnotatedAnnotations)
        .map { it.name }
        .toSet()
  }