public T forLanguage(@NotNull Language l) {
    T cached = l.getUserData(cacheKey);
    if (cached != null) return cached;

    T result = findForLanguage(l);
    if (result == null) return null;
    result = l.putUserDataIfAbsent(cacheKey, result);
    return result;
  }
public T forLanguage(@NotNull Language l)