diff --git a/images/src/org/intellij/images/editor/impl/jcef/JCefImageViewer.kt b/images/src/org/intellij/images/editor/impl/jcef/JCefImageViewer.kt index b0404f7297a4..80672f622978 100644 --- a/images/src/org/intellij/images/editor/impl/jcef/JCefImageViewer.kt +++ b/images/src/org/intellij/images/editor/impl/jcef/JCefImageViewer.kt @@ -23,6 +23,7 @@ import com.intellij.ui.jcef.* import com.intellij.ui.jcef.utils.JBCefLocalRequestHandler import com.intellij.ui.jcef.utils.JBCefStreamResourceHandler import com.intellij.util.IncorrectOperationException +import com.intellij.util.ui.EDT import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import org.cef.browser.CefBrowser @@ -113,7 +114,7 @@ class JCefImageViewer(private val myFile: VirtualFile, override fun getState(level: FileEditorStateLevel): FileEditorState = ImageFileEditorState(myState.chessboardEnabled, myState.gridEnabled, myState.zoom, !myState.realSize) override fun setState(state: FileEditorState) { - if (!SwingUtilities.isEventDispatchThread()) { + if (!EDT.isCurrentThreadEdt()) { SwingUtilities.invokeLater { setState(state) } return } diff --git a/java/compiler/impl/src/com/intellij/compiler/CompilerManagerImpl.java b/java/compiler/impl/src/com/intellij/compiler/CompilerManagerImpl.java index 9bd9f6765c66..5b1fc25b23a2 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompilerManagerImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompilerManagerImpl.java @@ -10,7 +10,6 @@ import com.intellij.ide.IdleTracker; import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.compiler.*; -import com.intellij.openapi.compiler.Compiler; import com.intellij.openapi.compiler.util.InspectionValidator; import com.intellij.openapi.compiler.util.InspectionValidatorWrapper; import com.intellij.openapi.diagnostic.Logger; @@ -39,6 +38,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.FileCollectionFactory; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.net.NetUtils; +import com.intellij.util.ui.EDT; import kotlin.Unit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -50,12 +50,10 @@ import org.jetbrains.jps.javac.*; import org.jetbrains.jps.javac.ast.api.JavacFileData; import javax.tools.*; -import java.awt.*; import java.io.File; import java.io.IOException; import java.net.URI; import java.util.*; -import java.util.List; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; @@ -332,7 +330,7 @@ public class CompilerManagerImpl extends CompilerManager { public boolean isUpToDate(@NotNull CompileScope scope) { // if called from background process on pooled thread (non-EDT), run synchronously, in the calling thread // if called from EDT, explicitly pass null indicator to force starting new background thread with progress - final ProgressIndicator progress = EventQueue.isDispatchThread()? null : ProgressIndicatorProvider.getInstance().getProgressIndicator(); + ProgressIndicator progress = EDT.isCurrentThreadEdt() ? null : ProgressIndicatorProvider.getInstance().getProgressIndicator(); return progress != null? isUpToDate(scope, progress) : new CompileDriver(myProject).isUpToDate(scope, null); } diff --git a/java/compiler/tests/com/intellij/compiler/BaseCompilerTestCase.java b/java/compiler/tests/com/intellij/compiler/BaseCompilerTestCase.java index 12558c59205d..24abbcb87da5 100644 --- a/java/compiler/tests/com/intellij/compiler/BaseCompilerTestCase.java +++ b/java/compiler/tests/com/intellij/compiler/BaseCompilerTestCase.java @@ -33,13 +33,13 @@ import com.intellij.util.containers.CollectionFactory; import com.intellij.util.io.DirectoryContentSpec; import com.intellij.util.io.DirectoryContentSpecKt; import com.intellij.util.io.TestFileSystemBuilder; +import com.intellij.util.ui.EDT; import com.intellij.workspaceModel.ide.impl.WorkspaceModelCacheImpl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.util.JpsPathUtil; import org.junit.Assert; -import javax.swing.*; import java.io.File; import java.io.IOException; import java.nio.file.Path; @@ -271,11 +271,11 @@ public abstract class BaseCompilerTestCase extends JavaModuleTestCase { if (!BuildManager.getInstance().isBuildProcessDebuggingEnabled() && System.currentTimeMillis() - start > 5 * 60 * 1000) { throw new RuntimeException("timeout"); } - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { PlatformTestUtil.dispatchAllEventsInIdeEventQueue(); } } - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { PlatformTestUtil.dispatchAllEventsInIdeEventQueue(); } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapProgressImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapProgressImpl.java index 83e616ba60d4..4564d6800344 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapProgressImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapProgressImpl.java @@ -21,6 +21,7 @@ import com.intellij.openapi.wm.ToolWindowId; import com.intellij.reference.SoftReference; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.ui.EDT; import com.intellij.util.ui.MessageCategory; import com.intellij.util.ui.update.MergingUpdateQueue; import com.intellij.util.ui.update.Update; @@ -32,7 +33,6 @@ import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Unmodifiable; -import java.awt.*; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; @@ -54,7 +54,7 @@ public final class HotSwapProgressImpl extends HotSwapProgress { public HotSwapProgressImpl(Project project) { super(project); - assert EventQueue.isDispatchThread(); + assert EDT.isCurrentThreadEdt(); myProgressWindow = new BackgroundableProcessIndicator(getProject(), myTitle, null, null, true); myProgressWindow.setIndeterminate(false); myProgressWindow.addStateDelegate(new AbstractProgressIndicatorExBase() { diff --git a/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java b/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java index 2b1d7a1fb35e..273b0456ac2e 100644 --- a/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java +++ b/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java @@ -30,6 +30,7 @@ import com.intellij.ui.classFilter.ClassFilter; import com.intellij.util.SmartList; import com.intellij.util.TimeoutUtil; import com.intellij.util.lang.CompoundRuntimeException; +import com.intellij.util.ui.EDT; import com.intellij.util.ui.EdtInvocationManager; import com.intellij.util.ui.UIUtil; import com.intellij.xdebugger.XDebugSession; @@ -322,7 +323,7 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa } protected void pumpSwingThread() { - LOG.assertTrue(SwingUtilities.isEventDispatchThread()); + LOG.assertTrue(EDT.isCurrentThreadEdt()); InvokeRatherLaterRequest request = myRatherLaterRequests.get(0); request.invokesN++; @@ -377,7 +378,7 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa }); } else { - if (!SwingUtilities.isEventDispatchThread()) { + if (!EDT.isCurrentThreadEdt()) { try { EdtInvocationManager.getInstance().invokeAndWait(() -> pumpSwingThread()); } @@ -577,7 +578,7 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa comment.done(); } }; - if (!SwingUtilities.isEventDispatchThread()) { + if (!EDT.isCurrentThreadEdt()) { DebuggerInvocationUtil.invokeAndWait(myProject, runnable, ModalityState.defaultModalityState()); } else { diff --git a/java/testFramework/src/com/intellij/testFramework/CompilerTester.java b/java/testFramework/src/com/intellij/testFramework/CompilerTester.java index baed55983a84..52aee19df8b3 100644 --- a/java/testFramework/src/com/intellij/testFramework/CompilerTester.java +++ b/java/testFramework/src/com/intellij/testFramework/CompilerTester.java @@ -42,12 +42,12 @@ import com.intellij.testFramework.fixtures.impl.TempDirTestFixtureImpl; import com.intellij.util.Consumer; import com.intellij.util.ExceptionUtil; import com.intellij.util.concurrency.Semaphore; +import com.intellij.util.ui.EDT; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.cmdline.LogSetup; import org.junit.Assert; -import javax.swing.*; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; @@ -233,7 +233,7 @@ public final class CompilerTester { // tests run in awt while (!semaphore.waitFor(100)) { - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { //noinspection TestOnlyProblems PlatformTestUtil.dispatchAllEventsInIdeEventQueue(); } diff --git a/platform/core-api/src/com/intellij/openapi/application/WriteAction.java b/platform/core-api/src/com/intellij/openapi/application/WriteAction.java index fb5540bd7209..87804e80de53 100644 --- a/platform/core-api/src/com/intellij/openapi/application/WriteAction.java +++ b/platform/core-api/src/com/intellij/openapi/application/WriteAction.java @@ -8,10 +8,10 @@ import com.intellij.util.ObjectUtils; import com.intellij.util.ReflectionUtil; import com.intellij.util.ThrowableRunnable; import com.intellij.util.concurrency.annotations.RequiresEdt; +import com.intellij.util.ui.EDT; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import javax.swing.*; import java.util.concurrent.atomic.AtomicReference; /** @@ -133,7 +133,7 @@ public abstract class WriteAction extends BaseActionRunnable { return application.runWriteAction(action); } - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { return application.runWriteIntentReadAction(() -> application.runWriteAction(action)); } diff --git a/platform/core-impl/src/com/intellij/mock/MockApplication.kt b/platform/core-impl/src/com/intellij/mock/MockApplication.kt index 722a88c69684..8f26680d1d33 100644 --- a/platform/core-impl/src/com/intellij/mock/MockApplication.kt +++ b/platform/core-impl/src/com/intellij/mock/MockApplication.kt @@ -21,6 +21,7 @@ import com.intellij.openapi.util.Computable import com.intellij.openapi.util.Condition import com.intellij.openapi.util.ThrowableComputable import com.intellij.util.concurrency.AppExecutorUtil +import com.intellij.util.ui.EDT import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel @@ -91,7 +92,7 @@ open class MockApplication(parentDisposable: Disposable) : MockComponentManager( override fun getCoroutineScope(): CoroutineScope = appCoroutineScope - override fun isDispatchThread(): Boolean = SwingUtilities.isEventDispatchThread() + override fun isDispatchThread(): Boolean = EDT.isCurrentThreadEdt() override fun isWriteIntentLockAcquired(): Boolean = true diff --git a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java index b83f05f023ed..df558b427937 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java @@ -16,12 +16,9 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import java.util.Map; import java.util.Objects; -import static com.intellij.concurrency.ThreadContext.currentThreadContext; - public final class TransactionGuardImpl extends TransactionGuard { private static final Logger LOG = Logger.getInstance(TransactionGuardImpl.class); @@ -35,7 +32,7 @@ public final class TransactionGuardImpl extends TransactionGuard { public TransactionGuardImpl() { myWriteSafeModalities.put(ModalityState.nonModal(), true); - myWritingAllowed = SwingUtilities.isEventDispatchThread(); // consider app startup a user activity + myWritingAllowed = EDT.isCurrentThreadEdt(); // consider app startup a user activity } @Override diff --git a/platform/core-impl/src/com/intellij/openapi/application/ex/ApplicationUtil.kt b/platform/core-impl/src/com/intellij/openapi/application/ex/ApplicationUtil.kt index d56474060e93..03d1a3428d08 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/ex/ApplicationUtil.kt +++ b/platform/core-impl/src/com/intellij/openapi/application/ex/ApplicationUtil.kt @@ -2,7 +2,9 @@ package com.intellij.openapi.application.ex import com.intellij.codeWithMe.ClientId -import com.intellij.openapi.application.* +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.application.EdtReplacementThread +import com.intellij.openapi.application.ModalityState import com.intellij.openapi.components.ComponentManagerEx import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.progress.ProcessCanceledException @@ -12,6 +14,7 @@ import com.intellij.openapi.util.Computable import com.intellij.openapi.util.Ref import com.intellij.util.ExceptionUtil import com.intellij.util.concurrency.Semaphore +import com.intellij.util.ui.EDT import com.intellij.util.ui.EdtInvocationManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -23,7 +26,6 @@ import org.jetbrains.annotations.ApiStatus import java.util.concurrent.* import java.util.concurrent.atomic.AtomicReference import javax.swing.SwingUtilities -import kotlin.Result import kotlin.time.Duration.Companion.milliseconds object ApplicationUtil { @@ -155,7 +157,7 @@ object ApplicationUtil { fun invokeAndWaitSomewhere(thread: EdtReplacementThread, modalityState: ModalityState, r: Runnable) { when (thread) { EdtReplacementThread.EDT -> { - if (!SwingUtilities.isEventDispatchThread() && ApplicationManager.getApplication().isWriteIntentLockAcquired) { + if (!EDT.isCurrentThreadEdt() && ApplicationManager.getApplication().isWriteIntentLockAcquired) { LOG.error("Can't invokeAndWait from WT to EDT: probably leads to deadlock") } EdtInvocationManager.invokeAndWaitIfNeeded(r) @@ -163,7 +165,7 @@ object ApplicationUtil { EdtReplacementThread.WT -> if (ApplicationManager.getApplication().isWriteIntentLockAcquired) { r.run() } - else if (SwingUtilities.isEventDispatchThread()) { + else if (EDT.isCurrentThreadEdt()) { LOG.error("Can't invokeAndWait from EDT to WT") } else { @@ -187,7 +189,7 @@ object ApplicationUtil { } } EdtReplacementThread.EDT_WITH_IW -> { - if (!SwingUtilities.isEventDispatchThread() && ApplicationManager.getApplication().isWriteIntentLockAcquired) { + if (!EDT.isCurrentThreadEdt() && ApplicationManager.getApplication().isWriteIntentLockAcquired) { LOG.error("Can't invokeAndWait from WT to EDT: probably leads to deadlock") } ApplicationManager.getApplication().invokeAndWait(r, modalityState) diff --git a/platform/core-impl/src/com/intellij/openapi/application/impl/LaterInvocator.java b/platform/core-impl/src/com/intellij/openapi/application/impl/LaterInvocator.java index 574c09f8abe8..5af39cc09202 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/impl/LaterInvocator.java +++ b/platform/core-impl/src/com/intellij/openapi/application/impl/LaterInvocator.java @@ -376,7 +376,7 @@ public final class LaterInvocator { } } public static void pollWriteThreadEventsOnce() { - LOG.assertTrue(!SwingUtilities.isEventDispatchThread()); + LOG.assertTrue(!EDT.isCurrentThreadEdt()); LOG.assertTrue(ApplicationManager.getApplication().isWriteIntentLockAcquired()); } diff --git a/platform/core-impl/src/com/intellij/openapi/progress/impl/CoreProgressManager.java b/platform/core-impl/src/com/intellij/openapi/progress/impl/CoreProgressManager.java index 2adf83d415fc..ad1ffa39f861 100644 --- a/platform/core-impl/src/com/intellij/openapi/progress/impl/CoreProgressManager.java +++ b/platform/core-impl/src/com/intellij/openapi/progress/impl/CoreProgressManager.java @@ -459,7 +459,7 @@ public class CoreProgressManager extends ProgressManager implements Disposable { @Override public void run(@NotNull Task task) { if (isSynchronousHeadless(task)) { - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { WriteIntentReadAction.run((Runnable)() -> runProcessWithProgressSynchronously(task)); } else { diff --git a/platform/execution-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.kt b/platform/execution-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.kt index 8bbde82248fe..f33110a54254 100644 --- a/platform/execution-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.kt +++ b/platform/execution-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.kt @@ -64,6 +64,7 @@ import com.intellij.util.SlowOperations import com.intellij.util.SmartList import com.intellij.util.concurrency.AppExecutorUtil import com.intellij.util.containers.ContainerUtil +import com.intellij.util.ui.EDT import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import org.jetbrains.annotations.* @@ -897,7 +898,7 @@ open class ExecutionManagerImpl(private val project: Project, private val corout private fun awaitTermination(request: Runnable, delayMillis: Long) { val app = ApplicationManager.getApplication() if (app.isUnitTestMode) { - app.invokeLater(request, if (SwingUtilities.isEventDispatchThread()) ModalityState.current() else ModalityState.any()) + app.invokeLater(request, if (EDT.isCurrentThreadEdt()) ModalityState.current() else ModalityState.any()) } else { awaitingTerminationAlarm.addRequest(request, delayMillis) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/codeVision/ui/model/SwingScheduler.kt b/platform/lang-impl/src/com/intellij/codeInsight/codeVision/ui/model/SwingScheduler.kt index e453a2bcfdd8..005b069d2118 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/codeVision/ui/model/SwingScheduler.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/codeVision/ui/model/SwingScheduler.kt @@ -1,8 +1,9 @@ package com.intellij.codeInsight.codeVision.ui.model import com.intellij.openapi.application.WriteIntentReadAction -import com.jetbrains.rd.util.reactive.IScheduler +import com.intellij.util.ui.EDT import com.jetbrains.rd.util.reactive.ExecutionOrder +import com.jetbrains.rd.util.reactive.IScheduler import org.jetbrains.annotations.ApiStatus import javax.swing.SwingUtilities @@ -20,5 +21,5 @@ object SwingScheduler : IScheduler { } override val isActive: Boolean - get() = SwingUtilities.isEventDispatchThread() + get() = EDT.isCurrentThreadEdt() } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java index da396c7f140a..34e50f68c043 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewPane.java @@ -24,6 +24,7 @@ import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.ArchiveFileSystem; import com.intellij.util.PlatformUtils; +import com.intellij.util.ui.EDT; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -36,7 +37,6 @@ import javax.swing.tree.TreeModel; import java.awt.*; import static com.intellij.openapi.module.ModuleGrouperKt.isQualifiedModuleNamesEnabled; -import static java.awt.EventQueue.isDispatchThread; public class ProjectViewPane extends AbstractProjectViewPaneWithAsyncSupport { public static final @NonNls String ID = "ProjectPane"; @@ -90,7 +90,7 @@ public class ProjectViewPane extends AbstractProjectViewPaneWithAsyncSupport { * @return {@code true} if 'Project View' have more than one top-level module node or have top-level module group nodes */ private boolean hasSeveralTopLevelModuleNodes() { - if (!isDispatchThread()) return true; // do not check nodes during building + if (!EDT.isCurrentThreadEdt()) return true; // do not check nodes during building // TODO: have to rewrite this logic without using walking in a tree TreeModel treeModel = myTree.getModel(); Object root = treeModel.getRoot(); diff --git a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java index 380e9200262b..538d3fd18d71 100644 --- a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java +++ b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java @@ -61,6 +61,7 @@ import com.intellij.util.concurrency.ThreadingAssertions; import com.intellij.util.concurrency.annotations.RequiresEdt; import com.intellij.util.containers.JBIterable; import com.intellij.util.containers.JBTreeTraverser; +import com.intellij.util.ui.EDT; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.tree.TreeModelAdapter; import com.intellij.util.ui.tree.TreeUtil; @@ -622,7 +623,7 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre @Override public void dispose() { - LOG.assertTrue(EventQueue.isDispatchThread(), Thread.currentThread().getName()); + LOG.assertTrue(EDT.isCurrentThreadEdt(), Thread.currentThread().getName()); myDisposed = true; myFileEditor = null; } diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/GotoActionModel.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/GotoActionModel.java index 4014657e81ed..5c5f715e4ce0 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/GotoActionModel.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/GotoActionModel.java @@ -75,7 +75,7 @@ public final class GotoActionModel implements ChooseByNameModel, Comparator> myConfigurablesNames = new SynchronizedClearableLazy<>(() -> { - if (SwingUtilities.isEventDispatchThread() && !ApplicationManager.getApplication().isUnitTestMode()) { + if (EDT.isCurrentThreadEdt() && !ApplicationManager.getApplication().isUnitTestMode()) { LOG.error("Configurable names must not be loaded on EDT"); } diff --git a/platform/platform-api/src/com/intellij/openapi/roots/ui/util/CompositeAppearance.java b/platform/platform-api/src/com/intellij/openapi/roots/ui/util/CompositeAppearance.java index 723acfd23435..bb474743fac9 100644 --- a/platform/platform-api/src/com/intellij/openapi/roots/ui/util/CompositeAppearance.java +++ b/platform/platform-api/src/com/intellij/openapi/roots/ui/util/CompositeAppearance.java @@ -9,6 +9,7 @@ import com.intellij.openapi.util.NlsSafe; import com.intellij.ui.SimpleColoredComponent; import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.PlatformIcons; +import com.intellij.util.ui.EDT; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -67,7 +68,7 @@ public class CompositeAppearance implements ModifiableCellAppearanceEx { public boolean equals(Object obj) { synchronized (mySections) { if (!(obj instanceof CompositeAppearance appearance)) return false; - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { return appearance.mySections.equals(mySections); } else { diff --git a/platform/platform-api/src/com/intellij/ui/GuiUtils.java b/platform/platform-api/src/com/intellij/ui/GuiUtils.java index 72f4508f1855..b83d76fc3a56 100644 --- a/platform/platform-api/src/com/intellij/ui/GuiUtils.java +++ b/platform/platform-api/src/com/intellij/ui/GuiUtils.java @@ -11,10 +11,7 @@ import com.intellij.openapi.util.text.CharFilter; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.components.JBTextField; import com.intellij.util.ArrayUtilRt; -import com.intellij.util.ui.JBInsets; -import com.intellij.util.ui.JBUI; -import com.intellij.util.ui.NamedColorUtil; -import com.intellij.util.ui.UIUtil; +import com.intellij.util.ui.*; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import sun.awt.AWTAccessor; @@ -263,7 +260,7 @@ public final class GuiUtils { * removes all children and parent references, listeners from {@code container} to avoid possible memory leaks */ public static void removePotentiallyLeakingReferences(@NotNull Container container) { - assert SwingUtilities.isEventDispatchThread(); + assert EDT.isCurrentThreadEdt(); AWTAccessor.getComponentAccessor().setParent(container, null); container.removeAll(); for (ComponentListener c : container.getComponentListeners()) container.removeComponentListener(c); diff --git a/platform/platform-api/src/com/intellij/ui/table/AdditionalTableHeader.kt b/platform/platform-api/src/com/intellij/ui/table/AdditionalTableHeader.kt index e0a58d6c8928..50c90b18d4f9 100644 --- a/platform/platform-api/src/com/intellij/ui/table/AdditionalTableHeader.kt +++ b/platform/platform-api/src/com/intellij/ui/table/AdditionalTableHeader.kt @@ -1,6 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.ui.table +import com.intellij.util.ui.EDT import java.awt.BorderLayout import java.awt.ComponentOrientation import java.awt.Dimension @@ -174,7 +175,7 @@ abstract class AdditionalTableHeader : JPanel(BorderLayout()) { */ protected fun update() { autoRun += 1 - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { SwingUtilities.invokeLater(Runnable { this.updateColumns() }) } else { diff --git a/platform/platform-impl/codeinsight-inline/src/com/intellij/codeInsight/inline/completion/InlineCompletion.kt b/platform/platform-impl/codeinsight-inline/src/com/intellij/codeInsight/inline/completion/InlineCompletion.kt index 3ba5028ccc43..36f30bdad668 100644 --- a/platform/platform-impl/codeinsight-inline/src/com/intellij/codeInsight/inline/completion/InlineCompletion.kt +++ b/platform/platform-impl/codeinsight-inline/src/com/intellij/codeInsight/inline/completion/InlineCompletion.kt @@ -21,10 +21,10 @@ import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Key import com.intellij.platform.util.coroutines.childScope import com.intellij.util.application +import com.intellij.util.ui.EDT import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.cancel import java.util.concurrent.atomic.AtomicReference -import javax.swing.SwingUtilities object InlineCompletion { private val KEY = Key.create>("inline.completion.handler") @@ -33,7 +33,7 @@ object InlineCompletion { fun getHandlerOrNull(editor: Editor): InlineCompletionHandler? = editor.getUserData(KEY)?.first fun install(editor: EditorEx, scope: CoroutineScope) { - if (!SwingUtilities.isEventDispatchThread()) { + if (!EDT.isCurrentThreadEdt()) { LOG.error("Inline Completion should be installed only in EDT. This error will be replaced with assertion.") } diff --git a/platform/platform-impl/src/com/intellij/application/options/colors/AbstractFontOptionsPanel.java b/platform/platform-impl/src/com/intellij/application/options/colors/AbstractFontOptionsPanel.java index 879fa3237624..22bc98dd1f06 100644 --- a/platform/platform-impl/src/com/intellij/application/options/colors/AbstractFontOptionsPanel.java +++ b/platform/platform-impl/src/com/intellij/application/options/colors/AbstractFontOptionsPanel.java @@ -9,13 +9,16 @@ import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.FontPreferences; import com.intellij.openapi.editor.colors.ModifiableFontPreferences; import com.intellij.openapi.options.ex.Settings; -import com.intellij.ui.*; +import com.intellij.ui.AbstractFontCombo; +import com.intellij.ui.DocumentAdapter; +import com.intellij.ui.FontComboBox; import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBTextField; import com.intellij.ui.dsl.builder.impl.UtilsKt; import com.intellij.util.EventDispatcher; import com.intellij.util.MathUtil; +import com.intellij.util.ui.EDT; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -79,7 +82,7 @@ public abstract class AbstractFontOptionsPanel extends JPanel implements Options myEditorFontSizeField.getDocument().addDocumentListener(new DocumentAdapter() { @Override public void textChanged(@NotNull DocumentEvent event) { - if (myIsInSchemeChange || !SwingUtilities.isEventDispatchThread()) return; + if (myIsInSchemeChange || !EDT.isCurrentThreadEdt()) return; String selectedFont = myPrimaryCombo.getFontName(); if (selectedFont != null) { setFontSize(getFontSizeFromField()); diff --git a/platform/platform-impl/src/com/intellij/ide/AssertiveRepaintManager.java b/platform/platform-impl/src/com/intellij/ide/AssertiveRepaintManager.java index 0aa392e7690f..c75e59899368 100644 --- a/platform/platform-impl/src/com/intellij/ide/AssertiveRepaintManager.java +++ b/platform/platform-impl/src/com/intellij/ide/AssertiveRepaintManager.java @@ -5,6 +5,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.reference.SoftReference; +import com.intellij.util.ui.EDT; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -120,7 +121,7 @@ public final class AssertiveRepaintManager extends RepaintManager { } private void checkThreadViolations(@Nullable Component c) { - if (!SwingUtilities.isEventDispatchThread() && (c == null || c.isShowing())) { + if (!EDT.isCurrentThreadEdt() && (c == null || c.isShowing())) { final Exception exception = new Exception(); StackTraceElement[] stackTrace = exception.getStackTrace(); diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginPriceService.java b/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginPriceService.java index c446f59b2e0f..d91dea16bb94 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginPriceService.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/PluginPriceService.java @@ -1,7 +1,6 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.ide.plugins.newui; -import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.marketplace.utils.MarketplaceUrls; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; @@ -11,13 +10,13 @@ import com.intellij.util.Consumer; import com.intellij.util.Url; import com.intellij.util.Urls; import com.intellij.util.io.HttpRequests; +import com.intellij.util.ui.EDT; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.io.JsonReaderEx; import org.jetbrains.io.JsonUtil; -import javax.swing.*; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URLConnection; @@ -207,6 +206,6 @@ public final class PluginPriceService { } private static void checkAccess() { - assert SwingUtilities.isEventDispatchThread(); + assert EDT.isCurrentThreadEdt(); } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/SearchResultPanel.java b/platform/platform-impl/src/com/intellij/ide/plugins/newui/SearchResultPanel.java index 50438cd4ef20..29155803b114 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/SearchResultPanel.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/SearchResultPanel.java @@ -10,6 +10,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.components.JBScrollPane; import com.intellij.util.Alarm; import com.intellij.util.SingleAlarm; +import com.intellij.util.ui.EDT; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.accessibility.AccessibleAnnouncerUtil; import org.jetbrains.annotations.ApiStatus; @@ -100,7 +101,7 @@ public abstract class SearchResultPanel { } public void setQuery(@NotNull String query) { - assert SwingUtilities.isEventDispatchThread(); + assert EDT.isCurrentThreadEdt(); setEmptyText(query); @@ -151,7 +152,7 @@ public abstract class SearchResultPanel { protected void updatePanel(AtomicBoolean runQuery) { ApplicationManager.getApplication().invokeLater(() -> { - assert SwingUtilities.isEventDispatchThread(); + assert EDT.isCurrentThreadEdt(); if (!runQuery.get()) { return; diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index 2bea4dc8e8c4..e8b088f98fc0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -909,7 +909,7 @@ public final class ApplicationImpl extends ClientAwareComponentManager implement @Nullable JComponent parentComponent, @Nullable @NlsContexts.Button String cancelText ) { - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { return CompletableFuture.completedFuture( createProgressWindow(progressTitle, canBeCanceled, shouldShowModalWindow, project, parentComponent, cancelText)); } diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/exceptions.kt b/platform/platform-impl/src/com/intellij/openapi/application/impl/exceptions.kt index cce31be375fb..980e59a04a82 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/exceptions.kt +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/exceptions.kt @@ -13,6 +13,7 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.fileLogger import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.util.registry.Registry +import com.intellij.util.ui.EDT import org.jetbrains.annotations.Nls import javax.swing.SwingUtilities import kotlin.coroutines.CoroutineContext @@ -77,7 +78,7 @@ private fun interactiveMode(coroutineContext: CoroutineContext?): Mode { return Mode.Interactive(action = text) } // Exception thrown on EDT with modal dialog (or no project) has something to do with current user task - if ((SwingUtilities.isEventDispatchThread() && LaterInvocator.isInModalContext()) || + if ((EDT.isCurrentThreadEdt() && LaterInvocator.isInModalContext()) || ProjectManager.getInstanceIfCreated()?.openProjects?.isEmpty() == true) { return Mode.Interactive(action = null) } diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/playback/PlaybackRunner.java b/platform/platform-impl/src/com/intellij/openapi/ui/playback/PlaybackRunner.java index fa4b36eb2038..69786daec2b1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/playback/PlaybackRunner.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/playback/PlaybackRunner.java @@ -17,6 +17,7 @@ import com.intellij.openapi.wm.IdeFrame; import com.intellij.util.concurrency.EdtScheduler; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.text.StringTokenizer; +import com.intellij.util.ui.EDT; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import org.jetbrains.annotations.NotNull; @@ -26,8 +27,8 @@ import javax.swing.*; import java.awt.*; import java.io.File; import java.io.IOException; -import java.util.List; import java.util.*; +import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -260,7 +261,7 @@ public class PlaybackRunner { if (command.canGoFurther()) { int delay = getDelay(command); if (delay > 0) { - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { EdtScheduler.getInstance().schedule(delay, Context.current().wrap(() -> { if (!onStop.isDisposed()) { executeFrom(commandIndex + 1, context.getBaseDir()); @@ -443,7 +444,7 @@ public class PlaybackRunner { public final void message(final PlaybackContext context, final String text, final Type type) { - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { messageEdt(context, text, type); } else { diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/AlphaNumericTypeCommand.java b/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/AlphaNumericTypeCommand.java index c4238d3be782..4fbd8f10721d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/AlphaNumericTypeCommand.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/AlphaNumericTypeCommand.java @@ -5,12 +5,12 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.ui.TypingTarget; import com.intellij.openapi.ui.playback.PlaybackContext; import com.intellij.openapi.util.ActionCallback; +import com.intellij.util.ui.EDT; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.concurrency.Promise; import org.jetbrains.concurrency.Promises; -import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; @@ -65,7 +65,7 @@ public class AlphaNumericTypeCommand extends TypeCommand { result.setDone(); }; - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { ApplicationManager.getApplication().executeOnPooledThread(typeRunnable); } else { typeRunnable.run(); diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/KeyCodeTypeCommand.java b/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/KeyCodeTypeCommand.java index 275a2dc5c5f9..f92c9f9be4b4 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/KeyCodeTypeCommand.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/KeyCodeTypeCommand.java @@ -6,11 +6,11 @@ import com.intellij.openapi.ui.TypingTarget; import com.intellij.openapi.ui.playback.PlaybackContext; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.Couple; +import com.intellij.util.ui.EDT; import org.jetbrains.annotations.NotNull; import org.jetbrains.concurrency.Promise; import org.jetbrains.concurrency.Promises; -import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.List; @@ -82,7 +82,7 @@ public class KeyCodeTypeCommand extends AlphaNumericTypeCommand { }; - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { ApplicationManager.getApplication().executeOnPooledThread(runnable); } else { runnable.run(); diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/TypeCommand.java b/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/TypeCommand.java index b7a743db653d..4bde66e5df33 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/TypeCommand.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/playback/commands/TypeCommand.java @@ -6,6 +6,7 @@ import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.util.ui.EDT; import org.intellij.lang.annotations.JdkConstants; import org.jetbrains.annotations.ApiStatus; @@ -30,7 +31,7 @@ public abstract class TypeCommand extends AbstractCommand { } protected void type(Robot robot, KeyStroke keyStroke) { - assert !SwingUtilities.isEventDispatchThread() : "Robot playback must not be in EDT"; + assert !EDT.isCurrentThreadEdt() : "Robot playback must not be in EDT"; boolean shift = (keyStroke.getModifiers() & InputEvent.SHIFT_MASK) > 0; boolean alt = (keyStroke.getModifiers() & InputEvent.ALT_MASK) > 0; diff --git a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/DistributedTestIdeScheduler.kt b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/DistributedTestIdeScheduler.kt index cccb3287e2f6..a391c5b52b4e 100644 --- a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/DistributedTestIdeScheduler.kt +++ b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/DistributedTestIdeScheduler.kt @@ -3,10 +3,10 @@ package com.intellij.remoteDev.tests.impl import com.intellij.ide.IdeEventQueue import com.intellij.openapi.application.ModalityState import com.intellij.util.application +import com.intellij.util.ui.EDT import com.jetbrains.rd.util.reactive.ExecutionOrder import com.jetbrains.rd.util.reactive.IScheduler import org.jetbrains.annotations.ApiStatus -import javax.swing.SwingUtilities @ApiStatus.Internal object DistributedTestIdeScheduler : IScheduler { @@ -14,7 +14,7 @@ object DistributedTestIdeScheduler : IScheduler { get() = ExecutionOrder.Sequential override val isActive: Boolean - get() = SwingUtilities.isEventDispatchThread() + get() = EDT.isCurrentThreadEdt() override fun flush() { IdeEventQueue.getInstance().flushQueue() diff --git a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/LambdaTestIdeScheduler.kt b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/LambdaTestIdeScheduler.kt index 8c17b8713ba5..e4cecd3bb2bb 100644 --- a/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/LambdaTestIdeScheduler.kt +++ b/platform/remoteDev-util/src/com/intellij/remoteDev/tests/impl/LambdaTestIdeScheduler.kt @@ -3,10 +3,10 @@ package com.intellij.remoteDev.tests.impl import com.intellij.ide.IdeEventQueue import com.intellij.openapi.application.ModalityState import com.intellij.util.application +import com.intellij.util.ui.EDT import com.jetbrains.rd.util.reactive.ExecutionOrder import com.jetbrains.rd.util.reactive.IScheduler import org.jetbrains.annotations.ApiStatus -import javax.swing.SwingUtilities @ApiStatus.Internal object LambdaTestIdeScheduler : IScheduler { @@ -14,7 +14,7 @@ object LambdaTestIdeScheduler : IScheduler { get() = ExecutionOrder.Sequential override val isActive: Boolean - get() = SwingUtilities.isEventDispatchThread() + get() = EDT.isCurrentThreadEdt() override fun flush() { IdeEventQueue.getInstance().flushQueue() diff --git a/platform/testFramework/common/src/LeakHunter.java b/platform/testFramework/common/src/LeakHunter.java index 8b05ce080cb5..a81d0a91aa45 100644 --- a/platform/testFramework/common/src/LeakHunter.java +++ b/platform/testFramework/common/src/LeakHunter.java @@ -32,6 +32,7 @@ import com.intellij.util.io.PersistentEnumeratorCache; import com.intellij.util.ref.DebugReflectionUtil; import com.intellij.util.ref.GCUtil; import com.intellij.util.ref.IgnoredTraverseEntry; +import com.intellij.util.ui.EDT; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -145,7 +146,7 @@ public final class LeakHunter { private static void waitForIndicesToUpdate() { ProjectManager projectManager = ApplicationManager.getApplication() == null ? null : ProjectManager.getInstance(); for (Project project : projectManager == null ? new Project[0] : projectManager.getOpenProjects()) { - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { UIUtil.dispatchAllInvocationEvents(); while (DumbService.getInstance(project).isDumb()) { DumbService.getInstance(project).waitForSmartMode(100L); @@ -200,7 +201,7 @@ public final class LeakHunter { // which then are stored in the leak-hunter own queue even though they are no longer reachable waitForIndicesToUpdate(); - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { UIUtil.dispatchAllInvocationEvents(); // Remove expired invocations, so they are not used as object roots. LaterInvocator.purgeExpiredItems(); diff --git a/platform/testFramework/common/src/UITestUtil.java b/platform/testFramework/common/src/UITestUtil.java index 2694b780a33b..bdcaf2548250 100644 --- a/platform/testFramework/common/src/UITestUtil.java +++ b/platform/testFramework/common/src/UITestUtil.java @@ -4,13 +4,13 @@ package com.intellij.testFramework; import com.intellij.ide.IdeEventQueue; import com.intellij.openapi.util.EmptyRunnable; import com.intellij.util.ThrowableRunnable; +import com.intellij.util.ui.EDT; import com.intellij.util.ui.StartupUiUtil; import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.TestOnly; import sun.awt.AWTAutoShutdown; -import javax.swing.*; import java.awt.*; import java.lang.reflect.InvocationTargetException; @@ -66,7 +66,7 @@ public final class UITestUtil { return; } - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { throw new IllegalStateException("must not be called on EDT"); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/ContainingBranchesGetter.kt b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/ContainingBranchesGetter.kt index 7aa996a703dc..c18f00e2985a 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/ContainingBranchesGetter.kt +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/ContainingBranchesGetter.kt @@ -13,12 +13,12 @@ import com.intellij.platform.diagnostic.telemetry.TelemetryManager import com.intellij.platform.diagnostic.telemetry.helpers.use import com.intellij.platform.vcs.impl.shared.telemetry.VcsScope import com.intellij.util.concurrency.annotations.RequiresEdt +import com.intellij.util.ui.EDT import com.intellij.util.ui.UIUtil import com.intellij.vcs.log.* import com.intellij.vcs.log.graph.impl.facade.PermanentGraphImpl import com.intellij.vcs.log.util.SequentialLimitedLifoExecutor import org.jetbrains.annotations.CalledInAny -import java.awt.EventQueue import java.util.function.Predicate /** @@ -68,17 +68,17 @@ class ContainingBranchesGetter internal constructor(private val logData: VcsLogD * This task will be executed each time the calculating process completes. */ fun addTaskCompletedListener(runnable: Runnable) { - LOG.assertTrue(EventQueue.isDispatchThread()) + LOG.assertTrue(EDT.isCurrentThreadEdt()) loadingFinishedListeners.add(runnable) } fun removeTaskCompletedListener(runnable: Runnable) { - LOG.assertTrue(EventQueue.isDispatchThread()) + LOG.assertTrue(EDT.isCurrentThreadEdt()) loadingFinishedListeners.remove(runnable) } private fun notifyListeners() { - LOG.assertTrue(EventQueue.isDispatchThread()) + LOG.assertTrue(EDT.isCurrentThreadEdt()) for (listener in loadingFinishedListeners) { listener.run() } @@ -89,7 +89,7 @@ class ContainingBranchesGetter internal constructor(private val logData: VcsLogD * if it is not available, starts calculating in the background and returns null. */ fun requestContainingBranches(root: VirtualFile, hash: Hash): List? { - LOG.assertTrue(EventQueue.isDispatchThread()) + LOG.assertTrue(EDT.isCurrentThreadEdt()) val refs = getContainingBranchesFromCache(root, hash) if (refs == null) { taskExecutor.queue(CachingTask(createTask(root, hash, logData.dataPack), currentBranchesChecksum)) @@ -98,7 +98,7 @@ class ContainingBranchesGetter internal constructor(private val logData: VcsLogD } fun getContainingBranchesFromCache(root: VirtualFile, hash: Hash): List? { - LOG.assertTrue(EventQueue.isDispatchThread()) + LOG.assertTrue(EDT.isCurrentThreadEdt()) return cache.getIfPresent(CommitId(hash, root)) } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.kt b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.kt index 9d9a8142276a..51cee2c24086 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.kt +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.kt @@ -11,20 +11,22 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.util.Consumer import com.intellij.util.concurrency.annotations.RequiresBackgroundThread import com.intellij.util.concurrency.annotations.RequiresEdt +import com.intellij.util.ui.EDT import com.intellij.vcs.log.* import com.intellij.vcs.log.data.index.IndexedDetails import com.intellij.vcs.log.data.index.VcsLogIndex import com.intellij.vcs.log.util.SequentialLimitedLifoExecutor import it.unimi.dsi.fastutil.ints.* import org.jetbrains.annotations.ApiStatus -import java.awt.EventQueue -class MiniDetailsGetter internal constructor(project: Project, - storage: VcsLogStorage, - logProviders: Map, - private val topCommitsDetailsCache: TopCommitsCache, - private val index: VcsLogIndex, - parentDisposable: Disposable) : +class MiniDetailsGetter internal constructor( + project: Project, + storage: VcsLogStorage, + logProviders: Map, + private val topCommitsDetailsCache: TopCommitsCache, + private val index: VcsLogIndex, + parentDisposable: Disposable, +) : AbstractDataGetter(storage, logProviders, parentDisposable) { private val factory = project.getService(VcsLogObjectsFactory::class.java) @@ -49,7 +51,7 @@ class MiniDetailsGetter internal constructor(project: Project, val details = getFromCacheAndCleanOldPlaceholder(commit) if (details != null) return details - if (!EventQueue.isDispatchThread()) { + if (!EDT.isCurrentThreadEdt()) { thisLogger().assertTrue(commitsToLoad.none(), "Requesting loading commits in background thread is not supported.") return createPlaceholderCommit(commit, 0 /*not used as this commit is not cached*/) } @@ -66,7 +68,7 @@ class MiniDetailsGetter internal constructor(project: Project, } private fun getFromCacheAndCleanOldPlaceholder(commit: VcsLogCommitStorageIndex): VcsCommitMetadata? { - if (!EventQueue.isDispatchThread()) { + if (!EDT.isCurrentThreadEdt()) { return cache.getIfPresent(commit) ?: topCommitsDetailsCache[commit] } val details = cache.getIfPresent(commit) @@ -134,10 +136,12 @@ class MiniDetailsGetter internal constructor(project: Project, @RequiresBackgroundThread @Throws(VcsException::class) - override fun doLoadCommitsDataFromProvider(logProvider: VcsLogProvider, - root: VirtualFile, - hashes: List, - consumer: Consumer) { + override fun doLoadCommitsDataFromProvider( + logProvider: VcsLogProvider, + root: VirtualFile, + hashes: List, + consumer: Consumer, + ) { logProvider.readMetadata(root, hashes, consumer) } diff --git a/plugins/ant/src/com/intellij/lang/ant/segments/DeferredActionsQueueImpl.java b/plugins/ant/src/com/intellij/lang/ant/segments/DeferredActionsQueueImpl.java index 567ce7a85adb..71b43e0502bd 100644 --- a/plugins/ant/src/com/intellij/lang/ant/segments/DeferredActionsQueueImpl.java +++ b/plugins/ant/src/com/intellij/lang/ant/segments/DeferredActionsQueueImpl.java @@ -16,8 +16,7 @@ package com.intellij.lang.ant.segments; import com.intellij.openapi.diagnostic.Logger; - -import java.awt.*; +import com.intellij.util.ui.EDT; public class DeferredActionsQueueImpl implements DeferredActionsQueue { private static final Logger LOG = Logger.getInstance(DeferredActionsQueueImpl.class); @@ -39,7 +38,7 @@ public class DeferredActionsQueueImpl implements DeferredActionsQueue { myCounter++; if (myCounter > 127) { myCounter = 0; - LOG.assertTrue(EventQueue.isDispatchThread()); + LOG.assertTrue(EDT.isCurrentThreadEdt()); } } diff --git a/plugins/devkit/devkit-core/src/testAssistant/TestDataGroupFileEditor.java b/plugins/devkit/devkit-core/src/testAssistant/TestDataGroupFileEditor.java index a80e6de9083c..cc524169f8ad 100644 --- a/plugins/devkit/devkit-core/src/testAssistant/TestDataGroupFileEditor.java +++ b/plugins/devkit/devkit-core/src/testAssistant/TestDataGroupFileEditor.java @@ -16,6 +16,7 @@ import com.intellij.pom.Navigatable; import com.intellij.reference.SoftReference; import com.intellij.ui.OnePixelSplitter; import com.intellij.ui.components.JBLabel; +import com.intellij.util.ui.EDT; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -58,7 +59,7 @@ public class TestDataGroupFileEditor extends UserDataHolderBase implements TextE @Override public @NotNull Editor getEditor() { - return (SwingUtilities.isEventDispatchThread() && isBeforeEditorFocused() ? myBeforeEditor : myAfterEditor).getEditor(); + return (EDT.isCurrentThreadEdt() && isBeforeEditorFocused() ? myBeforeEditor : myAfterEditor).getEditor(); } private boolean isBeforeEditorFocused() { diff --git a/plugins/ide-features-trainer/src/training/ui/IftSmartWaitRobot.kt b/plugins/ide-features-trainer/src/training/ui/IftSmartWaitRobot.kt index fdc61950de2a..f41523b9d7b9 100644 --- a/plugins/ide-features-trainer/src/training/ui/IftSmartWaitRobot.kt +++ b/plugins/ide-features-trainer/src/training/ui/IftSmartWaitRobot.kt @@ -2,6 +2,7 @@ package training.ui import com.intellij.util.ConcurrencyUtil +import com.intellij.util.ui.EDT import com.intellij.util.ui.EdtInvocationManager import org.assertj.swing.awt.AWT import org.assertj.swing.core.* @@ -15,7 +16,6 @@ import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit import javax.swing.JComponent import javax.swing.JPopupMenu -import javax.swing.SwingUtilities import kotlin.math.ln // It is a copy-paster from testGuiFramework (with several changes) @@ -237,7 +237,7 @@ internal class IftSmartWaitRobot : Robot { } else { Pause.pause(waitConst) - if (!SwingUtilities.isEventDispatchThread()) EdtInvocationManager.getInstance().invokeAndWait { } + if (!EDT.isCurrentThreadEdt()) EdtInvocationManager.getInstance().invokeAndWait { } } } diff --git a/plugins/stats-collector/src/com/intellij/stats/completion/network/Utils.kt b/plugins/stats-collector/src/com/intellij/stats/completion/network/Utils.kt index 46cbe5ce4920..e320ce1c0311 100644 --- a/plugins/stats-collector/src/com/intellij/stats/completion/network/Utils.kt +++ b/plugins/stats-collector/src/com/intellij/stats/completion/network/Utils.kt @@ -17,9 +17,9 @@ package com.intellij.stats.completion.network import com.intellij.openapi.application.ApplicationManager -import javax.swing.SwingUtilities +import com.intellij.util.ui.EDT fun assertNotEDT() { val isInTestMode = ApplicationManager.getApplication().isUnitTestMode - assert(!SwingUtilities.isEventDispatchThread() || isInTestMode) + assert(!EDT.isCurrentThreadEdt() || isInTestMode) } \ No newline at end of file diff --git a/plugins/xslt-debugger/src/org/intellij/plugins/xsltDebugger/EDTGuard.java b/plugins/xslt-debugger/src/org/intellij/plugins/xsltDebugger/EDTGuard.java index c0a3ce087eae..193cfc261a2f 100644 --- a/plugins/xslt-debugger/src/org/intellij/plugins/xsltDebugger/EDTGuard.java +++ b/plugins/xslt-debugger/src/org/intellij/plugins/xsltDebugger/EDTGuard.java @@ -23,12 +23,12 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Pair; import com.intellij.util.Alarm; +import com.intellij.util.ui.EDT; import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; import org.intellij.plugins.xsltDebugger.rt.engine.Watchable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import java.io.Serializable; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; @@ -67,7 +67,7 @@ final class EDTGuard implements InvocationHandler { @Override public @Nullable Object invoke(Object proxy, @NotNull Method method, Object[] args) throws Throwable { - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { return invokeAsync(method, args); } diff --git a/plugins/xslt-debugger/src/org/intellij/plugins/xsltDebugger/ui/GeneratedStructureModel.java b/plugins/xslt-debugger/src/org/intellij/plugins/xsltDebugger/ui/GeneratedStructureModel.java index 3b0d00acc67c..9142de2f1dd3 100644 --- a/plugins/xslt-debugger/src/org/intellij/plugins/xsltDebugger/ui/GeneratedStructureModel.java +++ b/plugins/xslt-debugger/src/org/intellij/plugins/xsltDebugger/ui/GeneratedStructureModel.java @@ -24,12 +24,12 @@ import com.intellij.pom.Navigatable; import com.intellij.reference.SoftReference; import com.intellij.util.SmartList; import com.intellij.util.containers.Interner; +import com.intellij.util.ui.EDT; import org.intellij.plugins.xsltDebugger.XsltDebuggerSession; import org.intellij.plugins.xsltDebugger.rt.engine.OutputEventQueue; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; @@ -72,7 +72,7 @@ public class GeneratedStructureModel extends DefaultTreeModel { } public void update(final List eventQueue) { - if (!SwingUtilities.isEventDispatchThread()) { + if (!EDT.isCurrentThreadEdt()) { ApplicationManager.getApplication().invokeLater(() -> updateImpl(eventQueue)); return; } diff --git a/python/python-sdk/src/com/jetbrains/python/sdk/PySdkUtil.java b/python/python-sdk/src/com/jetbrains/python/sdk/PySdkUtil.java index 34a2a7e1284c..20a81ebae760 100644 --- a/python/python-sdk/src/com/jetbrains/python/sdk/PySdkUtil.java +++ b/python/python-sdk/src/com/jetbrains/python/sdk/PySdkUtil.java @@ -21,15 +21,15 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.EnvironmentUtil; import com.intellij.util.ObjectUtils; -import com.jetbrains.python.sdk.impl.PySdkBundle; +import com.intellij.util.ui.EDT; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.run.CommandLinePatcher; import com.jetbrains.python.run.PyVirtualEnvReader; import com.jetbrains.python.sdk.flavors.PythonSdkFlavor; +import com.jetbrains.python.sdk.impl.PySdkBundle; import com.jetbrains.python.sdk.legacy.PythonSdkUtil; import org.jetbrains.annotations.*; -import javax.swing.*; import java.io.File; import java.io.IOException; import java.io.OutputStream; @@ -147,7 +147,7 @@ public final class PySdkUtil { processInput.close(); } } - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { final ProgressManager progressManager = ProgressManager.getInstance(); final Application application = ApplicationManager.getApplication(); assert application.isUnitTestMode() || diff --git a/python/python-sdk/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java b/python/python-sdk/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java index 6416f24625d6..9632f4e1b144 100644 --- a/python/python-sdk/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java +++ b/python/python-sdk/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java @@ -17,6 +17,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.PatternUtil; import com.intellij.util.concurrency.annotations.RequiresBackgroundThread; +import com.intellij.util.ui.EDT; import com.jetbrains.python.parser.icons.PythonParserIcons; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.run.CommandLinePatcher; @@ -187,7 +188,7 @@ public abstract class PythonSdkFlavor { if (executable != null) { return executable; } - var error = SwingUtilities.isEventDispatchThread() + var error = EDT.isCurrentThreadEdt() ? getFileExecutionErrorOnEdt(fullPath, targetEnvConfig) : getFileExecutionError(fullPath, targetEnvConfig); if (error != null) { diff --git a/python/src/com/jetbrains/python/extensions/ProgressManagerExt.kt b/python/src/com/jetbrains/python/extensions/ProgressManagerExt.kt index 33ab47eca6bd..ea79b912dc1a 100644 --- a/python/src/com/jetbrains/python/extensions/ProgressManagerExt.kt +++ b/python/src/com/jetbrains/python/extensions/ProgressManagerExt.kt @@ -5,10 +5,10 @@ import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.Task import com.intellij.openapi.util.NlsContexts -import javax.swing.SwingUtilities +import com.intellij.util.ui.EDT fun ProgressManager.runUnderProgress(@NlsContexts.DialogTitle title: String, code: () -> T): T = - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { run(object : Task.WithResult(null, title, false) { override fun compute(indicator: ProgressIndicator) = code() }) diff --git a/python/src/com/jetbrains/python/run/PythonTask.java b/python/src/com/jetbrains/python/run/PythonTask.java index 02a1dcb36239..e3dd8c1d7f3f 100644 --- a/python/src/com/jetbrains/python/run/PythonTask.java +++ b/python/src/com/jetbrains/python/run/PythonTask.java @@ -31,6 +31,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.viewModel.extraction.ToolWindowContentExtractor; import com.intellij.util.NotNullFunction; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.ui.EDT; import com.jetbrains.python.HelperPackage; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PythonPluginDisposable; @@ -45,7 +46,6 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Path; @@ -488,7 +488,7 @@ public class PythonTask { public final @NotNull String runNoConsole() throws ExecutionException { final ProgressManager manager = ProgressManager.getInstance(); final Output output; - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { assert !ApplicationManager.getApplication().isWriteAccessAllowed() : "This method can't run under write action"; output = manager.runProcessWithProgressSynchronously(() -> getOutputInternal(), myRunTabTitle, false, myModule.getProject()); } @@ -504,7 +504,7 @@ public class PythonTask { } private @NotNull Output getOutputInternal() throws ExecutionException { - assert !SwingUtilities.isEventDispatchThread(); + assert !EDT.isCurrentThreadEdt(); final ProcessHandler process = createProcess(new HashMap<>()); final OutputListener listener = new OutputListener(); process.addProcessListener(listener); diff --git a/python/src/com/jetbrains/python/sdk/PySdkExt.kt b/python/src/com/jetbrains/python/sdk/PySdkExt.kt index 4963bd796f2c..ba791a97e43f 100644 --- a/python/src/com/jetbrains/python/sdk/PySdkExt.kt +++ b/python/src/com/jetbrains/python/sdk/PySdkExt.kt @@ -31,6 +31,7 @@ import com.intellij.platform.ide.progress.runWithModalProgressBlocking import com.intellij.python.community.services.systemPython.SystemPythonService import com.intellij.util.PathUtil import com.intellij.util.concurrency.annotations.RequiresBackgroundThread +import com.intellij.util.ui.EDT import com.intellij.webcore.packaging.PackagesNotificationPanel import com.jetbrains.python.PyBundle import com.jetbrains.python.errorProcessing.PyResult @@ -62,7 +63,6 @@ import java.nio.file.Files import java.nio.file.InvalidPathException import java.nio.file.Path import java.nio.file.Paths -import javax.swing.SwingUtilities import kotlin.io.path.Path import kotlin.io.path.div import kotlin.io.path.pathString @@ -219,7 +219,7 @@ fun createSdkByGenerateTask( throw e } - val sdkName = suggestedSdkName ?: if (SwingUtilities.isEventDispatchThread()) { + val sdkName = suggestedSdkName ?: if (EDT.isCurrentThreadEdt()) { runWithModalProgressBlocking(ModalTaskOwner.guess(), "...") { withContext(Dispatchers.IO) { suggestAssociatedSdkName(homeFile.path, associatedProjectPath) diff --git a/python/src/com/jetbrains/python/ui/ModalUtil.kt b/python/src/com/jetbrains/python/ui/ModalUtil.kt index 779440fdb8e2..d7afa5f0295a 100644 --- a/python/src/com/jetbrains/python/ui/ModalUtil.kt +++ b/python/src/com/jetbrains/python/ui/ModalUtil.kt @@ -6,9 +6,9 @@ import com.intellij.platform.ide.progress.TaskCancellation import com.intellij.platform.ide.progress.runWithModalProgressBlocking import com.intellij.util.concurrency.annotations.RequiresBlockingContext import com.intellij.util.concurrency.annotations.RequiresEdt +import com.intellij.util.ui.EDT import com.jetbrains.python.sdk.impl.PySdkBundle import kotlinx.coroutines.runBlocking -import javax.swing.SwingUtilities /** * Runs [code] in background under the modal dialog @@ -25,7 +25,7 @@ fun pyModalBlocking(modalTaskOwner: ModalTaskOwner = ModalTaskOwner.guess(), * It is *not* recommended to use this function. Prefer suspend functions. */ internal fun pyMayBeModalBlocking(modalTaskOwner: ModalTaskOwner = ModalTaskOwner.guess(), code: suspend () -> T): T = - if (SwingUtilities.isEventDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { pyModalBlocking(modalTaskOwner, code) } else { diff --git a/python/src/com/jetbrains/python/util/LegacyApiCoroutineWrapper.kt b/python/src/com/jetbrains/python/util/LegacyApiCoroutineWrapper.kt index a18933c4a89f..ec1abfa79a03 100644 --- a/python/src/com/jetbrains/python/util/LegacyApiCoroutineWrapper.kt +++ b/python/src/com/jetbrains/python/util/LegacyApiCoroutineWrapper.kt @@ -5,12 +5,12 @@ import com.intellij.openapi.progress.runBlockingMaybeCancellable import com.intellij.openapi.project.Project import com.intellij.openapi.util.NlsSafe import com.intellij.platform.ide.progress.runWithModalProgressBlocking +import com.intellij.util.ui.EDT import kotlinx.coroutines.CoroutineScope -import java.awt.EventQueue.isDispatchThread // In case legacy sync API can be called from both EDT and background. This wrapper automatically chooses the appropriate way to launch it. fun runWithModalBlockingOrInBackground(project: Project, @NlsSafe msg: String, action: suspend CoroutineScope.() -> T): T { - if (isDispatchThread()) { + if (EDT.isCurrentThreadEdt()) { return runWithModalProgressBlocking(project, msg, action) }