Eliminate sun.awt.OSInfo?

Philip Race philip.race at oracle.com
Mon Mar 24 22:25:40 UTC 2025


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) {
>



More information about the client-libs-dev mailing list