Support recording exceptions in lazy values
This commit is contained in:
@@ -17,6 +17,8 @@
|
|||||||
package org.jetbrains.jet.storage;
|
package org.jetbrains.jet.storage;
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.jet.utils.ExceptionUtils;
|
||||||
|
import org.jetbrains.jet.utils.WrappedValues;
|
||||||
|
|
||||||
public abstract class NullableLazyValueImpl<T> implements NullableLazyValue<T> {
|
public abstract class NullableLazyValueImpl<T> implements NullableLazyValue<T> {
|
||||||
private static final Object NOT_COMPUTED = new Object();
|
private static final Object NOT_COMPUTED = new Object();
|
||||||
@@ -27,14 +29,18 @@ public abstract class NullableLazyValueImpl<T> implements NullableLazyValue<T> {
|
|||||||
@Override
|
@Override
|
||||||
public T compute() {
|
public T compute() {
|
||||||
Object _value = value;
|
Object _value = value;
|
||||||
if (_value != NOT_COMPUTED) return (T) _value;
|
if (_value != NOT_COMPUTED) return WrappedValues.unescapeThrowable(_value);
|
||||||
|
|
||||||
T typedValue = doCompute();
|
try {
|
||||||
value = typedValue;
|
T typedValue = doCompute();
|
||||||
|
value = typedValue;
|
||||||
postCompute(typedValue);
|
postCompute(typedValue);
|
||||||
|
return typedValue;
|
||||||
return typedValue;
|
}
|
||||||
|
catch (Throwable e) {
|
||||||
|
value = WrappedValues.escapeThrowable(e);
|
||||||
|
throw ExceptionUtils.rethrow(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract T doCompute();
|
protected abstract T doCompute();
|
||||||
|
|||||||
Reference in New Issue
Block a user