Eliminate sun.awt.OSInfo?
Daniel Gredler
djgredler at gmail.com
Mon Mar 24 22:43:56 UTC 2025
Interesting, what are the advantages of removing all of the "exports"? Are
they just 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?
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?
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/f4ada483/attachment-0001.htm>
More information about the client-libs-dev
mailing list