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