List<T> (@NotNull Language language) { List<T> cached = language.getUserData(allCacheKey); if (cached != null) { return cached; } PersistentList<T> result = collectAllForLanguage(language); return language.putUserDataIfAbsent(allCacheKey, result); }