From 4d02e6b481d7ad00d1287805704d1816798ef331 Mon Sep 17 00:00:00 2001 From: mk868 Date: Mon, 20 Jan 2025 03:08:46 +0100 Subject: [PATCH] [java] Add nullness for logging (#15108) Co-authored-by: Viet Nguyen Duc --- .../org/openqa/selenium/logging/LogEntries.java | 2 ++ .../src/org/openqa/selenium/logging/LogEntry.java | 2 ++ .../openqa/selenium/logging/LogLevelMapping.java | 15 +++++++++++---- .../org/openqa/selenium/logging/SessionLogs.java | 5 ++++- .../org/openqa/selenium/logging/LoggingTest.java | 1 + 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/java/src/org/openqa/selenium/logging/LogEntries.java b/java/src/org/openqa/selenium/logging/LogEntries.java index 10b7cd798c92d..4d3e466c5bc03 100644 --- a/java/src/org/openqa/selenium/logging/LogEntries.java +++ b/java/src/org/openqa/selenium/logging/LogEntries.java @@ -23,6 +23,7 @@ import java.util.Iterator; import java.util.List; import java.util.stream.StreamSupport; +import org.jspecify.annotations.NullMarked; import org.openqa.selenium.Beta; /** @@ -30,6 +31,7 @@ * levels. */ @Beta +@NullMarked public class LogEntries implements Iterable { private final List entries; diff --git a/java/src/org/openqa/selenium/logging/LogEntry.java b/java/src/org/openqa/selenium/logging/LogEntry.java index 3b5e507dbe922..1daa6ec49b388 100644 --- a/java/src/org/openqa/selenium/logging/LogEntry.java +++ b/java/src/org/openqa/selenium/logging/LogEntry.java @@ -22,8 +22,10 @@ import java.util.HashMap; import java.util.Map; import java.util.logging.Level; +import org.jspecify.annotations.NullMarked; /** Represents a single log statement. */ +@NullMarked public class LogEntry { private final Level level; diff --git a/java/src/org/openqa/selenium/logging/LogLevelMapping.java b/java/src/org/openqa/selenium/logging/LogLevelMapping.java index 7d2291d9e9e6e..29ca82be310d6 100644 --- a/java/src/org/openqa/selenium/logging/LogLevelMapping.java +++ b/java/src/org/openqa/selenium/logging/LogLevelMapping.java @@ -20,13 +20,20 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.logging.Level; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; +@NullMarked public class LogLevelMapping { /** WebDriver log level DEBUG which is mapped to Level.FINE. */ private static final String DEBUG = "DEBUG"; + // Default the log level to info. + private static final Level DEFAULT_LEVEL = Level.INFO; + private static final Map levelMap; static { @@ -70,15 +77,15 @@ public static String getName(Level level) { return normalized == Level.FINE ? DEBUG : normalized.getName(); } - public static Level toLevel(String logLevelName) { + public static Level toLevel(@Nullable String logLevelName) { if (logLevelName == null || logLevelName.isEmpty()) { - // Default the log level to info. - return Level.INFO; + return DEFAULT_LEVEL; } if (logLevelName.equals(DEBUG)) { return Level.FINE; } - return levelMap.get(Level.parse(logLevelName).intValue()); + return Optional.ofNullable(levelMap.get(Level.parse(logLevelName).intValue())) + .orElse(DEFAULT_LEVEL); } } diff --git a/java/src/org/openqa/selenium/logging/SessionLogs.java b/java/src/org/openqa/selenium/logging/SessionLogs.java index 736b4e7584220..57b7a261dac3e 100644 --- a/java/src/org/openqa/selenium/logging/SessionLogs.java +++ b/java/src/org/openqa/selenium/logging/SessionLogs.java @@ -24,10 +24,13 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.jspecify.annotations.NullMarked; import org.openqa.selenium.Beta; +import org.openqa.selenium.internal.Require; /** Contains the logs for a session divided by supported log types. */ @Beta +@NullMarked public class SessionLogs { private final Map logTypeToEntriesMap; @@ -66,7 +69,7 @@ public static SessionLogs fromJSON(Map rawSessionLogs) { logEntries.add( new LogEntry( LogLevelMapping.toLevel(String.valueOf(rawEntry.get("level"))), - ((Number) rawEntry.get("timestamp")).longValue(), + Require.nonNull("timestamp", (Number) rawEntry.get("timestamp")).longValue(), String.valueOf(rawEntry.get("message")))); } sessionLogs.addLog(logType, new LogEntries(logEntries)); diff --git a/java/test/org/openqa/selenium/logging/LoggingTest.java b/java/test/org/openqa/selenium/logging/LoggingTest.java index 82100f240b1c9..113727f4847fe 100644 --- a/java/test/org/openqa/selenium/logging/LoggingTest.java +++ b/java/test/org/openqa/selenium/logging/LoggingTest.java @@ -40,6 +40,7 @@ void testLogLevelConversions() { assertThat(toLevel("WARNING")).isEqualTo(WARNING); assertThat(toLevel("SEVERE")).isEqualTo(SEVERE); assertThat(toLevel("OFF")).isEqualTo(OFF); + assertThat(toLevel(null)).isEqualTo(INFO); } @Test