diff --git a/build.gradle b/build.gradle index 2c41b67e..706b65c2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,9 +1,9 @@ import groovy.xml.XmlParser plugins { - id "com.diffplug.spotless" version "6.20.0" - id "com.github.ben-manes.versions" version "0.47.0" - id "com.github.spotbugs" version "5.0.14" + id "com.diffplug.spotless" version "6.25.0" + id "com.github.ben-manes.versions" version "0.51.0" + id "com.github.spotbugs" version "6.0.8" // id "de.aaschmid.cpd" version "3.3" id "eclipse" id "jacoco" @@ -12,7 +12,7 @@ plugins { id "maven-publish" id "net.ltgt.errorprone" version "3.1.0" id "org.openstreetmap.josm" version "0.8.2" - id "org.sonarqube" version "4.2.1.3168" + id "org.sonarqube" version "4.4.1.3373" id "pmd" } @@ -29,15 +29,15 @@ repositories { def versions = [ awaitility: "4.2.0", - equalsverifier: "3.15", - errorprone: "2.20.0", - findsecbugs: "1.12.0", + equalsverifier: "3.15.8", + errorprone: "2.26.0", + findsecbugs: "1.13.0", jacoco: "0.8.10", jmockit: "1.49.a", josm: properties.get("plugin.compile.version"), - junit: "5.9.1", + junit: "5.10.2", pmd: "6.20.0", - spotbugs: "4.7.3", + spotbugs: "4.8.3", wiremock: "2.35.0", ] diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index afba1092..033e24c4 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 88013794..4baf5a11 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,8 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=03ec176d388f2aa99defcadc3ac6adf8dd2bce5145a129659537c0874dea5ad1 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip +distributionSha256Sum=9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68d..fcb6fca1 100755 --- a/gradlew +++ b/gradlew @@ -85,9 +85,6 @@ done APP_BASE_NAME=${0##*/} APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +130,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -144,7 +144,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +152,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,6 +197,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in diff --git a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/actions/AddMapWithAILayerAction.java b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/actions/AddMapWithAILayerAction.java index 7bdb05c4..40c2c204 100644 --- a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/actions/AddMapWithAILayerAction.java +++ b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/actions/AddMapWithAILayerAction.java @@ -84,10 +84,17 @@ public AddMapWithAILayerAction(MapWithAIInfo info) { @Override public void actionPerformed(ActionEvent e) { - if (!isEnabled()) { - return; + if (isEnabled()) { + MainApplication.worker.execute(() -> realRun(this.info)); } + } + /** + * Run the download tasks. This should be run off of the EDT, see #23529. + * + * @param info The external data to download + */ + private static void realRun(MapWithAIInfo info) { MapWithAILayer layer = MapWithAIDataUtils.getLayer(false); final DataSet ds; final OsmData boundsSource; diff --git a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/MapWithAIDataUtils.java b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/MapWithAIDataUtils.java index fb1faa4c..37b4a990 100644 --- a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/MapWithAIDataUtils.java +++ b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/MapWithAIDataUtils.java @@ -18,6 +18,7 @@ import java.util.TreeSet; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import org.openstreetmap.josm.data.Bounds; @@ -213,37 +214,26 @@ private static void mergeDataSets(final DataSet original, final List realBounds) { - final var confirmation = new ConfirmBigDownload(realBounds); - GuiHelper.runInEDTAndWait(confirmation); - return confirmation.confirmed(); - } - - private static class ConfirmBigDownload implements Runnable { - Boolean bool; - final List realBounds; - - public ConfirmBigDownload(List realBounds) { - this.realBounds = realBounds; - } - - @Override - public void run() { - bool = ConditionalOptionPaneUtil.showConfirmationDialog(MapWithAIPlugin.NAME.concat(".alwaysdownload"), - null, + /** + * Confirm a large download + * + * @param realBounds The list of bounds that will be downloaded + * @return {@code true} if the user still wants to download data + */ + private static synchronized boolean confirmBigDownload(List realBounds) { + final var confirmation = new AtomicBoolean(false); + // This is not a separate class since we don't want to show multiple + // confirmation dialogs + // which is why this method is synchronized. + GuiHelper.runInEDTAndWait(() -> { + final var confirmed = ConditionalOptionPaneUtil.showConfirmationDialog( + MapWithAIPlugin.NAME.concat(".alwaysdownload"), null, tr("You are going to make {0} requests to the MapWithAI server. This may take some time.
Continue?", realBounds.size()), null, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, JOptionPane.YES_OPTION); - } - - /** - * Check if the user confirmed the download - * - * @return {@code true} if the user wants to continue - */ - public boolean confirmed() { - return bool; - } + confirmation.set(confirmed); + }); + return confirmation.get(); } /**