PreCachedDataContext (@NotNull DataProvider dataProvider) { DataKey<?>[] keys = DataKey.allKeys(); Component component = SoftReference.dereference(myComponentRef.ref); int dataKeysCount = updateDataKeyIndices(keys); ProviderData cachedData = cacheProviderData(dataProvider, component, myDataManager, keys); FList<ProviderData> newCachedData = cachedData == null ? myCachedData : myCachedData.prepend(cachedData); AtomicReference<KeyFMap> userData = new AtomicReference<>(KeyFMap.EMPTY_MAP); return this instanceof InjectedDataContext ? new InjectedDataContext(myComponentRef, newCachedData, userData, myMissedKeysIfFrozen, myDataManager, dataKeysCount) : new PreCachedDataContext(myComponentRef, newCachedData, userData, myMissedKeysIfFrozen, myDataManager, dataKeysCount); }