IDEA-CR-56763 Deprecate AppUIExecutor.inUndoTransparentAction and inWriteAction due to their dangerous semantics

GitOrigin-RevId: 57bd15d17a4456fa458694384b6b4654d61e6b85
This commit is contained in:
Florian Kistner
2019-12-19 16:32:04 +00:00
committed by intellij-monorepo-bot
parent 7de2f4a1ec
commit 7a4c0621c3
2 changed files with 24 additions and 12 deletions
@@ -97,6 +97,8 @@ internal class AppUIExecutorImpl private constructor(private val modality: Modal
}).expireWith(parentDisposable)
}
@Deprecated("Beware, context might be infectious, if coroutine resumes other waiting coroutines. " +
"Use runUndoTransparentWriteAction instead.", ReplaceWith("this"))
fun inUndoTransparentAction(): AppUIExecutorImpl {
return withConstraint(object : ContextConstraint {
override fun isCorrectContext(): Boolean =
@@ -110,6 +112,8 @@ internal class AppUIExecutorImpl private constructor(private val modality: Modal
})
}
@Deprecated("Beware, context might be infectious, if coroutine resumes other waiting coroutines. " +
"Use runWriteAction instead.", ReplaceWith("this"))
fun inWriteAction(): AppUIExecutorImpl {
return withConstraint(object : ContextConstraint {
override fun isCorrectContext(): Boolean =
@@ -128,9 +132,13 @@ internal class AppUIExecutorImpl private constructor(private val modality: Modal
}
}
@Deprecated("Beware, context might be infectious, if coroutine resumes other waiting coroutines. " +
"Use runUndoTransparentWriteAction instead.", ReplaceWith("this"))
fun AppUIExecutor.inUndoTransparentAction(): AppUIExecutor =
(this as AppUIExecutorImpl).inUndoTransparentAction()
@Deprecated("Beware, context might be infectious, if coroutine resumes other waiting coroutines. " +
"Use runWriteAction instead.", ReplaceWith("this"))
fun AppUIExecutor.inWriteAction():AppUIExecutor =
(this as AppUIExecutorImpl).inWriteAction()
@@ -6,6 +6,7 @@ import com.intellij.openapi.application.AppUIExecutor
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.application.constraints.ConstrainedExecution
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.editor.Document
import com.intellij.openapi.fileTypes.PlainTextFileType
import com.intellij.openapi.util.Disposer
@@ -147,12 +148,10 @@ class AppUIExecutorTest : LightPlatformTestCase() {
@ExperimentalCoroutinesApi
fun `test withDocumentsCommitted`() {
val executor = AppUIExecutor.onUiThread(ModalityState.NON_MODAL)
.inWriteAction()
.withDocumentsCommitted(project)
val transactionExecutor = AppUIExecutor.onUiThread(ModalityState.NON_MODAL)
.inTransaction(project)
.inWriteAction()
GlobalScope.async(SwingDispatcher) {
val pdm = PsiDocumentManager.getInstance(project)
@@ -161,16 +160,21 @@ class AppUIExecutorTest : LightPlatformTestCase() {
commitChannel.receive()
assertFalse(pdm.hasUncommitedDocuments())
val document = createDocument()
document.insertString(0, "a")
assertTrue(pdm.hasUncommitedDocuments())
val document = runWriteAction {
createDocument().apply {
insertString(0, "a")
assertTrue(pdm.hasUncommitedDocuments())
}
}
commitChannel.receive()
assertFalse(pdm.hasUncommitedDocuments())
assertEquals("a", document.text)
document.insertString(1, "b")
assertTrue(pdm.hasUncommitedDocuments())
runWriteAction {
document.insertString(1, "b")
assertTrue(pdm.hasUncommitedDocuments())
}
commitChannel.receive()
assertFalse(pdm.hasUncommitedDocuments())
@@ -178,17 +182,17 @@ class AppUIExecutorTest : LightPlatformTestCase() {
commitChannel.close()
}
launch(transactionExecutor.coroutineDispatchingContext() + job) {
withContext(transactionExecutor.coroutineDispatchingContext() + job) {
while (true) {
pdm.commitAllDocuments()
runWriteAction { pdm.commitAllDocuments() }
if (!commitChannel.isClosedForSend) {
commitChannel.send(Unit)
}
else {
return@launch
return@withContext
}
}
}.join()
}
coroutineContext.cancelChildren()
}.joinNonBlocking()