package jetbrains.mps.baseLanguage.scopes; /*Generated by MPS */ import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import jetbrains.mps.smodel.ModelAccess; import java.util.concurrent.ConcurrentMap; import jetbrains.mps.smodel.NodeReadAccessCasterInEditor; import jetbrains.mps.util.Computable; public class RepositoryStateCacheUtils { public static <K, V> V getFromCache(String repositoryKey, K key, final _FunctionTypes._return_P0_E0<? extends V> creator) { if (ModelAccess.instance().canWrite()) { return creator.invoke(); } ConcurrentMap<K, V> cache = ModelAccess.instance().getRepositoryStateCache(repositoryKey); if (cache == null) { return creator.invoke(); } V v = cache.get(key); if (v != null) { return v; } v = NodeReadAccessCasterInEditor.runReadTransparentAction(new Computable<V>() { @Override public V compute() { return creator.invoke(); } }); if (v != null) { cache.putIfAbsent(key, v); } return v; } public static <K, V> V getFromCache(Class clazz, K key, final _FunctionTypes._return_P0_E0<? extends V> creator) { return getFromCache(clazz.getName(), key, creator); } }