From cd2eefab628b75a688764fe7474ff6fe642f68c9 Mon Sep 17 00:00:00 2001 From: Ivan Semenov Date: Thu, 14 Jun 2018 15:49:16 +0300 Subject: [PATCH] [util] Don't throw a kotlin npe when T is nullable type T can be both nullable and not-nullable, so it doesn't make sense to fail on null there --- .../src/com/intellij/openapi/application/actions.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/platform/projectModel-api/src/com/intellij/openapi/application/actions.kt b/platform/projectModel-api/src/com/intellij/openapi/application/actions.kt index ec01d47c59b5..ba04b241c5a9 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/application/actions.kt +++ b/platform/projectModel-api/src/com/intellij/openapi/application/actions.kt @@ -3,6 +3,7 @@ package com.intellij.openapi.application import com.intellij.openapi.command.CommandProcessor import com.intellij.openapi.util.Computable +import com.intellij.openapi.util.Ref import java.lang.reflect.InvocationTargetException import javax.swing.SwingUtilities @@ -31,23 +32,23 @@ fun invokeAndWaitIfNeed(modalityState: ModalityState? = null, runnable: () - return runnable() } else { - var result: T? = null try { - SwingUtilities.invokeAndWait { result = runnable() } + val resultRef = Ref.create() + SwingUtilities.invokeAndWait { resultRef.set(runnable()) } + return resultRef.get() } catch (e: InvocationTargetException) { throw e.cause ?: e } - return result!! } } else if (app.isDispatchThread) { return runnable() } else { - var result: T? = null - app.invokeAndWait({ result = runnable() }, modalityState ?: ModalityState.defaultModalityState()) - return result!! + val resultRef = Ref.create() + app.invokeAndWait({ resultRef.set(runnable()) }, modalityState ?: ModalityState.defaultModalityState()) + return resultRef.get() } }