fun evaluate()

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
    }