/** * Clears the cache of the given resource. */ public void clear(Resource resource) { getOrCreate(resource).clearValues(); }
/** * Clears the cache of the given resource. */ @Override public void clear(Resource resource) { getOrCreate(resource).clearValues(); }
/** * Overridden to make sure that the cache is initialized during {@link #isLoading() loading}. */ @Override protected void updateInternalState(IParseResult newParseResult) { super.updateInternalState(newParseResult); // make sure that the cache adapter is installed on this resource IResourceScopeCache cache = getCache(); if (cache instanceof OnChangeEvictingCache) { ((OnChangeEvictingCache) cache).getOrCreate(this); } }
/** * The transaction will be executed with caching enabled. However, all newly cached values will be discarded as soon * as the transaction is over. * @since 2.1 */ public <Result, Param extends Resource> Result execWithTemporaryCaching(Param resource, IUnitOfWork<Result, Param> transaction) throws WrappedException { CacheAdapter cacheAdapter = getOrCreate(resource); IgnoreValuesMemento memento = cacheAdapter.ignoreNewValues(); try { return transaction.exec(resource); } catch (Exception e) { throw new WrappedException(e); } finally { memento.done(); } }
/** * The transaction will be executed with caching enabled. However, all newly cached values will be discarded as soon * as the transaction is over. * @since 2.1 */ public <Result, Param extends Resource> Result execWithTemporaryCaching(Param resource, IUnitOfWork<Result, Param> transaction) throws WrappedException { CacheAdapter cacheAdapter = getOrCreate(resource); IgnoreValuesMemento memento = cacheAdapter.ignoreNewValues(); try { return transaction.exec(resource); } catch (Exception e) { throw new WrappedException(e); } finally { memento.done(); } }
/** * Try to obtain the value that is cached for the given key in the given resource. * If no value is cached, the provider is used to compute it and store it afterwards. * @param resource the resource. If it is <code>null</code>, the provider will be used to compute the value. * @param key the cache key. May not be <code>null</code>. * @param provider the strategy to compute the value if necessary. May not be <code>null</code>. */ @Override public <T> T get(Object key, Resource resource, Provider<T> provider) { if(resource == null) { return provider.get(); } CacheAdapter adapter = getOrCreate(resource); T element = adapter.<T>internalGet(key); if (element==null) { element = provider.get(); cacheMiss(adapter); adapter.set(key, element); } else { cacheHit(adapter); } if (element == CacheAdapter.NULL) { return null; } return element; }
@Override protected void afterModelLinked(EObject model, IDiagnosticConsumer diagnosticsConsumer) { super.afterModelLinked(model, diagnosticsConsumer); cache.getOrCreate(model.eResource()).listenToNotifications(); }
/** * Try to obtain the value that is cached for the given key in the given resource. * If no value is cached, the provider is used to compute it and store it afterwards. * @param resource the resource. If it is <code>null</code>, the provider will be used to compute the value. * @param key the cache key. May not be <code>null</code>. * @param provider the strategy to compute the value if necessary. May not be <code>null</code>. */ public <T> T get(Object key, Resource resource, Provider<T> provider) { if(resource == null) { return provider.get(); } CacheAdapter adapter = getOrCreate(resource); T element = adapter.<T>internalGet(key); if (element==null) { element = provider.get(); cacheMiss(adapter); adapter.set(key, element); } else { cacheHit(adapter); } if (element == CacheAdapter.NULL) { return null; } return element; }
@Override protected void beforeModelLinked(EObject model, IDiagnosticConsumer diagnosticsConsumer) { discardGeneratedPackages(model); super.beforeModelLinked(model, diagnosticsConsumer); cache.getOrCreate(model.eResource()).ignoreNotifications(); }
/** * The transaction will be executed. While it is running, any semantic state change * in the given resource will be ignored and the cache will not be cleared. */ public <Result, Param extends Resource> Result execWithoutCacheClear(Param resource, IUnitOfWork<Result, Param> transaction) throws WrappedException { CacheAdapter cacheAdapter = getOrCreate(resource); try { cacheAdapter.ignoreNotifications(); return transaction.exec(resource); } catch (Exception e) { throw new WrappedException(e); } finally { cacheAdapter.listenToNotifications(); } }
/** * The transaction will be executed. While it is running, any semantic state change * in the given resource will be ignored and the cache will not be cleared. */ public <Result, Param extends Resource> Result execWithoutCacheClear(Param resource, IUnitOfWork<Result, Param> transaction) throws WrappedException { CacheAdapter cacheAdapter = getOrCreate(resource); try { cacheAdapter.ignoreNotifications(); return transaction.exec(resource); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new WrappedException(e); } finally { cacheAdapter.listenToNotifications(); } }
protected List<IContainer> getVisibleContainers(Resource resource) { IResourceDescription description = descriptionManager.getResourceDescription(resource); IResourceDescriptions resourceDescriptions = getResourceDescriptions(resource); String cacheKey = getCacheKey("VisibleContainers", resource.getResourceSet()); OnChangeEvictingCache.CacheAdapter cache = new OnChangeEvictingCache().getOrCreate(resource); List<IContainer> result = null; result = cache.get(cacheKey); if (result == null) { result = containerManager.getVisibleContainers(description, resourceDescriptions); // SZ: I'ld like this dependency to be moved to the implementation of the // container manager, but it is not aware of a CacheAdapter if (resourceDescriptions instanceof IResourceDescription.Event.Source) { IResourceDescription.Event.Source eventSource = (Source) resourceDescriptions; DelegatingEventSource delegatingEventSource = new DelegatingEventSource(eventSource); delegatingEventSource.addListeners(Lists.newArrayList(Iterables.filter(result, IResourceDescription.Event.Listener.class))); delegatingEventSource.initialize(); cache.addCacheListener(delegatingEventSource); } cache.set(cacheKey, result); } return result; }