blob: ddd473ffda7a3f4295d96407b46e14581f081160 [file] [log] [blame]
package org.jetbrains.rpc;
import com.intellij.openapi.util.ActionCallback;
import org.jetbrains.annotations.Nullable;
abstract class AsyncResultCallbackBase<SUCCESS_RESPONSE, C extends ActionCallback, ERROR_DETAILS> implements AsyncResultCallback<SUCCESS_RESPONSE, ERROR_DETAILS> {
protected final C callback;
private final ErrorConsumer<C, ERROR_DETAILS> errorConsumer;
protected AsyncResultCallbackBase(C callback, @Nullable ErrorConsumer<C, ERROR_DETAILS> errorConsumer) {
this.callback = callback;
this.errorConsumer = errorConsumer;
}
@Override
public final void onError(String errorMessage, ERROR_DETAILS errorDetails) {
try {
if (errorConsumer == null) {
callback.reject(errorMessage);
}
else {
try {
errorConsumer.consume(errorMessage, errorDetails, callback);
}
catch (Throwable e) {
try {
callback.reject(e.getMessage());
}
finally {
MessageManager.LOG.error(e);
}
}
}
}
catch (Throwable e) {
MessageManager.LOG.error(e);
}
}
}