From 52bf630f6c03eac1e3f272aca048613a90e88d46 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Sat, 15 Feb 2020 09:35:56 +0100 Subject: [PATCH] Add ApplicationUtils.as40 as it does not have CancellationCheck Relates to #KT-35135 --- .../kotlin/idea/util/ApplicationUtils.kt.as40 | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.as40 diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.as40 b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.as40 new file mode 100644 index 00000000000..05b6e75addb --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.as40 @@ -0,0 +1,49 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.util.application + +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.command.CommandProcessor +import com.intellij.openapi.progress.ProgressIndicator +import com.intellij.openapi.progress.ProgressIndicatorProvider +import com.intellij.openapi.progress.ProgressManager +import com.intellij.openapi.project.Project + +fun runReadAction(action: () -> T): T { + return ApplicationManager.getApplication().runReadAction(action) +} + +fun runWriteAction(action: () -> T): T { + return ApplicationManager.getApplication().runWriteAction(action) +} + +fun Project.executeWriteCommand(name: String, command: () -> Unit) { + CommandProcessor.getInstance().executeCommand(this, { runWriteAction(command) }, name, null) +} + +fun Project.executeWriteCommand(name: String, groupId: Any? = null, command: () -> T): T { + return executeCommand(name, groupId) { runWriteAction(command) } +} + +fun Project.executeCommand(name: String, groupId: Any? = null, command: () -> T): T { + @Suppress("UNCHECKED_CAST") var result: T = null as T + CommandProcessor.getInstance().executeCommand(this, { result = command() }, name, groupId) + @Suppress("USELESS_CAST") + return result as T +} + +fun runWithCancellationCheck(block: () -> T): T = block() \ No newline at end of file