This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch 2.x-java-17
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 4c2c17e89e96401590b9ace8dbce9dc354413e1b
Author: Volkan Yazıcı <[email protected]>
AuthorDate: Thu Nov 30 14:07:24 2023 +0100

    Remove `final` from `CLOCK` of `AsyncLogger` and `Log4jLogEvent`
    
    This is necessary for Java 12+ compatibility.
---
 .../java/org/apache/logging/log4j/core/util/ClockFactoryTest.java    | 5 -----
 .../main/java/org/apache/logging/log4j/core/async/AsyncLogger.java   | 3 ++-
 .../main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java  | 3 ++-
 3 files changed, 4 insertions(+), 7 deletions(-)

diff --git 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/ClockFactoryTest.java
 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/ClockFactoryTest.java
index 0cd0ae257b..aa3771c140 100644
--- 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/ClockFactoryTest.java
+++ 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/ClockFactoryTest.java
@@ -24,11 +24,7 @@ import org.apache.logging.log4j.core.async.AsyncLogger;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.EnabledOnJre;
-import org.junit.jupiter.api.condition.JRE;
 
-// as of Java 12, final fields can no longer be overwritten via reflection
-@EnabledOnJre({JRE.JAVA_8, JRE.JAVA_9, JRE.JAVA_10, JRE.JAVA_11})
 public class ClockFactoryTest {
 
     public static void resetClocks() throws IllegalAccessException {
@@ -39,7 +35,6 @@ public class ClockFactoryTest {
     public static void resetClock(final Class<?> clazz) throws 
IllegalAccessException {
         System.clearProperty(ClockFactory.PROPERTY_NAME);
         final Field field = FieldUtils.getField(clazz, "CLOCK", true);
-        FieldUtils.removeFinalModifier(field);
         FieldUtils.writeStaticField(field, ClockFactory.getClock(), false);
     }
 
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
index 1151a0a1dc..d60d4ecb13 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
@@ -69,7 +69,8 @@ public class AsyncLogger extends Logger implements 
EventTranslatorVararg<RingBuf
     // immediate inlining instead of waiting until they are designated "hot 
enough".
 
     private static final StatusLogger LOGGER = StatusLogger.getLogger();
-    private static final Clock CLOCK = ClockFactory.getClock(); // not 
reconfigurable
+    @SuppressWarnings("FieldMayBeFinal") // enable mutation for tests
+    private static Clock CLOCK = ClockFactory.getClock(); // not reconfigurable
     private static final ContextDataInjector CONTEXT_DATA_INJECTOR = 
ContextDataInjectorFactory.createInjector();
 
     private static final ThreadNameCachingStrategy 
THREAD_NAME_CACHING_STRATEGY = ThreadNameCachingStrategy.create();
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
index 2e3ec3e451..beaccf37e0 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
@@ -55,7 +55,8 @@ import org.apache.logging.log4j.util.Strings;
 public class Log4jLogEvent implements LogEvent {
 
     private static final long serialVersionUID = -8393305700508709443L;
-    private static final Clock CLOCK = ClockFactory.getClock();
+    @SuppressWarnings("FieldMayBeFinal") // enable mutation for tests
+    private static Clock CLOCK = ClockFactory.getClock();
     private static volatile NanoClock nanoClock = new DummyNanoClock();
     private static final ContextDataInjector CONTEXT_DATA_INJECTOR = 
ContextDataInjectorFactory.createInjector();
 

Reply via email to