Remove use of ClassKey by pjfanning · Pull Request #622 · FasterXML/jackson-module-scala (original) (raw)

trait LookupCacheFactory {
  def createLookupCache[K, V](initialEntries: Int, maxEntries: Int): LookupCache[K, V]
}
  class ConcurrentLookupCache[K, V]() extends LookupCache[K, V] {
    final private val cache = TrieMap.empty[K, V]

    override def put(key: K, value: V): V =
      cache.put(key, value).getOrElse(None.orNull).asInstanceOf[V]

    override def putIfAbsent(key: K, value: V): V =
      cache.putIfAbsent(key, value).getOrElse(None.orNull).asInstanceOf[V]

    override def get(key: Any): V = {
      cache.get(key.asInstanceOf[K]).getOrElse(None.orNull).asInstanceOf[V]
    }

    override def clear(): Unit = {
      cache.clear()
    }

    override def size: Int = cache.size
  }

  object ConcurrentLookupCacheFactory extends LookupCacheFactory {
    override def createLookupCache[K, V](initialEntries: Int, maxEntries: Int): LookupCache[K, V] =
      new ConcurrentLookupCache[K, V]
  }