def fieldAccessed()

in scrooge-adaptive/src/main/scala/com/twitter/scrooge/adapt/AdaptTrackingDecoder.scala [47:90]


  def fieldAccessed(fieldId: Short): Unit =
    fieldAccessCounts(fieldId).getAndIncrement()

  @volatile private[this] var adaptiveDecoder: Decoder[T] = _

  private[this] def allFieldsUsed(useMap: Map[Short, Boolean]): Boolean =
    useMap.values.forall(identity)

  private[this] def buildDecoder(): Decoder[T] = {
    val useMapByField = codec.metaData.fields.map { f =>
      (f, fieldAccessCounts(f.id).get >= settings.useThreshold)
    }.toMap

    val useMapByName = useMapByField.map {
      case (f, v) =>
        val normalizedName = CaseConverter.toCamelCase(f.name)
        (normalizedName, v)
    }

    val useMapById = useMapByField.map { case (f, v) => (f.id, v) }

    if (allFieldsUsed(useMapById)) {
      logger.ifDebug(
        s"Adaptive scrooge is using all fields for ${codec.metaData.structName} struct."
      )
      fallbackDecoder
    } else {
      val namesToUse = useMapByName.collect {
        case (name, true) => name
      }

      if (namesToUse.isEmpty) {
        logger.ifDebug(
          s"Adaptive scrooge isn't using fields for ${codec.metaData.structName} struct with settings: $settings"
        )
      } else {
        logger.ifDebug(
          s"Adaptive scrooge is using fields: ${namesToUse
            .mkString(",")} for ${codec.metaData.structName} struct with settings: $settings"
        )
      }
      buildAdaptiveDecoder(useMapByName, useMapById)
    }
  }