From e1bd79ca9c2168e16c366c425439953d9ea53787 Mon Sep 17 00:00:00 2001 From: Taylor Smock Date: Mon, 3 Feb 2020 10:11:39 -0700 Subject: [PATCH] Fix an issue where SwingUtilities.invokeAndWait is called in the EDT Signed-off-by: Taylor Smock --- .../mapwithai/backend/GetDataRunnable.java | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/GetDataRunnable.java b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/GetDataRunnable.java index a222afe..b84d5d1 100644 --- a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/GetDataRunnable.java +++ b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/GetDataRunnable.java @@ -128,29 +128,35 @@ public class GetDataRunnable extends RecursiveTask { * @param bounds */ public static void cleanup(DataSet dataSet, Bounds bounds) { - try { - SwingUtilities.invokeAndWait(() -> { - synchronized (LOCK) { - removeRedundantSource(dataSet); - replaceTags(dataSet); - removeCommonTags(dataSet); - mergeNodes(dataSet); - cleanupDataSet(dataSet); - mergeWays(dataSet); - removeAlreadyAddedData(dataSet); - new MergeDuplicateWays(dataSet).executeCommand(); - (bounds == null ? dataSet.getWays() : dataSet.searchWays(bounds.toBBox())).parallelStream() - .filter(way -> !way.isDeleted()).forEach(GetDataRunnable::cleanupArtifacts); - } - }); - } catch (InterruptedException e) { - Logging.debug(e); - Thread.currentThread().interrupt(); - } catch (InvocationTargetException e) { - Logging.debug(e); + if (SwingUtilities.isEventDispatchThread()) { + realCleanup(dataSet, bounds); + } else { + try { + SwingUtilities.invokeAndWait(() -> { + realCleanup(dataSet, bounds); + }); + } catch (InterruptedException e) { + Logging.debug(e); + Thread.currentThread().interrupt(); + } catch (InvocationTargetException e) { + Logging.debug(e); + } } } + private static synchronized void realCleanup(DataSet dataSet, Bounds bounds) { + removeRedundantSource(dataSet); + replaceTags(dataSet); + removeCommonTags(dataSet); + mergeNodes(dataSet); + cleanupDataSet(dataSet); + mergeWays(dataSet); + removeAlreadyAddedData(dataSet); + new MergeDuplicateWays(dataSet).executeCommand(); + (bounds == null ? dataSet.getWays() : dataSet.searchWays(bounds.toBBox())).parallelStream() + .filter(way -> !way.isDeleted()).forEach(GetDataRunnable::cleanupArtifacts); + } + /** * Remove redudant sources from objects (if source on way and source on node, * and node doesn't have any other tags, then node doesn't need the source)