This is an automated email from the ASF dual-hosted git repository.
sdedic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 255a250 Change invokeLaters to Mutex.EVENT.
new d0a9324 Merge pull request #2823 from sdedic/lsp/edt2mutex
255a250 is described below
commit 255a250194f75ea9a62ffe89a848518764b72e8b
Author: Svata Dedic <[email protected]>
AuthorDate: Mon Mar 22 13:36:05 2021 +0100
Change invokeLaters to Mutex.EVENT.
---
.../src/org/netbeans/api/java/source/UiUtils.java | 24 +++----------
java/java.source/test/unit/data/jdk/Table.java | 27 +++++++++++++++
.../org/netbeans/api/java/source/UiUtilsTest.java | 10 +++---
.../netbeans/core/windows/WindowManagerImpl.java | 40 +++++++---------------
.../org/openide/text/CloneableEditorSupport.java | 15 ++++----
.../src/org/openide/text/DocumentOpenClose.java | 6 ++--
6 files changed, 60 insertions(+), 62 deletions(-)
diff --git a/java/java.source/src/org/netbeans/api/java/source/UiUtils.java
b/java/java.source/src/org/netbeans/api/java/source/UiUtils.java
index 3b9d24f..0f966d0 100644
--- a/java/java.source/src/org/netbeans/api/java/source/UiUtils.java
+++ b/java/java.source/src/org/netbeans/api/java/source/UiUtils.java
@@ -34,7 +34,6 @@ import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.Modifier;
import javax.swing.Icon;
-import javax.swing.SwingUtilities;
import javax.swing.text.StyledDocument;
import org.netbeans.modules.java.source.pretty.VeryPretty;
import org.netbeans.modules.java.source.save.DiffContext;
@@ -50,6 +49,7 @@ import org.openide.text.Line;
import org.openide.text.Line.ShowOpenType;
import org.openide.text.Line.ShowVisibilityType;
import org.openide.text.NbDocument;
+import org.openide.util.Mutex;
import org.openide.util.NbBundle;
import org.openide.util.UserQuestionException;
@@ -377,27 +377,13 @@ public final class UiUtils {
}
private static void doShow(final Line l, final int column) {
- if (SwingUtilities.isEventDispatchThread()) {
- l.show(ShowOpenType.OPEN, ShowVisibilityType.FOCUS, column);
- } else {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- l.show(ShowOpenType.OPEN, ShowVisibilityType.FOCUS,
column);
- }
- });
- }
+ Mutex.EVENT.readAccess(() ->
+ l.show(ShowOpenType.OPEN, ShowVisibilityType.FOCUS, column)
+ );
}
private static void doOpen(final OpenCookie oc) {
- if (SwingUtilities.isEventDispatchThread()) {
- oc.open();
- } else {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- oc.open();
- }
- });
- }
+ Mutex.EVENT.readAccess(oc::open);
}
private static int getOffset(FileObject fo, final ElementHandle<? extends
Element> handle) throws IOException {
diff --git a/java/java.source/test/unit/data/jdk/Table.java
b/java/java.source/test/unit/data/jdk/Table.java
new file mode 100644
index 0000000..ea7cf5f
--- /dev/null
+++ b/java/java.source/test/unit/data/jdk/Table.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package test;
+
+public class Table {
+
+}
+
+
+
diff --git
a/java/java.source/test/unit/src/org/netbeans/api/java/source/UiUtilsTest.java
b/java/java.source/test/unit/src/org/netbeans/api/java/source/UiUtilsTest.java
index 27ad84b..b15467f 100644
---
a/java/java.source/test/unit/src/org/netbeans/api/java/source/UiUtilsTest.java
+++
b/java/java.source/test/unit/src/org/netbeans/api/java/source/UiUtilsTest.java
@@ -46,7 +46,7 @@ import org.openide.util.Utilities;
* @author Tomas Zezula
*/
public class UiUtilsTest extends NbTestCase {
- private static final String JTABLE_DATA = "jdk/JTable.java"; //NOI18N
+ private static final String JTABLE_DATA = "jdk/Table.java"; //NOI18N
public UiUtilsTest(String testName) {
super(testName);
@@ -80,14 +80,14 @@ public class UiUtilsTest extends NbTestCase {
ClasspathInfo cpInfo = js.getClasspathInfo();
CompilationInfo ci = SourceUtilsTestUtil.getCompilationInfo(js,
Phase.RESOLVED);
Elements elements = ci.getElements();
- Element ce = elements.getTypeElement("javax.swing.JTable");
+ Element ce = elements.getTypeElement("test.Table");
assertNotNull(ce);
Object[] result = UiUtils.getOpenInfo(cpInfo, ce);
assertNotNull(result);
assertTrue(result[0] instanceof FileObject);
assertTrue(result[1] instanceof Integer);
assertEquals(srcFile, result[0]);
- assertEquals(7996, ((Integer) result[1]).intValue());
+ assertEquals(824, ((Integer) result[1]).intValue());
}
private static FileObject getSrcRoot(FileObject wrkRoot) throws
IOException {
@@ -103,8 +103,8 @@ public class UiUtilsTest extends NbTestCase {
assertNotNull(data);
FileObject srcRoot = getSrcRoot(wrkRoot);
assertNotNull(srcRoot);
- FileObject pkg = FileUtil.createFolder(srcRoot, "javax/swing");
//NOI18N
- FileObject src = pkg.createData("JTable.java"); //NOI18N
+ FileObject pkg = FileUtil.createFolder(srcRoot, "test");
//NOI18N
+ FileObject src = pkg.createData("Table.java"); //NOI18N
FileLock lock = src.lock();
try {
BufferedReader in = new BufferedReader(new
InputStreamReader(data.getInputStream()));
diff --git
a/platform/core.windows/src/org/netbeans/core/windows/WindowManagerImpl.java
b/platform/core.windows/src/org/netbeans/core/windows/WindowManagerImpl.java
index 82cecc4..5fb1eff 100644
--- a/platform/core.windows/src/org/netbeans/core/windows/WindowManagerImpl.java
+++ b/platform/core.windows/src/org/netbeans/core/windows/WindowManagerImpl.java
@@ -1163,16 +1163,9 @@ public final class WindowManagerImpl extends
WindowManager implements Workspace
// PENDING When #37529 finished, then uncomment the next row and move
the
// checks of AWT thread away.
// WindowManagerImpl.assertEventDispatchThread();
- if(SwingUtilities.isEventDispatchThread()) {
- changeSupport.firePropertyChange(propName, oldValue, newValue);
- } else {
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- changeSupport.firePropertyChange(propName, oldValue,
newValue);
- }
- });
- }
+ Mutex.EVENT.readAccess(() ->
+ changeSupport.firePropertyChange(propName, oldValue, newValue)
+ );
}
// PENDING used in persistence only, revise how to restrict its usage only
there.
@@ -1207,16 +1200,9 @@ public final class WindowManagerImpl extends
WindowManager implements Workspace
// #37457 It is needed to ensure the activation calls are in AWT
thread.
- if(SwingUtilities.isEventDispatchThread()) {
- WindowManagerImpl.getInstance().activateComponent(tc);
- } else {
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- WindowManagerImpl.getInstance().activateComponent(tc);
- }
- });
- }
+ Mutex.EVENT.readAccess(() ->
+ WindowManagerImpl.getInstance().activateComponent(tc)
+ );
}
private static void notifyRegistryTopComponentOpened(TopComponent tc) {
@@ -1534,8 +1520,8 @@ public final class WindowManagerImpl extends
WindowManager implements Workspace
FloatingWindowTransparencyManager.getDefault().start();
}
});
-
- SwingUtilities.invokeLater(getExclusive());
+
+ Mutex.EVENT.postReadRequest(getExclusive());
}
}
@@ -1587,7 +1573,7 @@ public final class WindowManagerImpl extends
WindowManager implements Workspace
*/
public synchronized void register(Runnable r) {
arr.add(r);
- SwingUtilities.invokeLater(this);
+ Mutex.EVENT.postReadRequest(this);
}
@Override
@@ -1606,7 +1592,7 @@ public final class WindowManagerImpl extends
WindowManager implements Workspace
}
final Runnable toRun = arr.remove(0);
- SwingUtilities.invokeLater(new Runnable() {
+ Mutex.EVENT.postReadRequest(new Runnable() {
@Override
public void run() {
Logger perf =
Logger.getLogger("org.netbeans.log.startup"); // NOI18N
@@ -1618,7 +1604,7 @@ public final class WindowManagerImpl extends
WindowManager implements Workspace
Logger.getLogger(WindowManagerImpl.class.getName()).log(
Level.WARNING, null, ex);
}
- SwingUtilities.invokeLater(Exclusive.this);
+ Mutex.EVENT.postReadRequest(Exclusive.this);
}
});
}
@@ -1783,7 +1769,7 @@ public final class WindowManagerImpl extends
WindowManager implements Workspace
+ "http://core.netbeans.org/proposals/threading/"; // NOI18N
static void assertEventDispatchThread() {
- assert SwingUtilities.isEventDispatchThread() :
ASSERTION_ERROR_MESSAGE;
+ assert Mutex.EVENT.isReadAccess() : ASSERTION_ERROR_MESSAGE;
}
static {
@@ -2029,7 +2015,7 @@ public final class WindowManagerImpl extends
WindowManager implements Workspace
if( null != editorToActivate )
editorToActivate.requestActive();
- SwingUtilities.invokeLater( new Runnable() {
+ Mutex.EVENT.postReadRequest(new Runnable() {
@Override
public void run() {
Frame mainWindow = getMainWindow();
diff --git
a/platform/openide.text/src/org/openide/text/CloneableEditorSupport.java
b/platform/openide.text/src/org/openide/text/CloneableEditorSupport.java
index d2ab78e..a373ea2 100644
--- a/platform/openide.text/src/org/openide/text/CloneableEditorSupport.java
+++ b/platform/openide.text/src/org/openide/text/CloneableEditorSupport.java
@@ -59,7 +59,6 @@ import java.util.*;
import javax.swing.JButton;
import javax.swing.JEditorPane;
-import javax.swing.SwingUtilities;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
@@ -68,6 +67,7 @@ import javax.swing.undo.UndoableEdit;
import org.netbeans.api.editor.mimelookup.MimeLookup;
import org.netbeans.api.editor.mimelookup.MimePath;
import org.openide.util.Exceptions;
+import org.openide.util.Mutex;
import org.openide.util.Parameters;
import org.openide.util.UserCancelException;
import org.openide.util.WeakSet;
@@ -803,7 +803,7 @@ public abstract class CloneableEditorSupport extends
CloneableOpenSupport {
*/
public JEditorPane[] getOpenedPanes() {
// expected in AWT only
- assert SwingUtilities.isEventDispatchThread()
+ assert Mutex.EVENT.isReadAccess()
: "CloneableEditorSupport.getOpenedPanes() must be called from
AWT thread only"; // NOI18N
CloneableEditorSupport redirect =
CloneableEditorSupportRedirector.findRedirect(this);
if (redirect != null) {
@@ -856,7 +856,7 @@ public abstract class CloneableEditorSupport extends
CloneableOpenSupport {
*/
JEditorPane getRecentPane () {
// expected in AWT only
- assert SwingUtilities.isEventDispatchThread()
+ assert Mutex.EVENT.isReadAccess()
: "CloneableEditorSupport.getRecentPane must be called from
AWT thread only"; // NOI18N
CloneableEditorSupport redirect =
CloneableEditorSupportRedirector.findRedirect(this);
if (redirect != null) {
@@ -1121,10 +1121,11 @@ public abstract class CloneableEditorSupport extends
CloneableOpenSupport {
SafeAWTAccess safe = new SafeAWTAccess();
- if (SwingUtilities.isEventDispatchThread()) {
+ if (Mutex.EVENT.isReadAccess()) {
safe.run();
} else {
- SwingUtilities.invokeLater(safe);
+ // safe.run only blocks for a certain time, unlike
Mutex.EVENT.readAccess().
+ Mutex.EVENT.postReadRequest(safe::run);
try {
safe.waitForResult();
} catch (InterruptedException ex) {
@@ -1937,7 +1938,7 @@ public abstract class CloneableEditorSupport extends
CloneableOpenSupport {
private boolean documentLocked = false;
public void taskFinished(org.openide.util.Task t2) {
- javax.swing.SwingUtilities.invokeLater(this);
+ Mutex.EVENT.postReadRequest(this);
t2.removeTaskListener(this);
}
@@ -2250,7 +2251,7 @@ public abstract class CloneableEditorSupport extends
CloneableOpenSupport {
// - post in AWT event thread because of possible dialog
popup
// - acquire the write access before checking, so there is
no
// clash in-between and we're safe for potential reload.
- SwingUtilities.invokeLater(
+ Mutex.EVENT.postReadRequest(
new Runnable() {
private boolean inRunAtomic;
diff --git a/platform/openide.text/src/org/openide/text/DocumentOpenClose.java
b/platform/openide.text/src/org/openide/text/DocumentOpenClose.java
index 929efc6..25d29cb 100644
--- a/platform/openide.text/src/org/openide/text/DocumentOpenClose.java
+++ b/platform/openide.text/src/org/openide/text/DocumentOpenClose.java
@@ -23,11 +23,9 @@ import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
-import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JEditorPane;
-import javax.swing.SwingUtilities;
import javax.swing.text.BadLocationException;
import javax.swing.text.EditorKit;
import javax.swing.text.Position;
@@ -363,7 +361,7 @@ final class DocumentOpenClose {
// Initial part of reload runs in EDT (collects caret positions)
but outside "lock"
Mutex.EVENT.readAccess(reloadEDTTask);
}
- }
+ }
private StyledDocument retainExistingDocLA() { // Lock acquired mandatory
switch (documentStatus) {
@@ -775,7 +773,7 @@ final class DocumentOpenClose {
caretPositions[i] = null;
}
}
- SwingUtilities.invokeLater(new Runnable() {
+ Mutex.EVENT.postReadRequest(new Runnable() {
@Override
public void run() {
for (int i = 0; i < reloadOpenPanes.length;
i++) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists