mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-04 15:06:56 +07:00
[java] use proper modality state in coroutine dispatcher in 'compilerDriverHelper::saveSettings' (IDEA-324032)
Otherwise, if compilation is invoked from a modal dialog, when the coroutine switches to EDT (via saveSettings -> reloadChangedStorageFiles -> doReload), it'll use NON_MODAL state and therefore code won't be executed. GitOrigin-RevId: 64a0023763c9599618f544cfb897bbeff8033944
This commit is contained in:
committed by
intellij-monorepo-bot
parent
24e45b2fb3
commit
86d86261f0
@@ -12,6 +12,7 @@ import com.intellij.ide.nls.NlsMessages;
|
||||
import com.intellij.notification.Notification;
|
||||
import com.intellij.notification.NotificationListener;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.application.ex.ApplicationManagerEx;
|
||||
import com.intellij.openapi.compiler.*;
|
||||
@@ -386,6 +387,7 @@ public final class CompileDriver {
|
||||
final CompileStatusNotification callback,
|
||||
final CompilerMessage message) {
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
ModalityState modalityState = ModalityState.current();
|
||||
|
||||
final boolean isUnitTestMode = ApplicationManager.getApplication().isUnitTestMode();
|
||||
final String name = JavaCompilerBundle.message(
|
||||
@@ -413,7 +415,7 @@ public final class CompileDriver {
|
||||
}
|
||||
|
||||
// ensure the project model seen by build process is up-to-date
|
||||
CompilerDriverHelperKt.saveSettings(myProject, isUnitTestMode);
|
||||
CompilerDriverHelperKt.saveSettings(myProject, modalityState, isUnitTestMode);
|
||||
Tracer.Span compileWorkSpan = Tracer.start("compileWork");
|
||||
CompilerCacheManager compilerCacheManager = CompilerCacheManager.getInstance(myProject);
|
||||
final BuildManager buildManager = BuildManager.getInstance();
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.intellij.compiler.impl
|
||||
|
||||
import com.intellij.configurationStore.saveSettings
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.ModalityState
|
||||
import com.intellij.openapi.application.asContextElement
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -10,8 +12,10 @@ import kotlinx.coroutines.runBlocking
|
||||
|
||||
@Suppress("RAW_RUN_BLOCKING")
|
||||
@RequiresBackgroundThread
|
||||
internal fun saveSettings(project: Project, isUnitTestMode: Boolean) {
|
||||
runBlocking(Dispatchers.Default) {
|
||||
internal fun saveSettings(project: Project,
|
||||
modalityState: ModalityState,
|
||||
isUnitTestMode: Boolean) {
|
||||
runBlocking(Dispatchers.Default + modalityState.asContextElement()) {
|
||||
saveSettings(project)
|
||||
if (!isUnitTestMode) {
|
||||
saveSettings(ApplicationManager.getApplication())
|
||||
|
||||
Reference in New Issue
Block a user