CacheModule: Expose bindings for (Persistent)CacheDef
These will be useful for some large tests for the googlesource.com implementation, which wants to manually call the keySerializer/ valueSerializer. Change-Id: I5037e3edd5dcead49eeb53dd8ae3b6f5a139d7e5
This commit is contained in:
@@ -24,6 +24,7 @@ import com.google.inject.Key;
|
|||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
import com.google.inject.Scopes;
|
import com.google.inject.Scopes;
|
||||||
import com.google.inject.TypeLiteral;
|
import com.google.inject.TypeLiteral;
|
||||||
|
import com.google.inject.name.Named;
|
||||||
import com.google.inject.name.Names;
|
import com.google.inject.name.Names;
|
||||||
import com.google.inject.util.Types;
|
import com.google.inject.util.Types;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
@@ -147,6 +148,14 @@ public abstract class CacheModule extends FactoryModule {
|
|||||||
String name, TypeLiteral<K> keyType, TypeLiteral<V> valType) {
|
String name, TypeLiteral<K> keyType, TypeLiteral<V> valType) {
|
||||||
PersistentCacheProvider<K, V> m = new PersistentCacheProvider<>(this, name, keyType, valType);
|
PersistentCacheProvider<K, V> m = new PersistentCacheProvider<>(this, name, keyType, valType);
|
||||||
bindCache(m, name, keyType, valType);
|
bindCache(m, name, keyType, valType);
|
||||||
|
|
||||||
|
Type cacheDefType =
|
||||||
|
Types.newParameterizedType(PersistentCacheDef.class, keyType.getType(), valType.getType());
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Key<PersistentCacheDef<K, V>> cacheDefKey =
|
||||||
|
(Key<PersistentCacheDef<K, V>>) Key.get(cacheDefType, Names.named(name));
|
||||||
|
bind(cacheDefKey).toInstance(m);
|
||||||
|
|
||||||
// TODO(dborowitz): Once default Java serialization is removed, leave no default.
|
// TODO(dborowitz): Once default Java serialization is removed, leave no default.
|
||||||
return m.version(0)
|
return m.version(0)
|
||||||
.keySerializer(new JavaCacheSerializer<>())
|
.keySerializer(new JavaCacheSerializer<>())
|
||||||
@@ -156,11 +165,19 @@ public abstract class CacheModule extends FactoryModule {
|
|||||||
private <K, V> void bindCache(
|
private <K, V> void bindCache(
|
||||||
CacheProvider<K, V> m, String name, TypeLiteral<K> keyType, TypeLiteral<V> valType) {
|
CacheProvider<K, V> m, String name, TypeLiteral<K> keyType, TypeLiteral<V> valType) {
|
||||||
Type type = Types.newParameterizedType(Cache.class, keyType.getType(), valType.getType());
|
Type type = Types.newParameterizedType(Cache.class, keyType.getType(), valType.getType());
|
||||||
|
Named named = Names.named(name);
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Key<Cache<K, V>> key = (Key<Cache<K, V>>) Key.get(type, Names.named(name));
|
Key<Cache<K, V>> key = (Key<Cache<K, V>>) Key.get(type, named);
|
||||||
bind(key).toProvider(m).asEagerSingleton();
|
bind(key).toProvider(m).asEagerSingleton();
|
||||||
bind(ANY_CACHE).annotatedWith(Exports.named(name)).to(key);
|
bind(ANY_CACHE).annotatedWith(Exports.named(name)).to(key);
|
||||||
|
|
||||||
|
Type cacheDefType =
|
||||||
|
Types.newParameterizedType(CacheDef.class, keyType.getType(), valType.getType());
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Key<CacheDef<K, V>> cacheDefKey = (Key<CacheDef<K, V>>) Key.get(cacheDefType, named);
|
||||||
|
bind(cacheDefKey).toInstance(m);
|
||||||
|
|
||||||
m.maximumWeight(1024);
|
m.maximumWeight(1024);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user