in jetbrains-core/src/software/aws/toolkits/jetbrains/utils/CachingAsyncEvaluator.kt [30:69]
fun evaluate(entry: TEntry): Promise<TReturn> {
logger.info { "Evaluating $entry" }
val asyncPromise = AsyncPromise<TReturn>()
asyncPromise
.onSuccess { result ->
logger.info { "File info evaluation is completed: '$result'" }
}
.onError { error ->
// Need to set an error handler early, else the setError call will throw AssertionError
if (error !is ProcessCanceledException) {
logger.info(error) { "Failed to evaluate $entry" }
}
clearRequest(entry)
}
val promise = synchronized(lock) {
val cachePromise = requests.getOrPut(entry) { asyncPromise }
if (!cachePromise.isPending && cachePromise.isSucceeded) {
if (isInvalidated(entry, cachePromise.blockingGet(0)!!)) {
requests[entry] = asyncPromise
return@synchronized asyncPromise
}
}
cachePromise
}
if (promise == asyncPromise) {
ApplicationManager.getApplication().executeOnPooledThread {
try {
val result = getValue(entry)
asyncPromise.setResult(result)
} catch (t: Throwable) {
asyncPromise.setError(t)
}
}
}
return promise
}