Eliminate sun.awt.OSInfo?
Philip Race
philip.race at oracle.com
Tue Mar 25 00:05:45 UTC 2025
On 3/24/25 3:43 PM, Daniel Gredler wrote:
> Interesting, what are the advantages of removing all of the "exports"?
> Are they just code smells?
Bad code smells.
>
> 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?
I can't see that being a public API. Internals that we use today is
stuff that was
not considered suitable for public API, or it already would be.
>
> 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?
Keeping the blast radius to no more than it is today is the first thing.
I would prefer re-implementation over the export, but it hasn't bubbled up.
And I can imagine that even today we might want to know more
specifically which windows version.
Windows 10 is a range of "versions" and Windows 11 is really just more
Windows 10 versions. And we'll see about Windows 12.
-phil.
>
> Take care,
>
> Daniel
>
>
>
> On Mon, Mar 24, 2025 at 11:25 PM Philip Race <philip.race at oracle.com>
> wrote:
>
> I am not a huge fan of sun.awt.OSInfo and I know a lot of uses are
> out-dated,
> and probably could be removed.
> Whether that ends up in not needing OSInfo is another a question.
> But I would *not* want to migrate to a jdk.internal API.
> I have a goal of someday having zero cases of java.base "exports
> FOO to
> java.desktop"
> Its not a top priority to complete, but at the same time I don't
> want to
> needlessly go in the opposite direction.
>
>
> -phil.
>
> On 3/24/25 3:18 PM, Daniel Gredler wrote:
> > Hi all,
> >
> > The sun.awt.OSInfo class seems to replicate the functionality in
> > jdk.internal.util.OperatingSystem, with one additional capability:
> > distinguishing between different versions of Windows. However, the
> > Windows versions included are Windows 95 through Windows 7, which
> > hasn't been an officially-supported platform for the JDK since
> Java 7.
> > There are Windows version checks which rely on OSInfo sprinkled
> > throughout the java.desktop module, but all of them are checking
> for
> > Windows versions which are not even supported anymore, as far as
> I can
> > tell. Would a PR which removes OSInfo be accepted, or is there a
> > reason to keep it around that I'm missing?
> >
> > Thanks!
> >
> > Daniel
> >
> > (Somewhat related: https://bugs.openjdk.org/browse/JDK-8305777)
> >
> > ---
> >
> > $ grep -r --include "*.java" OSInfo src/java.desktop/
> >
> src/java.desktop/windows/classes/sun/awt/windows/WTaskbarPeer.java:import
>
> > sun.awt.OSInfo;
> > src/java.desktop/windows/classes/sun/awt/windows/WTaskbarPeer.java:
> > supported = OSInfo.getWindowsVersion()
> > src/java.desktop/windows/classes/sun/awt/windows/WTaskbarPeer.java:
> > .compareTo(OSInfo.WINDOWS_7) >= 0
> >
> src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java:import
>
> > sun.awt.OSInfo;
> >
> src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java:
>
> > if (recentFolder != null &&
> > OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_2000) >= 0) {
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:import
>
> > sun.awt.OSInfo;
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > return OSInfo.getOSType() == OSInfo.OSType.WINDOWS;
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > if
> (OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_95) <= 0) {
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > isClassicWindows =
> > OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_95) <= 0;
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > (OSInfo.getOSType() == OSInfo.OSType.WINDOWS &&
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP) >= 0)) {
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > return OSInfo.getOSType() == OSInfo.OSType.WINDOWS
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > &&
> > OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_VISTA) >= 0;
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > return OSInfo.getOSType() == OSInfo.OSType.WINDOWS
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > &&
> > OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_7) >= 0;
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS &&
> >
> src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java:
>
> > OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP) < 0) {
> >
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:import
>
> > sun.awt.OSInfo;
> >
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
>
> > return OSInfo.getOSType() == OSInfo.OSType.MACOSX;
> >
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
>
> > return OSInfo.getOSType() == OSInfo.OSType.LINUX;
> >
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
>
> > return (OSInfo.getOSType() == OSInfo.OSType.LINUX ||
> >
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
>
> > OSInfo.getOSType() == OSInfo.OSType.MACOSX);
> >
> src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java:
>
> > return OSInfo.getOSType() == OSInfo.OSType.AIX;
> >
> src/java.desktop/unix/classes/sun/awt/X11/XScrollbarPeer.java:import
> > sun.awt.OSInfo;
> > src/java.desktop/unix/classes/sun/awt/X11/XScrollbarPeer.java:
> > if (OSInfo.getOSType() == OSInfo.OSType.LINUX) {
> >
> src/java.desktop/unix/classes/sun/awt/X11/MotifColorUtilities.java:import
>
> > sun.awt.OSInfo;
> > src/java.desktop/unix/classes/sun/awt/X11/MotifColorUtilities.java:
> > int numOfColor = OSInfo.getOSType() == OSInfo.OSType.AIX ? 8 : 4;
> > src/java.desktop/unix/classes/sun/awt/X11/MotifColorUtilities.java:
> > if (OSInfo.getOSType() == OSInfo.OSType.LINUX) { // Load motif
> > default colors on Linux.
> > src/java.desktop/share/classes/javax/swing/PopupFactory.java:import
> > sun.awt.OSInfo;
> > src/java.desktop/share/classes/javax/swing/PopupFactory.java:
> > if ((OSInfo.getOSType() == OSInfo.OSType.MACOSX) && (owner !=
> null) &&
> >
> src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java:import
>
> > sun.awt.OSInfo;
> >
> src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java:
>
> > boolean isWindows = OSInfo.getOSType() ==
> > OSInfo.OSType.WINDOWS;
> >
> src/java.desktop/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java:import
>
> > sun.awt.OSInfo;
> >
> src/java.desktop/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java:
>
> > if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {
> > src/java.desktop/share/classes/javax/swing/UIManager.java:import
> > sun.awt.OSInfo;
> > src/java.desktop/share/classes/javax/swing/UIManager.java:
> > OSInfo.OSType osType = OSInfo.getOSType();
> > src/java.desktop/share/classes/javax/swing/UIManager.java: if
> > (osType == OSInfo.OSType.WINDOWS) {
> > src/java.desktop/share/classes/javax/swing/UIManager.java: else if
> > (osType == OSInfo.OSType.MACOSX) {
> > src/java.desktop/share/classes/javax/swing/UIManager.java:
> > OSInfo.OSType osType = OSInfo.getOSType();
> > src/java.desktop/share/classes/javax/swing/UIManager.java: if
> > (osType == OSInfo.OSType.WINDOWS) {
> > src/java.desktop/share/classes/javax/swing/UIManager.java: if
> > (osType == OSInfo.OSType.MACOSX) {
> > src/java.desktop/share/classes/javax/swing/UIManager.java: if
> > (OSInfo.getOSType() == OSInfo.OSType.MACOSX) {
> > src/java.desktop/share/classes/sun/awt/OSInfo.java:import static
> > sun.awt.OSInfo.OSType.*;
> > src/java.desktop/share/classes/sun/awt/OSInfo.java:public class
> OSInfo {
> > src/java.desktop/share/classes/sun/awt/OSInfo.java: private static
> > final Map<String, WindowsVersion> windowsVersionMap = new
> > HashMap<String, OSInfo.WindowsVersion>();
> > src/java.desktop/share/classes/sun/awt/OSInfo.java: private
> OSInfo() {
> > src/java.desktop/share/classes/sun/awt/FontConfiguration.java:
> > if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {
> >
> src/java.desktop/share/classes/sun/awt/shell/ShellFolder.java:import
> > sun.awt.OSInfo;
> > src/java.desktop/share/classes/sun/awt/shell/ShellFolder.java:
> > if (f.equals(canonical) || OSInfo.getOSType() ==
> OSInfo.OSType.WINDOWS) {
> > src/java.desktop/share/classes/sun/print/PSPrinterJob.java:import
> > sun.awt.OSInfo;
> > src/java.desktop/share/classes/sun/print/PSPrinterJob.java:
> isMac
> > = OSInfo.getOSType() == OSInfo.OSType.MACOSX;
> > src/java.desktop/share/classes/sun/print/PSPrinterJob.java: if
> > (OSInfo.getOSType() == OSInfo.OSType.LINUX ||
> > src/java.desktop/share/classes/sun/print/PSPrinterJob.java:
> > OSInfo.getOSType() == OSInfo.OSType.MACOSX) {
> > src/java.desktop/share/classes/sun/print/ServiceDialog.java:import
> > sun.awt.OSInfo;
> > src/java.desktop/share/classes/sun/print/ServiceDialog.java:
> > if (OSInfo.getOSType() != OSInfo.OSType.WINDOWS) {
> >
> src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java:import
>
> > sun.awt.OSInfo;
> >
> src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java:
>
> > if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) {
> > src/java.desktop/share/classes/sun/font/FontUtilities.java:import
> > sun.awt.OSInfo;
> > src/java.desktop/share/classes/sun/font/FontUtilities.java:
> > isLinux = OSInfo.getOSType() == OSInfo.OSType.LINUX;
> > src/java.desktop/share/classes/sun/font/FontUtilities.java:
> > isMacOSX = OSInfo.getOSType() == OSInfo.OSType.MACOSX;
> > src/java.desktop/share/classes/sun/font/FontUtilities.java:
> > isWindows = OSInfo.getOSType() == OSInfo.OSType.WINDOWS;
> >
> src/java.desktop/share/classes/sun/swing/WindowsPlacesBar.java:import
> > sun.awt.OSInfo;
> > src/java.desktop/share/classes/sun/swing/WindowsPlacesBar.java:
> > boolean isXPPlatform = (OSInfo.getOSType() ==
> OSInfo.OSType.WINDOWS &&
> > src/java.desktop/share/classes/sun/swing/WindowsPlacesBar.java:
> > OSInfo.getWindowsVersion().compareTo(OSInfo.WINDOWS_XP) >= 0);
> >
> src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java:import
>
> > sun.awt.OSInfo;
> >
> src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java:
>
> > if (OSInfo.getOSType() == OSInfo.OSType.LINUX) {
> >
> src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java:
>
> > if (OSInfo.getOSType() ==
> OSInfo.OSType.WINDOWS) {
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/client-libs-dev/attachments/20250324/e5c38eae/attachment-0001.htm>
More information about the client-libs-dev
mailing list