/* * Copyright 2013 Guidewire Software, Inc. */ package gw.lang.parser; import gw.lang.reflect.RefreshRequest; import gw.util.concurrent.Cache; import gw.lang.reflect.AbstractTypeSystemListener; import gw.lang.reflect.TypeSystem; public class TypeSystemAwareCache<K, V> extends Cache<K, V> { @SuppressWarnings({"FieldCanBeLocal"}) private final AbstractTypeSystemListener _cacheClearer = new CacheClearer(this); public static <K, V> TypeSystemAwareCache<K, V> make(String name, int size, MissHandler<K, V> handler) { return new TypeSystemAwareCache<K, V>(name, size, handler); } public TypeSystemAwareCache( String name, int size, MissHandler<K, V> kvMissHandler ) { super( name, size, kvMissHandler ); TypeSystem.addTypeLoaderListenerAsWeakRef( _cacheClearer ); } private static class CacheClearer extends AbstractTypeSystemListener { TypeSystemAwareCache _cache; private CacheClearer( TypeSystemAwareCache cache ) { _cache = cache; } @Override public void refreshed() { _cache.clear(); } @Override public void refreshedTypes(RefreshRequest request) { _cache.clear(); } } }