From 7cbd0a7801262d7c6ca58a8137ef0b85b0de2f60 Mon Sep 17 00:00:00 2001 From: Maciej Kucharczyk Date: Tue, 14 Oct 2025 20:18:02 +0200 Subject: [PATCH] [java] JSpecify annotations for `org.openqa.selenium.net` --- .../net/LinuxEphemeralPortRangeDetector.java | 2 ++ .../org/openqa/selenium/net/NetworkUtils.java | 29 ++++++++++++------- .../org/openqa/selenium/net/PortProber.java | 2 ++ .../org/openqa/selenium/net/UrlChecker.java | 2 ++ java/src/org/openqa/selenium/net/Urls.java | 2 ++ 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/java/src/org/openqa/selenium/net/LinuxEphemeralPortRangeDetector.java b/java/src/org/openqa/selenium/net/LinuxEphemeralPortRangeDetector.java index 0a1354ae437e3..4d2f840ded4a9 100644 --- a/java/src/org/openqa/selenium/net/LinuxEphemeralPortRangeDetector.java +++ b/java/src/org/openqa/selenium/net/LinuxEphemeralPortRangeDetector.java @@ -25,7 +25,9 @@ import java.io.UncheckedIOException; import java.nio.charset.Charset; import java.nio.file.Files; +import org.jspecify.annotations.NullMarked; +@NullMarked public class LinuxEphemeralPortRangeDetector implements EphemeralPortRangeDetector { private final int firstEphemeralPort; diff --git a/java/src/org/openqa/selenium/net/NetworkUtils.java b/java/src/org/openqa/selenium/net/NetworkUtils.java index 397c086f807d3..299cd635ab9dc 100644 --- a/java/src/org/openqa/selenium/net/NetworkUtils.java +++ b/java/src/org/openqa/selenium/net/NetworkUtils.java @@ -28,17 +28,21 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriverException; +import org.openqa.selenium.internal.Require; +@NullMarked public class NetworkUtils { - private static InetAddress cachedIp4NonLoopbackAddressOfThisMachine; - private static String cachedIp4NonLoopbackAddressHostName; + private static @Nullable InetAddress cachedIp4NonLoopbackAddressOfThisMachine; + private static @Nullable String cachedIp4NonLoopbackAddressHostName; private final NetworkInterfaceProvider networkInterfaceProvider; - private volatile String hostname; - private volatile String address; + private volatile @Nullable String hostname; + private volatile @Nullable String address; NetworkUtils(NetworkInterfaceProvider networkInterfaceProvider) { this.networkInterfaceProvider = networkInterfaceProvider; @@ -56,13 +60,13 @@ public NetworkUtils() { public String getHostname() { determineHostnameAndAddress(); - return hostname; + return Require.nonNull("Hostname", hostname); } public String getHostAddress() { determineHostnameAndAddress(); - return address; + return Require.nonNull("Address", address); } public String getPrivateLocalAddress() { @@ -81,7 +85,7 @@ public String getPrivateLocalAddress() { * * @return A String representing the host name or non-loopback IP4 address of this machine. */ - public String getNonLoopbackAddressOfThisMachine() { + public @Nullable String getNonLoopbackAddressOfThisMachine() { InetAddress ip4NonLoopbackAddressOfThisMachine = getIp4NonLoopbackAddressOfThisMachine(); if (!Objects.equals( cachedIp4NonLoopbackAddressOfThisMachine, ip4NonLoopbackAddressOfThisMachine)) { @@ -113,10 +117,13 @@ public InetAddress getIp4NonLoopbackAddressOfThisMachine() { * * @return The address part og such an address */ - public String obtainLoopbackIp4Address() { + public @Nullable String obtainLoopbackIp4Address() { final NetworkInterface networkInterface = getLoopBackAndIp4Only(); if (networkInterface != null) { - return networkInterface.getIp4LoopbackOnly().getHostName(); + InetAddress loopback = networkInterface.getIp4LoopbackOnly(); + if (loopback != null) { + return loopback.getHostName(); + } } final String ipOfIp4LoopBack = getIpOfLoopBackIp4(); @@ -156,7 +163,7 @@ private InetAddress grabFirstNetworkAddress() { return firstAddress; } - public String getIpOfLoopBackIp4() { + public @Nullable String getIpOfLoopBackIp4() { for (NetworkInterface iface : networkInterfaceProvider.getNetworkInterfaces()) { final InetAddress netAddress = iface.getIp4LoopbackOnly(); if (netAddress != null) { @@ -166,7 +173,7 @@ public String getIpOfLoopBackIp4() { return null; } - private NetworkInterface getLoopBackAndIp4Only() { + private @Nullable NetworkInterface getLoopBackAndIp4Only() { for (NetworkInterface iface : networkInterfaceProvider.getNetworkInterfaces()) { if (iface.isIp4AddressBindingOnly() && iface.isLoopBack()) { return iface; diff --git a/java/src/org/openqa/selenium/net/PortProber.java b/java/src/org/openqa/selenium/net/PortProber.java index e132157a33f62..2f70b6011ccd7 100644 --- a/java/src/org/openqa/selenium/net/PortProber.java +++ b/java/src/org/openqa/selenium/net/PortProber.java @@ -26,8 +26,10 @@ import java.net.SocketTimeoutException; import java.util.Random; import java.util.concurrent.TimeUnit; +import org.jspecify.annotations.NullMarked; import org.openqa.selenium.Platform; +@NullMarked public class PortProber { public static final int HIGHEST_PORT = 65535; diff --git a/java/src/org/openqa/selenium/net/UrlChecker.java b/java/src/org/openqa/selenium/net/UrlChecker.java index 0d282ad735f10..6838a04738d99 100644 --- a/java/src/org/openqa/selenium/net/UrlChecker.java +++ b/java/src/org/openqa/selenium/net/UrlChecker.java @@ -31,8 +31,10 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Logger; +import org.jspecify.annotations.NullMarked; /** Polls a URL until a HTTP 200 response is received. */ +@NullMarked public class UrlChecker { private static final Logger LOG = Logger.getLogger(UrlChecker.class.getName()); diff --git a/java/src/org/openqa/selenium/net/Urls.java b/java/src/org/openqa/selenium/net/Urls.java index 4ee4fe959843c..3efde2635ea0b 100644 --- a/java/src/org/openqa/selenium/net/Urls.java +++ b/java/src/org/openqa/selenium/net/Urls.java @@ -25,8 +25,10 @@ import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import org.jspecify.annotations.NullMarked; import org.openqa.selenium.internal.Require; +@NullMarked public class Urls { private Urls() {