putIfAbsent<T extends ScopedDisposableObjectMixin> method

T putIfAbsent<T extends ScopedDisposableObjectMixin>(
  1. ScopedKey key,
  2. DisposableObjectProvider provider
)

Put an ScopedDisposableObjectMixin object if absent

Implementation

T putIfAbsent<T extends ScopedDisposableObjectMixin>(
    ScopedKey key, DisposableObjectProvider provider) {
  T? v = pool.putIfAbsent(key, () {
    final o = provider();
    o._setOwner(this);
    o._setScopedKey(key);
    return o;
  }) as T?;

  if (v == null) {
    final o = provider();
    o._setOwner(this);
    o._setScopedKey(key);
    v = o as T?;

    pool[key] = o;
  }

  return v!;
}