Explicit lock references replaced with capturing StorageManager as an outer instance

This commit is contained in:
Andrey Breslav
2013-12-20 17:28:08 +04:00
parent c9f3f9ca1f
commit 44e055e698
@@ -59,7 +59,7 @@ public class LockBasedStorageManager implements StorageManager {
@NotNull Function1<K, V> compute, @NotNull Function1<K, V> compute,
@NotNull ConcurrentMap<K, Object> map @NotNull ConcurrentMap<K, Object> map
) { ) {
return new MapBasedMemoizedFunctionToNotNull<K, V>(lock, map, compute); return new MapBasedMemoizedFunctionToNotNull<K, V>(map, compute);
} }
@NotNull @NotNull
@@ -73,13 +73,13 @@ public class LockBasedStorageManager implements StorageManager {
@NotNull Function1<K, V> compute, @NotNull Function1<K, V> compute,
@NotNull ConcurrentMap<K, Object> map @NotNull ConcurrentMap<K, Object> map
) { ) {
return new MapBasedMemoizedFunction<K, V>(lock, map, compute); return new MapBasedMemoizedFunction<K, V>(map, compute);
} }
@NotNull @NotNull
@Override @Override
public <T> NotNullLazyValue<T> createLazyValue(@NotNull Function0<T> computable) { public <T> NotNullLazyValue<T> createLazyValue(@NotNull Function0<T> computable) {
return new LockBasedNotNullLazyValue<T>(lock, computable); return new LockBasedNotNullLazyValue<T>(computable);
} }
@NotNull @NotNull
@@ -87,7 +87,7 @@ public class LockBasedStorageManager implements StorageManager {
public <T> NotNullLazyValue<T> createRecursionTolerantLazyValue( public <T> NotNullLazyValue<T> createRecursionTolerantLazyValue(
@NotNull Function0<T> computable, @NotNull final T onRecursiveCall @NotNull Function0<T> computable, @NotNull final T onRecursiveCall
) { ) {
return new LockBasedNotNullLazyValue<T>(lock, computable) { return new LockBasedNotNullLazyValue<T>(computable) {
@Override @Override
protected T recursionDetected(boolean firstTime) { protected T recursionDetected(boolean firstTime) {
return onRecursiveCall; return onRecursiveCall;
@@ -102,7 +102,7 @@ public class LockBasedStorageManager implements StorageManager {
final Function1<Boolean, T> onRecursiveCall, final Function1<Boolean, T> onRecursiveCall,
@NotNull final Function1<T, Unit> postCompute @NotNull final Function1<T, Unit> postCompute
) { ) {
return new LockBasedNotNullLazyValue<T>(lock, computable) { return new LockBasedNotNullLazyValue<T>(computable) {
@Nullable @Nullable
@Override @Override
protected T recursionDetected(boolean firstTime) { protected T recursionDetected(boolean firstTime) {
@@ -122,13 +122,13 @@ public class LockBasedStorageManager implements StorageManager {
@NotNull @NotNull
@Override @Override
public <T> NullableLazyValue<T> createNullableLazyValue(@NotNull Function0<T> computable) { public <T> NullableLazyValue<T> createNullableLazyValue(@NotNull Function0<T> computable) {
return new LockBasedLazyValue<T>(lock, computable); return new LockBasedLazyValue<T>(computable);
} }
@NotNull @NotNull
@Override @Override
public <T> NullableLazyValue<T> createRecursionTolerantNullableLazyValue(@NotNull Function0<T> computable, final T onRecursiveCall) { public <T> NullableLazyValue<T> createRecursionTolerantNullableLazyValue(@NotNull Function0<T> computable, final T onRecursiveCall) {
return new LockBasedLazyValue<T>(lock, computable) { return new LockBasedLazyValue<T>(computable) {
@Override @Override
protected T recursionDetected(boolean firstTime) { protected T recursionDetected(boolean firstTime) {
return onRecursiveCall; return onRecursiveCall;
@@ -141,7 +141,7 @@ public class LockBasedStorageManager implements StorageManager {
public <T> NullableLazyValue<T> createNullableLazyValueWithPostCompute( public <T> NullableLazyValue<T> createNullableLazyValueWithPostCompute(
@NotNull Function0<T> computable, @NotNull final Function1<T, Unit> postCompute @NotNull Function0<T> computable, @NotNull final Function1<T, Unit> postCompute
) { ) {
return new LockBasedLazyValue<T>(lock, computable) { return new LockBasedLazyValue<T>(computable) {
@Override @Override
protected void postCompute(@Nullable T value) { protected void postCompute(@Nullable T value) {
postCompute.invoke(value); postCompute.invoke(value);
@@ -160,22 +160,20 @@ public class LockBasedStorageManager implements StorageManager {
} }
} }
private static class LockBasedLazyValue<T> implements NullableLazyValue<T> { private enum NotValue {
NOT_COMPUTED,
COMPUTING,
RECURSION_WAS_DETECTED
}
private enum NotValue { private class LockBasedLazyValue<T> implements NullableLazyValue<T> {
NOT_COMPUTED,
COMPUTING,
RECURSION_WAS_DETECTED
}
private final Lock lock;
private final Function0<T> computable; private final Function0<T> computable;
@Nullable @Nullable
private volatile Object value = NotValue.NOT_COMPUTED; private volatile Object value = NotValue.NOT_COMPUTED;
public LockBasedLazyValue(@NotNull Lock lock, @NotNull Function0<T> computable) { public LockBasedLazyValue(@NotNull Function0<T> computable) {
this.lock = lock;
this.computable = computable; this.computable = computable;
} }
@@ -237,10 +235,10 @@ public class LockBasedStorageManager implements StorageManager {
} }
} }
private static class LockBasedNotNullLazyValue<T> extends LockBasedLazyValue<T> implements NotNullLazyValue<T> { private class LockBasedNotNullLazyValue<T> extends LockBasedLazyValue<T> implements NotNullLazyValue<T> {
public LockBasedNotNullLazyValue(@NotNull Lock lock, @NotNull Function0<T> computable) { public LockBasedNotNullLazyValue(@NotNull Function0<T> computable) {
super(lock, computable); super(computable);
} }
@Override @Override
@@ -252,13 +250,11 @@ public class LockBasedStorageManager implements StorageManager {
} }
} }
private static class MapBasedMemoizedFunction<K, V> implements MemoizedFunctionToNullable<K, V> { private class MapBasedMemoizedFunction<K, V> implements MemoizedFunctionToNullable<K, V> {
private final Lock lock;
private final ConcurrentMap<K, Object> cache; private final ConcurrentMap<K, Object> cache;
private final Function1<K, V> compute; private final Function1<K, V> compute;
public MapBasedMemoizedFunction(@NotNull Lock lock, @NotNull ConcurrentMap<K, Object> map, @NotNull Function1<K, V> compute) { public MapBasedMemoizedFunction(@NotNull ConcurrentMap<K, Object> map, @NotNull Function1<K, V> compute) {
this.lock = lock;
this.cache = map; this.cache = map;
this.compute = compute; this.compute = compute;
} }
@@ -294,14 +290,13 @@ public class LockBasedStorageManager implements StorageManager {
} }
} }
private static class MapBasedMemoizedFunctionToNotNull<K, V> extends MapBasedMemoizedFunction<K, V> implements MemoizedFunctionToNotNull<K, V> { private class MapBasedMemoizedFunctionToNotNull<K, V> extends MapBasedMemoizedFunction<K, V> implements MemoizedFunctionToNotNull<K, V> {
public MapBasedMemoizedFunctionToNotNull( public MapBasedMemoizedFunctionToNotNull(
@NotNull Lock lock,
@NotNull ConcurrentMap<K, Object> map, @NotNull ConcurrentMap<K, Object> map,
@NotNull Function1<K, V> compute @NotNull Function1<K, V> compute
) { ) {
super(lock, map, compute); super(map, compute);
} }
@NotNull @NotNull