diff --git a/logback-classic/pom.xml b/logback-classic/pom.xml index 65f5b7c85b..19cd6f6185 100755 --- a/logback-classic/pom.xml +++ b/logback-classic/pom.xml @@ -137,6 +137,11 @@ test + + org.jspecify + jspecify + 1.0.0 + diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java b/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java index be4cd2ecee..024c5b53fc 100755 --- a/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/spi/LoggingEvent.java @@ -25,6 +25,9 @@ import ch.qos.logback.core.CoreConstants; import ch.qos.logback.core.util.EnvUtil; import ch.qos.logback.core.util.StringUtil; + +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.slf4j.Marker; import org.slf4j.event.KeyValuePair; import org.slf4j.helpers.MessageFormatter; @@ -150,7 +153,7 @@ public LoggingEvent(String fqcn, Logger logger, Level level, String message, Thr } } - void initTmestampFields(Instant instant) { + void initTmestampFields(@NonNull Instant instant) { this.instant = instant; long epochSecond = instant.getEpochSecond(); this.nanoseconds = instant.getNano(); @@ -158,7 +161,7 @@ void initTmestampFields(Instant instant) { this.timeStamp = (epochSecond * 1000) + (milliseconds); } - private Throwable extractThrowableAnRearrangeArguments(Object[] argArray) { + private @Nullable Throwable extractThrowableAnRearrangeArguments(@Nullable Object[] argArray) { Throwable extractedThrowable = EventArgUtil.extractThrowable(argArray); if (EventArgUtil.successfulExtraction(extractedThrowable)) { this.argumentArray = EventArgUtil.trimmedCopy(argArray); @@ -166,30 +169,30 @@ private Throwable extractThrowableAnRearrangeArguments(Object[] argArray) { return extractedThrowable; } - public void setArgumentArray(Object[] argArray) { + public void setArgumentArray(@Nullable Object[] argArray) { if (this.argumentArray != null) { throw new IllegalStateException("argArray has been already set"); } this.argumentArray = argArray; } - public Object[] getArgumentArray() { + public @Nullable Object[] getArgumentArray() { return this.argumentArray; } - public void addKeyValuePair(KeyValuePair kvp) { + public void addKeyValuePair(@NonNull KeyValuePair kvp) { if (keyValuePairs == null) { keyValuePairs = new ArrayList<>(4); } keyValuePairs.add(kvp); } - public void setKeyValuePairs(List kvpList) { + public void setKeyValuePairs(@Nullable List kvpList) { this.keyValuePairs = kvpList; } @Override - public List getKeyValuePairs() { + public @Nullable List getKeyValuePairs() { return this.keyValuePairs; } @@ -205,7 +208,7 @@ public void setLoggerName(String loggerName) { this.loggerName = loggerName; } - public String getThreadName() { + public @NonNull String getThreadName() { if (threadName == null) { threadName = extractThreadName(Thread.currentThread()); } @@ -221,7 +224,7 @@ public String getThreadName() { * @return * @since 1.5.0 */ - private String extractThreadName(Thread aThread) { + private @NonNull String extractThreadName(@Nullable Thread aThread) { if (aThread == null) { return CoreConstants.NA; } @@ -243,7 +246,7 @@ private String extractThreadName(Thread aThread) { * @param aThread * @return Return the threadId if the thread is a virtual thread, return null otherwise. */ - Long getVirtualThreadId(Thread aThread) { + Long getVirtualThreadId(@NonNull Thread aThread) { if (EnvUtil.isJDK21OrHigher()) { try { Method isVirtualMethod = Thread.class.getMethod("isVirtual"); @@ -396,7 +399,7 @@ public void setLevel(Level level) { * Note that after serialization it is impossible to correctly extract caller information. *

*/ - public StackTraceElement[] getCallerData() { + public @NonNull StackTraceElement[] getCallerData() { if (callerDataArray == null) { callerDataArray = CallerData.extract(new Throwable(), fqnOfLoggerClass, loggerContext.getMaxCallerDataDepth(), loggerContext.getFrameworkPackages()); @@ -408,15 +411,15 @@ public boolean hasCallerData() { return (callerDataArray != null); } - public void setCallerData(StackTraceElement[] callerDataArray) { + public void setCallerData(@Nullable StackTraceElement[] callerDataArray) { this.callerDataArray = callerDataArray; } - public List getMarkerList() { + public @Nullable List getMarkerList() { return markerList; } - public void addMarker(Marker marker) { + public void addMarker(@Nullable Marker marker) { if (marker == null) { return; } @@ -450,7 +453,7 @@ public String getFormattedMessage() { return formattedMessage; } - public Map getMDCPropertyMap() { + public @NonNull Map getMDCPropertyMap() { // populate mdcPropertyMap if null if (mdcPropertyMap == null) { MDCAdapter mdcAdapter = loggerContext.getMDCAdapter(); @@ -472,7 +475,7 @@ public Map getMDCPropertyMap() { * @param map * @since 1.0.8 */ - public void setMDCPropertyMap(Map map) { + public void setMDCPropertyMap(@Nullable Map map) { if (mdcPropertyMap != null) { throw new IllegalStateException("The MDCPropertyMap has been already set for this event."); } @@ -485,7 +488,7 @@ public void setMDCPropertyMap(Map map) { * * @deprecated Replaced by [@link #getMDCPropertyMap} */ - public Map getMdc() { + public @NonNull Map getMdc() { return getMDCPropertyMap(); } diff --git a/logback-classic/src/main/java/module-info.java b/logback-classic/src/main/java/module-info.java index c0f962469e..878979f038 100644 --- a/logback-classic/src/main/java/module-info.java +++ b/logback-classic/src/main/java/module-info.java @@ -18,7 +18,8 @@ requires org.slf4j; requires ch.qos.logback.core; - provides org.slf4j.spi.SLF4JServiceProvider with ch.qos.logback.classic.spi.LogbackServiceProvider; + requires org.jspecify; + provides org.slf4j.spi.SLF4JServiceProvider with ch.qos.logback.classic.spi.LogbackServiceProvider; uses ch.qos.logback.classic.spi.Configurator; exports ch.qos.logback.classic;