mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-CR-56763 Deprecate AppUIExecutor.inUndoTransparentAction and inWriteAction due to their dangerous semantics
GitOrigin-RevId: 57bd15d17a4456fa458694384b6b4654d61e6b85
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7de2f4a1ec
commit
7a4c0621c3
+9
-1
@@ -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()
|
||||
|
||||
|
||||
+15
-11
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user