mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-166384 provide a utility method in IDEA to support JRE-166
This commit is contained in:
@@ -31,10 +31,7 @@ import com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher;
|
||||
import com.intellij.openapi.keymap.impl.IdeMouseEventDispatcher;
|
||||
import com.intellij.openapi.keymap.impl.KeyState;
|
||||
import com.intellij.openapi.ui.JBPopupMenu;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.ExpirableRunnable;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.openapi.wm.IdeFrame;
|
||||
@@ -50,6 +47,7 @@ import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import sun.awt.AppContext;
|
||||
import sun.awt.SunToolkit;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.plaf.basic.ComboPopup;
|
||||
@@ -1194,4 +1192,30 @@ public class IdeEventQueue extends EventQueue {
|
||||
public void addPostEventListener(@NotNull PostEventHook listener, @NotNull Disposable parentDisposable) {
|
||||
myPostEventListeners.addListener(listener, parentDisposable);
|
||||
}
|
||||
|
||||
private static Ref<Method> unsafeNonBlockingExecuteRef;
|
||||
|
||||
/**
|
||||
* Must be called on the Event Dispatching thread.
|
||||
* Executes the runnable so that it can perform a non-blocking invocation on the toolkit thread.
|
||||
* Not for general-purpose usage.
|
||||
*
|
||||
* @param r the runnable to execute
|
||||
*/
|
||||
public static void unsafeNonblockingExecute(Runnable r) {
|
||||
assert EventQueue.isDispatchThread();
|
||||
if (unsafeNonBlockingExecuteRef == null) {
|
||||
// The method is available in JBSDK.
|
||||
unsafeNonBlockingExecuteRef = Ref.create(ReflectionUtil.getDeclaredMethod(SunToolkit.class, "unsafeNonblockingExecute", Runnable.class));
|
||||
}
|
||||
if (unsafeNonBlockingExecuteRef.get() != null) {
|
||||
try {
|
||||
unsafeNonBlockingExecuteRef.get().invoke(Toolkit.getDefaultToolkit(), r);
|
||||
return;
|
||||
}
|
||||
catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
r.run();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user