You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2022/01/18 18:55:19 UTC

[logging-log4j2] 01/02: Port StackAllocator changes from from release 2.x. - Do not allocate an extra collection. - Constants should be in upper case.

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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 282bd7b070465c2a8aea9161cb22c1d0699a4f0e
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jan 18 13:53:51 2022 -0500

    Port StackAllocator changes from from release 2.x.
    - Do not allocate an extra collection.
    - Constants should be in upper case.
---
 .../logging/log4j/util/StackLocatorUtilTest.java   |  1 -
 .../apache/logging/log4j/util/StackLocator.java    | 23 +++++++++++++---------
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java
index 3a944a2..82829e1 100644
--- a/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java
+++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java
@@ -31,7 +31,6 @@ import org.junit.runners.ParentRunner;
 @RunWith(BlockJUnit4ClassRunner.class)
 public class StackLocatorUtilTest {
 
-
     @Test
     public void testStackTraceEquivalence() throws Throwable {
         StackTraceElement[] stackTraceElements = expectedStack(new Throwable().getStackTrace());
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java
index 6807901..0203886 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java
@@ -27,9 +27,9 @@ import java.util.stream.Collectors;
  */
 public final class StackLocator {
 
-    private final static StackWalker walker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
+    private final static StackWalker WALKER = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
 
-    private final static StackWalker stackWalker = StackWalker.getInstance();
+    private final static StackWalker STACK_WALKER = StackWalker.getInstance();
 
     private final static StackLocator INSTANCE = new StackLocator();
 
@@ -53,7 +53,7 @@ public final class StackLocator {
         if (callerPredicate == null) {
             throw new IllegalArgumentException("callerPredicate cannot be null");
         }
-        return walker.walk(s -> s
+        return WALKER.walk(s -> s
                 .map(StackWalker.StackFrame::getDeclaringClass)
                 // Skip until the sentinel class is found
                 .dropWhile(clazz -> !sentinelClass.equals(clazz))
@@ -69,7 +69,7 @@ public final class StackLocator {
 
     @PerformanceSensitive
     public Class<?> getCallerClass(final String fqcn, final String pkg) {
-        return walker.walk(s -> s
+        return WALKER.walk(s -> s
                 .dropWhile(f -> !f.getClassName().equals(fqcn))
                 .dropWhile(f -> f.getClassName().equals(fqcn))
                 .dropWhile(f -> !f.getClassName().startsWith(pkg))
@@ -80,7 +80,7 @@ public final class StackLocator {
 
     @PerformanceSensitive
     public Class<?> getCallerClass(final Class<?> anchor) {
-        return walker.walk(s -> s.dropWhile(f -> !f.getDeclaringClass().equals(anchor)).
+        return WALKER.walk(s -> s.dropWhile(f -> !f.getDeclaringClass().equals(anchor)).
                 dropWhile(f -> f.getDeclaringClass().equals(anchor)).findFirst()).
                 map(StackWalker.StackFrame::getDeclaringClass).orElse(null);
     }
@@ -95,7 +95,7 @@ public final class StackLocator {
      */
     @PerformanceSensitive
     public Class<?> getCallerClass(final int depth) {
-        return walker.walk(s -> s.skip(depth).findFirst()).map(StackWalker.StackFrame::getDeclaringClass).orElse(null);
+        return WALKER.walk(s -> s.skip(depth).findFirst()).map(StackWalker.StackFrame::getDeclaringClass).orElse(null);
     }
 
     @PerformanceSensitive
@@ -104,18 +104,23 @@ public final class StackLocator {
         if (PrivateSecurityManagerStackTraceUtil.isEnabled()) {
             return PrivateSecurityManagerStackTraceUtil.getCurrentStackTrace();
         }
-        return new ArrayDeque<>(walker.walk(s -> s.map(StackWalker.StackFrame::getDeclaringClass).collect(Collectors.toList())));
+        final Deque<Class<?>> stack = new ArrayDeque<>();
+        return WALKER.walk(s -> {
+            s.forEach(f -> stack.add(f.getDeclaringClass()));
+            return stack;
+        });
+
     }
 
     public StackTraceElement calcLocation(final String fqcnOfLogger) {
-        return stackWalker.walk(
+        return STACK_WALKER.walk(
                 s -> s.dropWhile(f -> !f.getClassName().equals(fqcnOfLogger)) // drop the top frames until we reach the logger
                         .dropWhile(f -> f.getClassName().equals(fqcnOfLogger)) // drop the logger frames
                         .findFirst()).map(StackWalker.StackFrame::toStackTraceElement).orElse(null);
     }
 
     public StackTraceElement getStackTraceElement(final int depth) {
-        return stackWalker.walk(s -> s.skip(depth).findFirst())
+        return STACK_WALKER.walk(s -> s.skip(depth).findFirst())
                 .map(StackWalker.StackFrame::toStackTraceElement).orElse(null);
     }
 }