<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<br>
<br>
<div class="moz-cite-prefix">On 3/24/25 3:43 PM, Daniel Gredler
wrote:<br>
</div>
<blockquote type="cite" cite="mid:CAPA+ug76CTCg7KbXjhPxP99D3F5ei253P3HgXV15qZ+=_OmNRw@mail.gmail.com">
<div dir="ltr">
<div>Interesting, what are the advantages of removing all of the
"exports"? Are they just code smells?</div>
</div>
</blockquote>
<br>
Bad code smells.<br>
<br>
<blockquote type="cite" cite="mid:CAPA+ug76CTCg7KbXjhPxP99D3F5ei253P3HgXV15qZ+=_OmNRw@mail.gmail.com">
<div dir="ltr">
<div><br>
</div>
<div>In an ideal world where there were none of these "exports",
java.desktop would need to reimplement this OS detection
functionality, no? Or would something like
jdk.internal.util.OperatingSystem be promoted to a public API?</div>
</div>
</blockquote>
<br>
I can't see that being a public API. Internals that we use today is
stuff that was<br>
not considered suitable for public API, or it already would be.<br>
<br>
<blockquote type="cite" cite="mid:CAPA+ug76CTCg7KbXjhPxP99D3F5ei253P3HgXV15qZ+=_OmNRw@mail.gmail.com">
<div dir="ltr">
<div><br>
</div>
<div>More immediately, in your opinion is it worth keeping
OSInfo around as a 10-line wrapper around
jdk.internal.util.OperatingSystem in order to limit the "blast
radius" of the dependency? Or does it not matter whether 1
class uses it or 20 classes use it, once the dependency has
been created?</div>
</div>
</blockquote>
<br>
Keeping the blast radius to no more than it is today is the first
thing.<br>
I would prefer re-implementation over the export, but it hasn't
bubbled up.<br>
And I can imagine that even today we might want to know more
specifically which windows version.<br>
Windows 10 is a range of "versions" and Windows 11 is really just
more<br>
Windows 10 versions. And we'll see about Windows 12.<br>
<br>
-phil.<br>
<br>
<blockquote type="cite" cite="mid:CAPA+ug76CTCg7KbXjhPxP99D3F5ei253P3HgXV15qZ+=_OmNRw@mail.gmail.com">
<div dir="ltr">
<div><br>
</div>
<div>Take care,</div>
<div><br>
</div>
<div>Daniel</div>
<div><br>
</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote gmail_quote_container">
<div dir="ltr" class="gmail_attr">On Mon, Mar 24, 2025 at
11:25 PM Philip Race <<a href="mailto:philip.race@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">philip.race@oracle.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I
am not a huge fan of sun.awt.OSInfo and I know a lot of uses
are <br>
out-dated,<br>
and probably could be removed.<br>
Whether that ends up in not needing OSInfo is another a
question.<br>
But I would *not* want to migrate to a jdk.internal API.<br>
I have a goal of someday having zero cases of java.base
"exports FOO to <br>
java.desktop"<br>
Its not a top priority to complete, but at the same time I
don't want to <br>
needlessly go in the opposite direction.<br>
<br>
<br>
-phil.<br>
<br>
On 3/24/25 3:18 PM, Daniel Gredler wrote:<br>
> Hi all,<br>
><br>
> The sun.awt.OSInfo class seems to replicate the
functionality in <br>
> jdk.internal.util.OperatingSystem, with one additional
capability: <br>
> distinguishing between different versions of Windows.
However, the <br>
> Windows versions included are Windows 95 through Windows
7, which <br>
> hasn't been an officially-supported platform for the JDK
since Java 7. <br>
> There are Windows version checks which rely on OSInfo
sprinkled <br>
> throughout the java.desktop module, but all of them are
checking for <br>
> Windows versions which are not even supported anymore, as
far as I can <br>
> tell. Would a PR which removes OSInfo be accepted, or is
there a <br>
> reason to keep it around that I'm missing?<br>
><br>
> Thanks!<br>
><br>
> Daniel<br>
><br>
> (Somewhat related: <a href="https://bugs.openjdk.org/browse/JDK-8305777" rel="noreferrer" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">https://bugs.openjdk.org/browse/JDK-8305777</a>)<br>
><br>
> ---<br>
><br>
> $ grep -r --include "*.java" OSInfo src/java.desktop/<br>
>
src/java.desktop/windows/classes/sun/awt/windows/WTaskbarPeer.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/windows/classes/sun/awt/windows/WTaskbarPeer.java:
<br>
> supported = OSInfo.getWindowsVersion()<br>
>
src/java.desktop/windows/classes/sun/awt/windows/WTaskbarPeer.java:
<br>
> .compareTo(OSInfo.WINDOWS_7) >= 0<br>
>
src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java:
<br>
> if (recentFolder != null && <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_2000)
>= 0) {<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> return OSInfo.getOSType() ==
OSInfo.OSType.WINDOWS;<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> if
(OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_95) <=
0) {<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> isClassicWindows = <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_95)
<= 0;<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> (OSInfo.getOSType() ==
OSInfo.OSType.WINDOWS &&<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP)
>= 0)) {<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> return OSInfo.getOSType() == OSInfo.OSType.WINDOWS<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> && <br>
>
OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_VISTA)
>= 0;<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> return OSInfo.getOSType() == OSInfo.OSType.WINDOWS<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> && <br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_7)
>= 0;<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> if (OSInfo.getOSType() ==
OSInfo.OSType.WINDOWS &&<br>
>
src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
<br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP)
< 0) {<br>
>
src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
<br>
> return OSInfo.getOSType() == OSInfo.OSType.MACOSX;<br>
>
src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
<br>
> return OSInfo.getOSType() == OSInfo.OSType.LINUX;<br>
>
src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
<br>
> return (OSInfo.getOSType() == OSInfo.OSType.LINUX
||<br>
>
src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
<br>
> OSInfo.getOSType() ==
OSInfo.OSType.MACOSX);<br>
>
src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
<br>
> return OSInfo.getOSType() == OSInfo.OSType.AIX;<br>
>
src/java.desktop/unix/classes/sun/awt/X11/XScrollbarPeer.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/unix/classes/sun/awt/X11/XScrollbarPeer.java:
<br>
> if (OSInfo.getOSType() == OSInfo.OSType.LINUX) {<br>
>
src/java.desktop/unix/classes/sun/awt/X11/MotifColorUtilities.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/unix/classes/sun/awt/X11/MotifColorUtilities.java:
<br>
> int numOfColor = OSInfo.getOSType() == OSInfo.OSType.AIX
? 8 : 4;<br>
>
src/java.desktop/unix/classes/sun/awt/X11/MotifColorUtilities.java:
<br>
> if (OSInfo.getOSType() == OSInfo.OSType.LINUX) { // Load
motif <br>
> default colors on Linux.<br>
>
src/java.desktop/share/classes/javax/swing/PopupFactory.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/javax/swing/PopupFactory.java:
<br>
> if ((OSInfo.getOSType() == OSInfo.OSType.MACOSX)
&& (owner != null) &&<br>
>
src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java:
<br>
> boolean isWindows = OSInfo.getOSType() == <br>
> OSInfo.OSType.WINDOWS;<br>
>
src/java.desktop/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java:
<br>
> if (OSInfo.getOSType() ==
OSInfo.OSType.WINDOWS) {<br>
>
src/java.desktop/share/classes/javax/swing/UIManager.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/javax/swing/UIManager.java: <br>
> OSInfo.OSType osType = OSInfo.getOSType();<br>
>
src/java.desktop/share/classes/javax/swing/UIManager.java:
if <br>
> (osType == OSInfo.OSType.WINDOWS) {<br>
>
src/java.desktop/share/classes/javax/swing/UIManager.java:
else if <br>
> (osType == OSInfo.OSType.MACOSX) {<br>
>
src/java.desktop/share/classes/javax/swing/UIManager.java: <br>
> OSInfo.OSType osType = OSInfo.getOSType();<br>
>
src/java.desktop/share/classes/javax/swing/UIManager.java:
if <br>
> (osType == OSInfo.OSType.WINDOWS) {<br>
>
src/java.desktop/share/classes/javax/swing/UIManager.java:
if <br>
> (osType == OSInfo.OSType.MACOSX) {<br>
>
src/java.desktop/share/classes/javax/swing/UIManager.java:
if <br>
> (OSInfo.getOSType() == OSInfo.OSType.MACOSX) {<br>
> src/java.desktop/share/classes/sun/awt/OSInfo.java:import
static <br>
> sun.awt.OSInfo.OSType.*;<br>
> src/java.desktop/share/classes/sun/awt/OSInfo.java:public
class OSInfo {<br>
> src/java.desktop/share/classes/sun/awt/OSInfo.java:
private static <br>
> final Map<String, WindowsVersion> windowsVersionMap
= new <br>
> HashMap<String, OSInfo.WindowsVersion>();<br>
> src/java.desktop/share/classes/sun/awt/OSInfo.java:
private OSInfo() {<br>
>
src/java.desktop/share/classes/sun/awt/FontConfiguration.java:
<br>
> if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {<br>
>
src/java.desktop/share/classes/sun/awt/shell/ShellFolder.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/sun/awt/shell/ShellFolder.java:
<br>
> if (f.equals(canonical) || OSInfo.getOSType() ==
OSInfo.OSType.WINDOWS) {<br>
>
src/java.desktop/share/classes/sun/print/PSPrinterJob.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/sun/print/PSPrinterJob.java:
isMac <br>
> = OSInfo.getOSType() == OSInfo.OSType.MACOSX;<br>
>
src/java.desktop/share/classes/sun/print/PSPrinterJob.java:
if <br>
> (OSInfo.getOSType() == OSInfo.OSType.LINUX ||<br>
>
src/java.desktop/share/classes/sun/print/PSPrinterJob.java:
<br>
> OSInfo.getOSType() == OSInfo.OSType.MACOSX) {<br>
>
src/java.desktop/share/classes/sun/print/ServiceDialog.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/sun/print/ServiceDialog.java:
<br>
> if (OSInfo.getOSType() != OSInfo.OSType.WINDOWS) {<br>
>
src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java:
<br>
> if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {<br>
>
src/java.desktop/share/classes/sun/font/FontUtilities.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/sun/font/FontUtilities.java:
<br>
> isLinux = OSInfo.getOSType() == OSInfo.OSType.LINUX;<br>
>
src/java.desktop/share/classes/sun/font/FontUtilities.java:
<br>
> isMacOSX = OSInfo.getOSType() == OSInfo.OSType.MACOSX;<br>
>
src/java.desktop/share/classes/sun/font/FontUtilities.java:
<br>
> isWindows = OSInfo.getOSType() == OSInfo.OSType.WINDOWS;<br>
>
src/java.desktop/share/classes/sun/swing/WindowsPlacesBar.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/sun/swing/WindowsPlacesBar.java:
<br>
> boolean isXPPlatform = (OSInfo.getOSType() ==
OSInfo.OSType.WINDOWS &&<br>
>
src/java.desktop/share/classes/sun/swing/WindowsPlacesBar.java:
<br>
> OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP)
>= 0);<br>
>
src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java:import
<br>
> sun.awt.OSInfo;<br>
>
src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java:
<br>
> if (OSInfo.getOSType() ==
OSInfo.OSType.LINUX) {<br>
>
src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java:
<br>
> if (OSInfo.getOSType() ==
OSInfo.OSType.WINDOWS) {<br>
><br>
<br>
</blockquote>
</div>
</blockquote>
<br>
</body>
</html>