Ticket #17858: 17858.patch

File 17858.patch, 8.3 KB (added by taylor.smock, 3 years ago)

Warn on Java < 11 when not run under OpenWebStart, update URL to point at azul and pre-fill fields to decrease user confusion, Utils.getJavaLatestVersion uses Java 11 (WebStart) and Java 17 for latest Java versions

  • src/org/openstreetmap/josm/tools/PlatformHook.java

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/src/org/openstreetmap/josm/tools/PlatformHook.java b/src/org/openstreetmap/josm/tools/PlatformHook.java
    a b  
    300300            // #17831 WebStart may be launched with an expired JRE but then launching JOSM with up-to-date JRE
    301301            if (latestVersion == null || !latestVersion.equalsIgnoreCase(currentVersion)) {
    302302                callback.askUpdateJava(latestVersion != null ? latestVersion : "latest",
    303                         Config.getPref().get("java.update.url", "https://www.java.com/download"),
     303                        Config.getPref().get("java.update.url", getJavaUrl()),
    304304                        DateUtils.getDateFormat(DateFormat.MEDIUM).format(expiration), false);
    305305            }
    306306        }
    307307    }
    308308
     309    /**
     310     * Checks if we will soon not be supporting the running version of Java
     311     * @param callback Java expiration callback
     312     * @since xxx
     313     */
     314    default void warnSoonToBeUnsupportedJava(JavaExpirationCallback callback) {
     315        // Java 11 is our next minimum version, and OpenWebStart should be replacing Oracle WebStart
     316        // We'd go to 17, but some Linux distributions (Debian) default to Java 11.
     317        if (Utils.getJavaVersion() < 11 && !Utils.isRunningWebStart()) {
     318            String latestVersion = Utils.getJavaLatestVersion();
     319            String currentVersion = Utils.getSystemProperty("java.version");
     320            // #17831 WebStart may be launched with an expired JRE but then launching JOSM with up-to-date JRE
     321            if (latestVersion == null || !latestVersion.equalsIgnoreCase(currentVersion)) {
     322                callback.askUpdateJava(latestVersion != null ? latestVersion : "latest",
     323                        Config.getPref().get("java.update.url", getJavaUrl()),
     324                        null, Utils.getJavaVersion() < 17);
     325            }
     326        }
     327    }
     328
     329    /**
     330     * Get the Java download URL (really shouldn't be used outside of JOSM startup checks)
     331     * @return The download URL to use.
     332     * @since xxx
     333     */
     334    default String getJavaUrl() {
     335        StringBuilder defaultDownloadUrl = new StringBuilder("https://www.azul.com/downloads/?version=java-17-lts&package=jre-fx");
     336        if (PlatformManager.isPlatformWindows()) {
     337            defaultDownloadUrl.append("&os=windows");
     338        } else if (PlatformManager.isPlatformOsx()) {
     339            defaultDownloadUrl.append("&os=macos");
     340        } // else probably `linux`, but they should be using a package manager.
     341        // For available architectures, see
     342        // https://github.com/openjdk/jdk/blob/master/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java#L53
     343        String osArch = System.getProperty("os.arch");
     344        if (osArch != null) {
     345            // See https://learn.microsoft.com/en-us/windows/win32/winprog64/wow64-implementation-details#environment-variables
     346            // for PROCESSOR_ARCHITEW6432
     347            if ("x86_64".equals(osArch) || "amd64".equals(osArch)
     348                    || "AMD64".equalsIgnoreCase(System.getenv("PROCESSOR_ARCHITEW6432"))) {
     349                defaultDownloadUrl.append("&architecture=x86-64-bit");
     350            } else if ("aarch64".equals(osArch)) {
     351                defaultDownloadUrl.append("&architecture=arm-64-bit");
     352            } else if ("x86".equals(osArch)) {
     353                // Honestly, just about everyone should be on x86_64 at this point. But just in case someone
     354                // is running JOSM on a 10-year-old computer. They'd probably be better off running a RPi.
     355                defaultDownloadUrl.append("&architecture=x86-32-bit");
     356            } // else user will have to figure it out themselves.
     357        }
     358        defaultDownloadUrl.append("#download-openjdk"); // Scrolls to download section
     359        return defaultDownloadUrl.toString();
     360    }
     361
    309362    /**
    310363     * Checks if we run Oracle Web Start, proposes to user to migrate to OpenWebStart.
    311364     * @param callback WebStart migration callback
  • src/org/openstreetmap/josm/tools/PlatformHookOsx.java

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/src/org/openstreetmap/josm/tools/PlatformHookOsx.java b/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
    a b  
    9494            // We'll just ignore this for now. The user will still be able to close JOSM by closing all its windows.
    9595            Logging.warn("Failed to register with macOS: " + ex);
    9696        }
     97        warnSoonToBeUnsupportedJava(javaCallback);
    9798        checkExpiredJava(javaCallback);
    9899        checkWebStartMigration(webStartCallback);
    99100    }
  • src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java b/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
    a b  
    188188            return getPackageDetails("openjdk-10-jre", "java-10-openjdk");
    189189        } else if (home.contains("java-11-openjdk")) {
    190190            return getPackageDetails("openjdk-11-jre", "java-11-openjdk");
     191        } else if (home.contains("java-17-openjdk")) {
     192            return getPackageDetails("openjdk-17-jre", "java-17-openjdk");
    191193        } else if (home.contains("java-openjdk")) {
    192194            return getPackageDetails("java-openjdk");
    193195        } else if (home.contains("icedtea")) {
  • src/org/openstreetmap/josm/tools/PlatformHookWindows.java

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
    a b  
    154154
    155155    @Override
    156156    public void startupHook(JavaExpirationCallback javaCallback, WebStartMigrationCallback webStartCallback) {
     157        warnSoonToBeUnsupportedJava(javaCallback);
    157158        checkExpiredJava(javaCallback);
    158159        checkWebStartMigration(webStartCallback);
    159160    }
  • src/org/openstreetmap/josm/tools/Utils.java

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/src/org/openstreetmap/josm/tools/Utils.java b/src/org/openstreetmap/josm/tools/Utils.java
    a b  
    18051805                            "java.baseline.version.url",
    18061806                            Config.getUrls().getJOSMWebsite() + "/remote/oracle-java-update-baseline.version")))
    18071807                    .connect().fetchContent().split("\n", -1);
    1808             if (getJavaVersion() <= 8) {
     1808            if (getJavaVersion() <= 11 && isRunningWebStart()) { // OpenWebStart currently only has Java 11
    18091809                for (String version : versions) {
    1810                     if (version.startsWith("1.8")) {
     1810                    if (version.startsWith("11")) {
     1811                        return version;
     1812                    }
     1813                }
     1814            } else if (getJavaVersion() <= 17) {
     1815                for (String version : versions) {
     1816                    if (version.startsWith("17")) { // Use current Java LTS
    18111817                        return version;
    18121818                    }
    18131819                }